Name: series-workflowz6kqd Phase: Failed StartedAt: 2026-08-06 15:18:03 +0000 UTC FinishedAt: 2026-08-06 16:09:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6kqd[0] Phase: Succeeded StartedAt: 2026-08-06 15:18:03 +0000 UTC FinishedAt: 2026-08-06 16:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6kqd[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 15:18:03 +0000 UTC FinishedAt: 2026-08-06 16:09:43 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgb3IgQUhCIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGRlYnVnZnMgc3RhdGlzdGljcyBhbmQgYm91bmRzIGNoZWNraW5nIGZvciB0aG9zZSBzdGF0aXN0aWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYwZDBmZWNkYTdjNGQwMzQ4ZGI0ZmFmNzRlZjQ1NTJlOGIyNjQ4MmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE1OjU3OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbkBAIC0xMDcxLDYgJiM0MzsxMDcxLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9QTl9FUlJfRkxBR19TRVRdID0gXCYjMzQ7UE4gZXJyXCYjMzQ7LFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXCYjMzQ7RGVzYyBibG9ja2VkXCYjMzQ7fTtcbiBcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3J4X2Ryb3BbV0JNX0VSUl9EUk9QX01BWF0gPSB7XG4mIzQzO1x0XHRbV0JNX0VSUl9HRVRfU1dfREVTQ10gPSBcJiMzNDtTVyBkZXNjIGVycm9yXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfREVTQ19QQVJTRV0gPSBcJiMzNDtEZXNjIHBhcnNlIGVycm9yXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9JTlZfSFdfSURdID0gXCYjMzQ7SW52YWxpZCBodyBpZFwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUF0gPSBcJiMzNDtOdWxsIFBhcnRuZXIgZHBcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUF0gPSBcJiMzNDtQcm9jZXNzIE51bGwgUGFydG5lciBkcFwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QREVWXSA9IFwmIzM0O051bGwgUGRldlwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9BUl0gPSBcJiMzNDtOdWxsIGFyXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9DQUNfUlVOTklOR10gPSBcJiMzNDtDQUMgUnVubmluZ1wmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfU0ddID0gXCYjMzQ7U2NhdHRlciBHYXRoZXJcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFJdID0gXCYjMzQ7SW52YWxpZCBOV2lmaSBIZHIgbGVuXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10gID0gXCYjMzQ7UkVPIEdlbmVyaWNcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdID0gXCYjMzQ7UlhETUEgR2VuZXJpY1wmIzM0O307XG4mIzQzO1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yZWxfc3JjW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXSA9IHtcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfVFFNXSA9IFwmIzM0O1RRTVwmIzM0OyxcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gXCYjMzQ7UnhkbWFcJiMzNDssXG5AQCAtMTA5NSwxMyAmIzQzOzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVg7IGkmIzQzOyYjNDM7KVxuIFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDslczogJXVcXG5cJiMzNDssXG4tXHRcdFx0XHQgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcnhkbWFfZXJyb3JbaV0pO1xuJiM0MztcdFx0XHRcdCByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy1cdTAwM2V3Ym1fZXJyLnJ4ZG1hX2Vycm9yW2ldKTtcbiBcbiBcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O1xcblJFTyBlcnJvcnM6XFxuXCYjMzQ7KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYOyBpJiM0MzsmIzQzOylcbiBcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7JXM6ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0IHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy1cdTAwM2VyZW9fZXJyb3JbaV0pO1xuJiM0MztcdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5yZW9fZXJyb3JbaV0pO1xuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtcXG5XQk0gUnggRHJvcCBDb3VudDpcXG5cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFdCTV9FUlJfRFJPUF9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7JXM6ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIuZHJvcFtpXSk7XG4mIzQzO1xuJiM0MztcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sXG4mIzQzO1x0XHRcdCBcJiMzNDtcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGRldmljZV9zdGF0cy1cdTAwM2V3Ym1fZXJyLnN3X2Rlc2NfZmFsbGJhY2spO1xuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtcXG5SRU8gc2VudCB0byBzdGFja1xcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O3JpbmclZDpcJiMzNDssIGkpO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgYWItXHUwMDNlYWctXHUwMDNlbnVtX2RldmljZXM7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1xcdCVkOiV1XCYjMzQ7LCBqLFxuJiM0MztcdFx0XHRcdFx0IGRldmljZV9zdGF0cy1cdTAwM2VzZW50X3RvX3N0YWNrW2ldW2pdKTtcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0fVxuIFxuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuSEFMIFJFTyBlcnJvcnM6XFxuXCYjMzQ7KTtcbiBcbkBAIC0xMTE3LDYgJiM0MzsxMTUwLDExIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtyaW5nJWQ6ICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IGksIGRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIuZGVzY19uYVtpXSk7XG4gXG4mIzQzO1x0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0hXX01BWF9RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7cG9vbCVkOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaSwgZGV2aWNlX3N0YXRzLVx1MDAzZXR4X2Vyci50eGJ1Zl9uYVtpXSk7XG4mIzQzO1xuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbixcbiBcdFx0XHQgXCYjMzQ7XFxuTWlzYyBUcmFuc21pdCBGYWlsdXJlczogJWRcXG5cJiMzNDssXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIubWlzY19mYWlsKSk7XG5AQCAtMTE4MSw3ICYjNDM7MTIxOSw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuUkVPIFJ4IFJlY2VpdmVkOlxcblwmIzM0Oyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtSaW5nJWQ6XCYjMzQ7LCBpICYjNDM7IDEpO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7cmluZyVkOlwmIzM0OywgaSk7XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFiLVx1MDAzZWFnLVx1MDAzZW51bV9kZXZpY2VzOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sXG5AQCAtMTIxNSw4ICYjNDM7MTI1Myw0MSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MzthdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhYik7XG4mIzQzO1x0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFx1MDAyNmRwLVx1MDAzZWRldmljZV9zdGF0cztcbiYjNDM7XHRjaGFyIGJ1ZlsyMF0gPSB7fTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHQvKiBkcm9wIHRoZSBwb3NzaWJsZSAmIzM5O1xcbiYjMzk7IGZyb20gdGhlIGVuZCAqL1xuJiM0MztcdGlmIChjb3VudCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYnVmW2NvdW50IC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGJ1Zltjb3VudCAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtyZXNldFwmIzM0OykpIHtcbiYjNDM7XHRcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5zdXBwb3J0ZWQgY29tbWFuZDogJXNcXG5cJiMzNDssIGJ1Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfZGV2aWNlX2RwX3N0YXRzID0ge1xuIFx0LnJlYWQgPSBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyxcbiYjNDM7XHQud3JpdGUgPSBhdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMsXG4gXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gXHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXG5AQCAtMTIyNyw3ICYjNDM7MTI5OCw3IEBAIHZvaWQgYXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2ltdWxhdGVfZndfY3Jhc2hcJiMzNDssIDA2MDAsIGFiLVx1MDAzZWRlYnVnZnNfc29jLCBhYixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19zaW11bGF0ZV9md19jcmFzaCk7XG4gXG4tXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2RldmljZV9kcF9zdGF0c1wmIzM0OywgMDQwMCwgYWItXHUwMDNlZGVidWdmc19zb2MsIGFiLFxuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZGV2aWNlX2RwX3N0YXRzXCYjMzQ7LCAwNjAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfZGV2aWNlX2RwX3N0YXRzKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oXG5pbmRleCBiZWYwZjJiYTA1NjBmLi4yODlhZWRlNmRhYmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjaWZuZGVmIEFUSDEyS19EUF9IXG4gI2RlZmluZSBBVEgxMktfRFBfSFxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtkcF9zdGF0cy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2RwX2h0dC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZHBfY21uLmhcJiMzNDtcbkBAIC00MjksMTkgJiM0Mzs0MzAsMjcgQEAgc3RydWN0IGF0aDEya19kcF9hcmNoX29wcyB7XG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHtcbiBcdC8qIFRDTCBSaW5nIERlc2NyaXB0b3IgdW5hdmFpbGFibGUgKi9cbiBcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuJiM0MztcdC8qIFRYIGRlc2NyaXB0b3IgcG9vbCBleGhhdXN0ZWQgKHBlciBwb29sX2lkIC8gdHJhZmZpYyBjbGFzcykgKi9cbiYjNDM7XHR1MzIgdHhidWZfbmFbQVRIMTJLX0hXX01BWF9RVUVVRVNdO1xuIFx0LyogT3RoZXIgZmFpbHVyZXMgZHVyaW5nIGRwX3R4IGR1ZSB0byBtZW0gYWxsb2NhdGlvbiBmYWlsdXJlXG4gXHQgKiBpZHIgdW5hdmFpbGFibGUgZXRjLlxuIFx0ICovXG4gXHRhdG9taWNfdCBtaXNjX2ZhaWw7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XG4mIzQzO1x0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4mIzQzO1x0dTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07XG4mIzQzO1x0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XG4mIzQzO1x0dTMyIHN3X2Rlc2NfZmFsbGJhY2s7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHtcbiBcdHUzMiBlcnJfcmluZ19wa3RzO1xuIFx0dTMyIGludmFsaWRfcmJtO1xuLVx0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4tXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcbiBcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xuIFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjtcbiYjNDM7XHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHdibV9lcnI7XG4gXHR1MzIgcmVvX3J4W0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gXHR1MzIgcnhfd2JtX3JlbF9zb3VyY2VbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gXHR1MzIgdHFtX3JlbF9yZWFzb25bTUFYX1RRTV9SRUxFQVNFX1JFQVNPTl07XG5AQCAtNDUwLDYgJiM0Mzs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7XG4gXHR1MzIgdHhfZW5xdWV1ZWRbRFBfVENMX05VTV9SSU5HX01BWF07XG4gXHR1MzIgdHhfY29tcGxldGVkW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuIFx0dTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlO1xuJiM0MztcdHUzMiBzZW50X3RvX3N0YWNrW0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gfTtcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNGQzODkyYWNmZjMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBBVEgxMktfRFBfU1RBVFNfSFxuJiM0MzsjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19IXG4mIzQzO1xuJiM0MztlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIHtcbiYjNDM7XHRXQk1fRVJSX0dFVF9TV19ERVNDLFxuJiM0MztcdFdCTV9FUlJfREVTQ19QQVJTRSxcbiYjNDM7XHRXQk1fRVJSX0RST1BfSU5WX0hXX0lELFxuJiM0MztcdFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsXG4mIzQzO1x0V0JNX0VSUl9EUk9QX05VTExfUERFVixcbiYjNDM7XHRXQk1fRVJSX0RST1BfTlVMTF9BUixcbiYjNDM7XHRXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsXG4mIzQzO1x0V0JNX0VSUl9EUk9QX1NHLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQyxcbiYjNDM7XHRXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQyxcbiYjNDM7XHRXQk1fRVJSX0RST1BfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIEFUSDEyS19EUF9TVEFUU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5pbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbkBAIC0xMiw2ICYjNDM7MTIsMTUgQEBcbiAjaW5jbHVkZSBcJiMzNDtoYWxfd2NuNzg1MC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGFsX3FjYzIwNzIuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKm1zZHUsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYXRoMTJrX3dibV9lcnJfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW2Ryb3BfcmVhc29uXSYjNDM7JiM0Mzs7XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHUxNiBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X3BlZXJfaWQoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRcdCAgZW51bSBhdGgxMmtfcGVlcl9tZXRhZGF0YV92ZXJzaW9uIHZlcixcbiBcdFx0XHRcdFx0ICBfX2xlMzIgcGVlcl9tZXRhZGF0YSlcbkBAIC02NDIsNyAmIzQzOzY1MSwxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc19yZWNlaXZlZF9wYWNrZXRzKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRpZiAobGlrZWx5KHJpbmdfaWQgXHUwMDNjIERQX1JFT19EU1RfUklOR19NQVgpKVxuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuc2VudF90b19zdGFja1tyaW5nX2lkXVtwYXJ0bmVyX2RwLVx1MDAzZWRldmljZV9pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoZHBfcGRldiwgbmFwaSwgbXNkdSwgXHUwMDI2cnhfaW5mbyk7XG4gXHR9XG4gXG5AQCAtMTYxNCw2ICYjNDM7MTYyNiw3IEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2hfbnVsbF9xX2Rlc2Moc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBGaXJzdCBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLCBzbyBkZWR1Y3QgaXQmIzM5O3MgbGVuZ3RoICovXG4gXHRcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XG4gXHRcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcbiYjNDM7XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSYjNDM7JiM0Mzs7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTE2NDksOCAmIzQzOzE2NjIsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9udWxsX3FfZGVzYyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdHNrYl9wdXQobXNkdSwgaGFsX3J4X2Rlc2Nfc3ogJiM0MzsgbDNwYWRfYnl0ZXMgJiM0MzsgbXNkdV9sZW4pO1xuIFx0XHRza2JfcHVsbChtc2R1LCBoYWxfcnhfZGVzY19zeiAmIzQzOyBsM3BhZF9ieXRlcyk7XG4gXHR9XG4tXHRpZiAodW5saWtlbHkoIWF0aDEya19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKGRwLCBtc2R1LCByeF9pbmZvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKSB7XG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSYjNDM7JiM0Mzs7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGF0aDEya19kcF9yeF9oX3BwZHUoZHBfcGRldiwgcnhfaW5mbyk7XG4gXHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfaF9tcGR1KGRwX3BkZXYsIG1zZHUsIHJ4X2luZm8pO1xuQEAgLTE3NjMsNyAmIzQzOzE3NzgsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRib29sIGRyb3AgPSBmYWxzZTtcbiBcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yeGRtYV9lcnJvcltyeGNiLVx1MDAzZWVycl9jb2RlXSYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKGxpa2VseShyeGNiLVx1MDAzZWVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVgpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucnhkbWFfZXJyb3JbcnhjYi1cdTAwM2VlcnJfY29kZV0mIzQzOyYjNDM7O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9VTkFVVEhfV0RTX0VSUjpcbkBAIC0xNzgwLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0LyogVE9ETzogUmV2aWV3IG90aGVyIHJ4ZG1hIGVycm9yIGNvZGUgdG8gY2hlY2sgaWYgYW55dGhpbmcgaXNcbiBcdFx0ICogd29ydGggcmVwb3J0aW5nIHRvIG1hYzgwMjExXG4gXHRcdCAqL1xuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10mIzQzOyYjNDM7O1xuIFx0XHRkcm9wID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTc5Niw3ICYjNDM7MTgxNSwxMCBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yZW9fZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRib29sIGRyb3AgPSBmYWxzZTtcbiBcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbcnhjYi1cdTAwM2VlcnJfY29kZV0mIzQzOyYjNDM7O1xuJiM0MztcdGlmIChsaWtlbHkocnhjYi1cdTAwM2VlcnJfY29kZSBcdTAwM2MgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVgpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRzd2l0Y2ggKHJ4Y2ItXHUwMDNlZXJyX2NvZGUpIHtcbiBcdGNhc2UgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0FERFJfWkVSTzpcbkBAIC0xODEzLDYgJiM0MzsxODM1LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdC8qIFRPRE86IFJldmlldyBvdGhlciBlcnJvcnMgYW5kIHByb2Nlc3MgdGhlbSB0byBtYWM4MDIxMVxuIFx0XHQgKiBhcyBhcHByb3ByaWF0ZS5cbiBcdFx0ICovXG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10mIzQzOyYjNDM7O1xuIFx0XHRkcm9wID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTkzNSw2ICYjNDM7MTk1OCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfaGFsX3dibV9kZXNjX3BhcnNlX2VycihkcCwgcnhfZGVzYyxcbiBcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXJyX2luZm8pO1xuIFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9ERVNDX1BBUlNFXSYjNDM7JiM0Mzs7XG4gXHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBwYXJzZSByeCBlcnJvciBpbiB3Ym1fcmVsIHJpbmcgZGVzYyAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICByZXQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE5NDQsOCAmIzQzOzE5NjgsMTAgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xuIFx0XHRpZiAoIWRlc2NfaW5mbykge1xuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrJiM0MzsmIzQzOztcbiBcdFx0XHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XG4gXHRcdFx0aWYgKCFkZXNjX2luZm8pIHtcbiYjNDM7XHRcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfR0VUX1NXX0RFU0NdJiM0MzsmIzQzOztcbiBcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtJbnZhbGlkIGNvb2tpZSBpbiBEUCBXQk0gcnggZXJyb3IgZGVzY3JpcHRvciByZXRyaWV2YWw6IDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICBlcnJfaW5mby5jb29raWUpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMTk2MSw3ICYjNDM7MTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXHUwMDNlZGV2aWNlX2lkO1xuIFx0XHRwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQKTtcbiBcbiBcdFx0XHQvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldFxuIFx0XHRcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcbkBAIC0yMDA3LDcgJiM0MzsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cdTAwM2VoYWwsXG4gXHRcdFx0XHRcdFx0XHQgICAgbXNkdV9kYXRhKTtcbiBcdFx0aWYgKGh3X2xpbmtfaWQgXHUwMDNlPSBBVEgxMktfR1JPVVBfTUFYX1JBRElPKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTtcbiBcbiBcdFx0XHQvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldFxuIFx0XHRcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcbkBAIC0yMDY4LDcgJiM0MzsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCYjMzQ7VW5hYmxlIHRvIHByb2Nlc3MgV0JNIGVycm9yIG1zZHUgZHVlIHRvIGludmFsaWQgaHcgbGluayBpZCAlZCBkZXZpY2UgaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICBod19saW5rX2lkLCBkZXZpY2VfaWQpO1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuJiM0MztcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUCk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0yMDc3LDE4ICYjNDM7MjEwNiwyMSBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcbiBcdFx0ZHBfcGRldiA9IGF0aDEya19kcF90b19wZGV2X2RwKHBhcnRuZXJfZHAsIHBkZXZfaWR4KTtcbiBcdFx0aWYgKCFkcF9wZGV2KSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QREVWKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRhciA9IGF0aDEya19wZGV2X2RwX3RvX2FyKGRwX3BkZXYpO1xuIFxuIFx0XHRpZiAoIWFyIHx8ICFyY3VfZGVyZWZlcmVuY2UoYXItXHUwMDNlYWItXHUwMDNlcGRldnNfYWN0aXZlW3BkZXZfaWR4XSkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX0FSKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFx1MDAyNmFyLVx1MDAzZWRldl9mbGFncykpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9DQUNfUlVOTklORyk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbmluZGV4IDU4N2Q1OGVlY2NmYTUuLmY1NzJhYTU4MWQxMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuQEAgLTE2Nyw4ICYjNDM7MTY3LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXG4gXHR0eF9yaW5nID0gXHUwMDI2ZHAtXHUwMDNldHhfcmluZ1t0aS5yaW5nX2lkXTtcbiBcbiBcdHR4X2Rlc2MgPSBhdGgxMmtfZHBfdHhfYXNzaWduX2J1ZmZlcihkcCwgcG9vbF9pZCk7XG4tXHRpZiAoIXR4X2Rlc2MpXG4mIzQzO1x0aWYgKCF0eF9kZXNjKSB7XG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMudHhfZXJyLnR4YnVmX25hW3Bvb2xfaWRdJiM0MzsmIzQzOztcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0ZHBfbGlua192aWYgPSBhdGgxMmtfZHBfdmlmX3RvX2RwX2xpbmtfdmlmKFx1MDAyNmFodmlmLVx1MDAzZWRwX3ZpZiwgYXJ2aWYtXHUwMDNlbGlua19pZCk7XG4gXG5AQCAtNTc1LDE4ICYjNDM7NTc3LDIxIEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcbiB7XG4gXHRzdHJ1Y3QgaHR0X3R4X3dibV9jb21wbGV0aW9uICpzdGF0dXNfZGVzYztcbiBcdHN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTtcbi1cdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcbiYjNDM7XHRlbnVtIGhhbF93Ym1faHR0X3R4X2NvbXBfc3RhdHVzIGh0dF9zdGF0dXM7XG4gXHR1MTYgcGVlcl9pZDtcbiBcbiBcdHN0YXR1c19kZXNjID0gZGVzYztcbiBcbi1cdHdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVx1MDAzZWluZm8wLFxuJiM0MztcdGh0dF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVx1MDAzZWluZm8wLFxuIFx0XHRcdFx0ICAgSFRUX1RYX1dCTV9DT01QX0lORk8wX1NUQVRVUyk7XG4tXHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW3dibV9zdGF0dXNdJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAobGlrZWx5KGh0dF9zdGF0dXMgXHUwMDNjIE1BWF9GV19UWF9TVEFUVVMpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuLVx0c3dpdGNoICh3Ym1fc3RhdHVzKSB7XG4mIzQzO1x0c3dpdGNoIChodHRfc3RhdHVzKSB7XG4gXHRjYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzpcbi1cdFx0dHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spO1xuJiM0MztcdFx0dHMuYWNrZWQgPSB0cnVlO1xuIFx0XHR0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzIsXG4gXHRcdFx0XHRcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xuIFxuQEAgLTYwOCw3ICYjNDM7NjEzLDcgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLFxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRhdGgxMmtfd2FybihkcC1cdTAwM2VhYiwgXCYjMzQ7VW5rbm93biBodHQgd2JtIHR4IHN0YXR1cyAlZFxcblwmIzM0Oywgd2JtX3N0YXR1cyk7XG4mIzQzO1x0XHRhdGgxMmtfd2FybihkcC1cdTAwM2VhYiwgXCYjMzQ7VW5rbm93biBodHQgdHggc3RhdHVzICVkXFxuXCYjMzQ7LCBodHRfc3RhdHVzKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gfVxuQEAgLTk4NCwxMSAmIzQzOzk4OSwxNyBAQCB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxuIFx0XHQvKiBGaW5kIHRoZSBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUgdmFsdWUgKi9cbiBcdFx0YnVmX3JlbF9zb3VyY2UgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdFx0ICAgICAgIEhBTF9XQk1fUkVMRUFTRV9JTkZPMF9SRUxfU1JDX01PRFVMRSk7XG4tXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy50eF93Ym1fcmVsX3NvdXJjZVtidWZfcmVsX3NvdXJjZV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGxpa2VseShidWZfcmVsX3NvdXJjZSBcdTAwM2MgSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVgpKVxuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMudHhfd2JtX3JlbF9zb3VyY2VbYnVmX3JlbF9zb3VyY2VdJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0XHRyZWxfc3RhdHVzID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtXHUwMDNlaW5mbzAsXG4gXHRcdFx0XHRcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChsaWtlbHkocmVsX3N0YXR1cyBcdTAwM2MgTUFYX1RRTV9SRUxFQVNFX1JFQVNPTikpXG4mIzQzO1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdFx0LyogUmVsZWFzZSBkZXNjcmlwdG9yIGFzIHNvb24gYXMgZXh0cmFjdGluZyBuZWNlc3NhcnkgaW5mb1xuIFx0XHQgKiB0byByZWR1Y2UgY29udGVudGlvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jXG5pbmRleCA0OWM2OTMyODk3MDk0Li42MGU3YTM2MDk3ZjEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfaGFsX2Rlc2NfcmVvX3BhcnNlX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdCAgICBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9QVVNIX1JFQVNPTik7XG4gXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAobGlrZWx5KGVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRpZiAocHVzaF9yZWFzb24gIT0gSEFMX1JFT19ERVNUX1JJTkdfUFVTSF9SRUFTT05fRVJSX0RFVEVDVEVEIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX1JPVVRJTkdfSU5TVFJVQ1RJT04pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkMGZlY2RhN2M0ZDAzNDhkYjRmYWY3NGVmNDU1MmU4YjI2NDgyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTU6NTc6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCkBAIC0xMDcxLDYgJiM0MzsxMDcxLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLAogCQlbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9QTl9FUlJfRkxBR19TRVRdID0gJiMzNDtQTiBlcnImIzM0OywKIAkJW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19CTE9DS0VEXSA9ICYjMzQ7RGVzYyBibG9ja2VkJiMzNDt9OwogCiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICp3Ym1fcnhfZHJvcFtXQk1fRVJSX0RST1BfTUFYXSA9IHsKJiM0MzsJCVtXQk1fRVJSX0dFVF9TV19ERVNDXSA9ICYjMzQ7U1cgZGVzYyBlcnJvciYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfREVTQ19QQVJTRV0gPSAmIzM0O0Rlc2MgcGFyc2UgZXJyb3ImIzM0OywKJiM0MzsJCVtXQk1fRVJSX0RST1BfSU5WX0hXX0lEXSA9ICYjMzQ7SW52YWxpZCBodyBpZCYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQXSA9ICYjMzQ7TnVsbCBQYXJ0bmVyIGRwJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUF0gPSAmIzM0O1Byb2Nlc3MgTnVsbCBQYXJ0bmVyIGRwJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX05VTExfUERFVl0gPSAmIzM0O051bGwgUGRldiYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9OVUxMX0FSXSA9ICYjMzQ7TnVsbCBhciYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9DQUNfUlVOTklOR10gPSAmIzM0O0NBQyBSdW5uaW5nJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX1NHXSA9ICYjMzQ7U2NhdHRlciBHYXRoZXImIzM0OywKJiM0MzsJCVtXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUl0gPSAmIzM0O0ludmFsaWQgTldpZmkgSGRyIGxlbiYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10gID0gJiMzNDtSRU8gR2VuZXJpYyYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9SWERNQV9HRU5FUklDXSA9ICYjMzQ7UlhETUEgR2VuZXJpYyYjMzQ7fTsKJiM0MzsKIAlzdGF0aWMgY29uc3QgY2hhciAqd2JtX3JlbF9zcmNbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdID0gewogCQlbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU1dID0gJiMzNDtUUU0mIzM0OywKIAkJW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gJiMzNDtSeGRtYSYjMzQ7LApAQCAtMTA5NSwxMyAmIzQzOzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYOyBpJiM0MzsmIzQzOykKIAkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDslczogJXVcbiYjMzQ7LAotCQkJCSByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7cnhkbWFfZXJyb3JbaV0pOwomIzQzOwkJCQkgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtJmd0O3dibV9lcnIucnhkbWFfZXJyb3JbaV0pOwogCiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBlcnJvcnM6XG4mIzM0Oyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVg7IGkmIzQzOyYjNDM7KQogCQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0OyVzOiAldVxuJiMzNDssCi0JCQkJIHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7cmVvX2Vycm9yW2ldKTsKJiM0MzsJCQkJIHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7d2JtX2Vyci5yZW9fZXJyb3JbaV0pOwomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0O1xuV0JNIFJ4IERyb3AgQ291bnQ6XG4mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBXQk1fRVJSX0RST1BfTUFYOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7JXM6ICV1XG4mIzM0OywKJiM0MzsJCQkJIHdibV9yeF9kcm9wW2ldLCBkZXZpY2Vfc3RhdHMtJmd0O3dibV9lcnIuZHJvcFtpXSk7CiYjNDM7CiYjNDM7CWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCiYjNDM7CQkJICYjMzQ7XG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxuJiMzNDssCiYjNDM7CQkJIGRldmljZV9zdGF0cy0mZ3Q7d2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTsKJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBzZW50IHRvIHN0YWNrXG4mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtyaW5nJWQ6JiMzNDssIGkpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGFiLSZndDthZy0mZ3Q7bnVtX2RldmljZXM7IGomIzQzOyYjNDM7KQomIzQzOwkJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCiYjNDM7CQkJCQkgJiMzNDtcdCVkOiV1JiMzNDssIGosCiYjNDM7CQkJCQkgZGV2aWNlX3N0YXRzLSZndDtzZW50X3RvX3N0YWNrW2ldW2pdKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CX0KIAogCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7XG5IQUwgUkVPIGVycm9yczpcbiYjMzQ7KTsKIApAQCAtMTExNyw2ICYjNDM7MTE1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtyaW5nJWQ6ICV1XG4mIzM0OywKIAkJCQkgaSwgZGV2aWNlX3N0YXRzLSZndDt0eF9lcnIuZGVzY19uYVtpXSk7CiAKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblRYIERlc2NyaXB0b3IgUG9vbCBBbGxvYyBGYWlsdXJlczpcbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDEyS19IV19NQVhfUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7cG9vbCVkOiAldVxuJiMzNDssCiYjNDM7CQkJCSBpLCBkZXZpY2Vfc3RhdHMtJmd0O3R4X2Vyci50eGJ1Zl9uYVtpXSk7CiYjNDM7CiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwKIAkJCSAmIzM0O1xuTWlzYyBUcmFuc21pdCBGYWlsdXJlczogJWRcbiYjMzQ7LAogCQkJIGF0b21pY19yZWFkKCZhbXA7ZGV2aWNlX3N0YXRzLSZndDt0eF9lcnIubWlzY19mYWlsKSk7CkBAIC0xMTgxLDcgJiM0MzsxMjE5LDcgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsCiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBSeCBSZWNlaXZlZDpcbiYjMzQ7KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykgewotCQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0O1JpbmclZDomIzM0OywgaSAmIzQzOyAxKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7cmluZyVkOiYjMzQ7LCBpKTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgYWItJmd0O2FnLSZndDtudW1fZGV2aWNlczsgaiYjNDM7JiM0MzspIHsKIAkJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCkBAIC0xMjE1LDggJiM0MzsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2F0aDEya19kZWJ1Z2ZzX3dyaXRlX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhYik7CiYjNDM7CXN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzICpkZXZpY2Vfc3RhdHMgPSAmYW1wO2RwLSZndDtkZXZpY2Vfc3RhdHM7CiYjNDM7CWNoYXIgYnVmWzIwXSA9IHt9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY291bnQgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgY291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CS8qIGRyb3AgdGhlIHBvc3NpYmxlICYjMzk7XG4mIzM5OyBmcm9tIHRoZSBlbmQgKi8KJiM0MzsJaWYgKGNvdW50ICZndDsgMCAmYW1wOyZhbXA7IGJ1Zltjb3VudCAtIDFdID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWJ1Zltjb3VudCAtIDFdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlpZiAoIXN0cmNtcChidWYsICYjMzQ7cmVzZXQmIzM0OykpIHsKJiM0MzsJCW1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXRoMTJrX3dhcm4oYWIsICYjMzQ7dW5zdXBwb3J0ZWQgY29tbWFuZDogJXNcbiYjMzQ7LCBidWYpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RldmljZV9kcF9zdGF0cyA9IHsKIAkucmVhZCA9IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzLAomIzQzOwkud3JpdGUgPSBhdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMsCiAJLm9wZW4gPSBzaW1wbGVfb3BlbiwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCkBAIC0xMjI3LDcgJiM0MzsxMjk4LDcgQEAgdm9pZCBhdGgxMmtfZGVidWdmc19wZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaW11bGF0ZV9md19jcmFzaCYjMzQ7LCAwNjAwLCBhYi0mZ3Q7ZGVidWdmc19zb2MsIGFiLAogCQkJICAgICZhbXA7Zm9wc19zaW11bGF0ZV9md19jcmFzaCk7CiAKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZGV2aWNlX2RwX3N0YXRzJiMzNDssIDA0MDAsIGFiLSZndDtkZWJ1Z2ZzX3NvYywgYWIsCiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZXZpY2VfZHBfc3RhdHMmIzM0OywgMDYwMCwgYWItJmd0O2RlYnVnZnNfc29jLCBhYiwKIAkJCSAgICAmYW1wO2ZvcHNfZGV2aWNlX2RwX3N0YXRzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oCmluZGV4IGJlZjBmMmJhMDU2MGYuLjI4OWFlZGU2ZGFiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmgKQEAgLTcsNiAmIzQzOzcsNyBAQAogI2lmbmRlZiBBVEgxMktfRFBfSAogI2RlZmluZSBBVEgxMktfRFBfSAogCiYjNDM7I2luY2x1ZGUgJiMzNDtkcF9zdGF0cy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2RwX2h0dC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZHBfY21uLmgmIzM0OwpAQCAtNDI5LDE5ICYjNDM7NDMwLDI3IEBAIHN0cnVjdCBhdGgxMmtfZHBfYXJjaF9vcHMgewogc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHsKIAkvKiBUQ0wgUmluZyBEZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovCiAJdTMyIGRlc2NfbmFbRFBfVENMX05VTV9SSU5HX01BWF07CiYjNDM7CS8qIFRYIGRlc2NyaXB0b3IgcG9vbCBleGhhdXN0ZWQgKHBlciBwb29sX2lkIC8gdHJhZmZpYyBjbGFzcykgKi8KJiM0MzsJdTMyIHR4YnVmX25hW0FUSDEyS19IV19NQVhfUVVFVUVTXTsKIAkvKiBPdGhlciBmYWlsdXJlcyBkdXJpbmcgZHBfdHggZHVlIHRvIG1lbSBhbGxvY2F0aW9uIGZhaWx1cmUKIAkgKiBpZHIgdW5hdmFpbGFibGUgZXRjLgogCSAqLwogCWF0b21pY190IG1pc2NfZmFpbDsKIH07CiAKJiM0MztzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHsKJiM0MzsJdTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07CiYjNDM7CXUzMiByZW9fZXJyb3JbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVhdOwomIzQzOwl1MzIgZHJvcFtXQk1fRVJSX0RST1BfTUFYXTsKJiM0MzsJdTMyIHN3X2Rlc2NfZmFsbGJhY2s7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHsKIAl1MzIgZXJyX3JpbmdfcGt0czsKIAl1MzIgaW52YWxpZF9yYm07Ci0JdTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07Ci0JdTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07CiAJdTMyIGhhbF9yZW9fZXJyb3JbRFBfUkVPX0RTVF9SSU5HX01BWF07CiAJc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjsKJiM0MzsJc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB3Ym1fZXJyOwogCXUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTsKIAl1MzIgcnhfd2JtX3JlbF9zb3VyY2VbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdW0FUSDEyS19NQVhfREVWSUNFU107CiAJdTMyIHRxbV9yZWxfcmVhc29uW01BWF9UUU1fUkVMRUFTRV9SRUFTT05dOwpAQCAtNDUwLDYgJiM0Mzs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7CiAJdTMyIHR4X2VucXVldWVkW0RQX1RDTF9OVU1fUklOR19NQVhdOwogCXUzMiB0eF9jb21wbGV0ZWRbRFBfVENMX05VTV9SSU5HX01BWF07CiAJdTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlOwomIzQzOwl1MzIgc2VudF90b19zdGFja1tEUF9SRU9fRFNUX1JJTkdfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdOwogfTsKIAogc3RydWN0IGF0aDEya19kcCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDRkMzg5MmFjZmYzMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaApAQCAtMCwwICYjNDM7MSwyNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgQVRIMTJLX0RQX1NUQVRTX0gKJiM0MzsjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19ICiYjNDM7CiYjNDM7ZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiB7CiYjNDM7CVdCTV9FUlJfR0VUX1NXX0RFU0MsCiYjNDM7CVdCTV9FUlJfREVTQ19QQVJTRSwKJiM0MzsJV0JNX0VSUl9EUk9QX0lOVl9IV19JRCwKJiM0MzsJV0JNX0VSUl9EUk9QX05VTExfUFJUTlJfRFAsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX1BERVYsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX0FSLAomIzQzOwlXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsCiYjNDM7CVdCTV9FUlJfRFJPUF9TRywKJiM0MzsJV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFIsCiYjNDM7CVdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQywKJiM0MzsJV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUMsCiYjNDM7CVdCTV9FUlJfRFJPUF9NQVgsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogQVRIMTJLX0RQX1NUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwppbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAKICNpbmNsdWRlICYjMzQ7aGFsX3djbjc4NTAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hhbF9xY2MyMDcyLmgmIzM0OwogCiYjNDM7c3RhdGljIHZvaWQKJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBza19idWZmICptc2R1LAomIzQzOwkJCQkgICAgZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbikKJiM0Mzt7CiYjNDM7CWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW2Ryb3BfcmVhc29uXSYjNDM7JiM0Mzs7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1MTYgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQkJCQkgIGVudW0gYXRoMTJrX3BlZXJfbWV0YWRhdGFfdmVyc2lvbiB2ZXIsCiAJCQkJCSAgX19sZTMyIHBlZXJfbWV0YWRhdGEpCkBAIC02NDIsNyAmIzQzOzY1MSwxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc19yZWNlaXZlZF9wYWNrZXRzKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiAJCQljb250aW51ZTsKIAkJfQotCiYjNDM7CQlpZiAobGlrZWx5KHJpbmdfaWQgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnNlbnRfdG9fc3RhY2tbcmluZ19pZF1bcGFydG5lcl9kcC0mZ3Q7ZGV2aWNlX2lkXSYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKDEpOwogCQlhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KGRwX3BkZXYsIG5hcGksIG1zZHUsICZhbXA7cnhfaW5mbyk7CiAJfQogCkBAIC0xNjE0LDYgJiM0MzsxNjI2LDcgQEAgc3RhdGljIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9udWxsX3FfZGVzYyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCS8qIEZpcnN0IGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIsIHNvIGRlZHVjdCBpdCYjMzk7cyBsZW5ndGggKi8KIAkJbXNkdV9sZW4gPSBtc2R1X2xlbiAtIChEUF9SWF9CVUZGRVJfU0laRSAtIGhhbF9yeF9kZXNjX3N6KTsKIAkJYXRoMTJrX3dpZmk3X2RwX3J4X251bGxfcV9kZXNjX3NnX2Ryb3AoZHAsIG1zZHVfbGVuLCBtc2R1X2xpc3QpOwomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSYjNDM7JiM0Mzs7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTY0OSw4ICYjNDM7MTY2MiwxMCBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAkJc2tiX3B1dChtc2R1LCBoYWxfcnhfZGVzY19zeiAmIzQzOyBsM3BhZF9ieXRlcyAmIzQzOyBtc2R1X2xlbik7CiAJCXNrYl9wdWxsKG1zZHUsIGhhbF9yeF9kZXNjX3N6ICYjNDM7IGwzcGFkX2J5dGVzKTsKIAl9Ci0JaWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKQomIzQzOwlpZiAodW5saWtlbHkoIWF0aDEya19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKGRwLCBtc2R1LCByeF9pbmZvKSkpIHsKJiM0MzsJCWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSYjNDM7JiM0Mzs7CiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlhdGgxMmtfZHBfcnhfaF9wcGR1KGRwX3BkZXYsIHJ4X2luZm8pOwogCXJldCA9IGF0aDEya193aWZpN19kcF9yeF9oX21wZHUoZHBfcGRldiwgbXNkdSwgcnhfaW5mbyk7CkBAIC0xNzYzLDcgJiM0MzsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlib29sIGRyb3AgPSBmYWxzZTsKIAotCWRwLSZndDtkZXZpY2Vfc3RhdHMucnhkbWFfZXJyb3JbcnhjYi0mZ3Q7ZXJyX2NvZGVdJiM0MzsmIzQzOzsKJiM0MzsJaWYgKGxpa2VseShyeGNiLSZndDtlcnJfY29kZSAmbHQ7IEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucnhkbWFfZXJyb3JbcnhjYi0mZ3Q7ZXJyX2NvZGVdJiM0MzsmIzQzOzsKJiM0MzsJZWxzZQomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwogCiAJc3dpdGNoIChyeGNiLSZndDtlcnJfY29kZSkgewogCWNhc2UgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfVU5BVVRIX1dEU19FUlI6CkBAIC0xNzgwLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAkJLyogVE9ETzogUmV2aWV3IG90aGVyIHJ4ZG1hIGVycm9yIGNvZGUgdG8gY2hlY2sgaWYgYW55dGhpbmcgaXMKIAkJICogd29ydGggcmVwb3J0aW5nIHRvIG1hYzgwMjExCiAJCSAqLwomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdJiM0MzsmIzQzOzsKIAkJZHJvcCA9IHRydWU7CiAJCWJyZWFrOwogCX0KQEAgLTE3OTYsNyAmIzQzOzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlib29sIGRyb3AgPSBmYWxzZTsKIAotCWRwLSZndDtkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWlmIChsaWtlbHkocnhjYi0mZ3Q7ZXJyX2NvZGUgJmx0OyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAogCXN3aXRjaCAocnhjYi0mZ3Q7ZXJyX2NvZGUpIHsKIAljYXNlIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19BRERSX1pFUk86CkBAIC0xODEzLDYgJiM0MzsxODM1LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCS8qIFRPRE86IFJldmlldyBvdGhlciBlcnJvcnMgYW5kIHByb2Nlc3MgdGhlbSB0byBtYWM4MDIxMQogCQkgKiBhcyBhcHByb3ByaWF0ZS4KIAkJICovCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdJiM0MzsmIzQzOzsKIAkJZHJvcCA9IHRydWU7CiAJCWJyZWFrOwogCX0KQEAgLTE5MzUsNiAmIzQzOzE5NTgsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAkJcmV0ID0gYXRoMTJrX3dpZmk3X2hhbF93Ym1fZGVzY19wYXJzZV9lcnIoZHAsIHJ4X2Rlc2MsCiAJCQkJCQkJICAmYW1wO2Vycl9pbmZvKTsKIAkJaWYgKHJldCkgewomIzQzOwkJCWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfREVTQ19QQVJTRV0mIzQzOyYjNDM7OwogCQkJYXRoMTJrX3dhcm4oYWIsICYjMzQ7ZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXG4mIzM0OywKIAkJCQkgICAgcmV0KTsKIAkJCWNvbnRpbnVlOwpAQCAtMTk0NCw4ICYjNDM7MTk2OCwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAogCQkvKiByZXRyeSBtYW51YWwgZGVzYyByZXRyaWV2YWwgaWYgaHcgY2MgaXMgbm90IGRvbmUgKi8KIAkJaWYgKCFkZXNjX2luZm8pIHsKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuc3dfZGVzY19mYWxsYmFjayYjNDM7JiM0Mzs7CiAJCQlkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7CiAJCQlpZiAoIWRlc2NfaW5mbykgewomIzQzOwkJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0dFVF9TV19ERVNDXSYjNDM7JiM0Mzs7CiAJCQkJYXRoMTJrX3dhcm4oYWIsICYjMzQ7SW52YWxpZCBjb29raWUgaW4gRFAgV0JNIHJ4IGVycm9yIGRlc2NyaXB0b3IgcmV0cmlldmFsOiAweCV4XG4mIzM0OywKIAkJCQkJICAgIGVycl9pbmZvLmNvb2tpZSk7CiAJCQkJY29udGludWU7CkBAIC0xOTYxLDcgJiM0MzsxOTg3LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCWRldmljZV9pZCA9IGRlc2NfaW5mby0mZ3Q7ZGV2aWNlX2lkOwogCQlwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7CiAJCWlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX05VTExfUFJUTlJfRFApOwogCiAJCQkvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldAogCQkJICogaW4gdGhlIHByZXZpb3VzIHJlY29yZCwgY2xlYW51cCBzY2F0dGVyX21zZHVfbGlzdApAQCAtMjAwNyw3ICYjNDM7MjAzNCw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQlod19saW5rX2lkID0gYXRoMTJrX2RwX3J4X2dldF9tc2R1X3NyY19saW5rKHBhcnRuZXJfZHAtJmd0O2hhbCwKIAkJCQkJCQkgICAgbXNkdV9kYXRhKTsKIAkJaWYgKGh3X2xpbmtfaWQgJmd0Oz0gQVRIMTJLX0dST1VQX01BWF9SQURJTykgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTsKIAogCQkJLyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXQKIAkJCSAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3QKQEAgLTIwNjgsNyAmIzQzOzIwOTYsOCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAkJCWF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSwKIAkJCQkgICAmIzM0O1VuYWJsZSB0byBwcm9jZXNzIFdCTSBlcnJvciBtc2R1IGR1ZSB0byBpbnZhbGlkIGh3IGxpbmsgaWQgJWQgZGV2aWNlIGlkICVkXG4mIzM0OywKIAkJCQkgICBod19saW5rX2lkLCBkZXZpY2VfaWQpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIwNzcsMTggJiM0MzsyMTA2LDIxIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCiAJCWRwX3BkZXYgPSBhdGgxMmtfZHBfdG9fcGRldl9kcChwYXJ0bmVyX2RwLCBwZGV2X2lkeCk7CiAJCWlmICghZHBfcGRldikgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfTlVMTF9QREVWKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7CiAKIAkJaWYgKCFhciB8fCAhcmN1X2RlcmVmZXJlbmNlKGFyLSZndDthYi0mZ3Q7cGRldnNfYWN0aXZlW3BkZXZfaWR4XSkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX05VTExfQVIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsICZhbXA7YXItJmd0O2Rldl9mbGFncykpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX0NBQ19SVU5OSU5HKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwppbmRleCA1ODdkNThlZWNjZmE1Li5mNTcyYWE1ODFkMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCkBAIC0xNjcsOCAmIzQzOzE2NywxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYQogCXR4X3JpbmcgPSAmYW1wO2RwLSZndDt0eF9yaW5nW3RpLnJpbmdfaWRdOwogCiAJdHhfZGVzYyA9IGF0aDEya19kcF90eF9hc3NpZ25fYnVmZmVyKGRwLCBwb29sX2lkKTsKLQlpZiAoIXR4X2Rlc2MpCiYjNDM7CWlmICghdHhfZGVzYykgewomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy50eF9lcnIudHhidWZfbmFbcG9vbF9pZF0mIzQzOyYjNDM7OwogCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQogCiAJZHBfbGlua192aWYgPSBhdGgxMmtfZHBfdmlmX3RvX2RwX2xpbmtfdmlmKCZhbXA7YWh2aWYtJmd0O2RwX3ZpZiwgYXJ2aWYtJmd0O2xpbmtfaWQpOwogCkBAIC01NzUsMTggJiM0Mzs1NzcsMjEgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLAogewogCXN0cnVjdCBodHRfdHhfd2JtX2NvbXBsZXRpb24gKnN0YXR1c19kZXNjOwogCXN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTsKLQllbnVtIGhhbF93Ym1faHR0X3R4X2NvbXBfc3RhdHVzIHdibV9zdGF0dXM7CiYjNDM7CWVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgaHR0X3N0YXR1czsKIAl1MTYgcGVlcl9pZDsKIAogCXN0YXR1c19kZXNjID0gZGVzYzsKIAotCXdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLSZndDtpbmZvMCwKJiM0MzsJaHR0X3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtJmd0O2luZm8wLAogCQkJCSAgIEhUVF9UWF9XQk1fQ09NUF9JTkZPMF9TVEFUVVMpOwotCWRwLSZndDtkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW3dibV9zdGF0dXNdJiM0MzsmIzQzOzsKJiM0MzsJaWYgKGxpa2VseShodHRfc3RhdHVzICZsdDsgTUFYX0ZXX1RYX1NUQVRVUykpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAotCXN3aXRjaCAod2JtX3N0YXR1cykgewomIzQzOwlzd2l0Y2ggKGh0dF9zdGF0dXMpIHsKIAljYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzoKLQkJdHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spOwomIzQzOwkJdHMuYWNrZWQgPSB0cnVlOwogCQl0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtJmd0O2luZm8yLAogCQkJCQkgICAgSFRUX1RYX1dCTV9DT01QX0lORk8yX0FDS19SU1NJKTsKIApAQCAtNjA4LDcgJiM0Mzs2MTMsNyBAQCBhdGgxMmtfZHBfdHhfcHJvY2Vzc19odHRfdHhfY29tcGxldGUoc3RydWN0IGF0aDEya19kcCAqZHAsIHZvaWQgKmRlc2MsCiAJCSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGgxMmtfd2FybihkcC0mZ3Q7YWIsICYjMzQ7VW5rbm93biBodHQgd2JtIHR4IHN0YXR1cyAlZFxuJiMzNDssIHdibV9zdGF0dXMpOwomIzQzOwkJYXRoMTJrX3dhcm4oZHAtJmd0O2FiLCAmIzM0O1Vua25vd24gaHR0IHR4IHN0YXR1cyAlZFxuJiMzNDssIGh0dF9zdGF0dXMpOwogCQlicmVhazsKIAl9CiB9CkBAIC05ODQsMTEgJiM0Mzs5ODksMTcgQEAgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGlvbl9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgcmluZ19pZCkKIAkJLyogRmluZCB0aGUgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFIHZhbHVlICovCiAJCWJ1Zl9yZWxfc291cmNlID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtJmd0O2luZm8wLAogCQkJCQkgICAgICAgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFKTsKLQkJZHAtJmd0O2RldmljZV9zdGF0cy50eF93Ym1fcmVsX3NvdXJjZVtidWZfcmVsX3NvdXJjZV0mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGxpa2VseShidWZfcmVsX3NvdXJjZSAmbHQ7IEhBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKDEpOwogCiAJCXJlbF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy0mZ3Q7aW5mbzAsCiAJCQkJCSAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTsKLQkJZHAtJmd0O2RldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobGlrZWx5KHJlbF9zdGF0dXMgJmx0OyBNQVhfVFFNX1JFTEVBU0VfUkVBU09OKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdJiM0MzsmIzQzOzsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXQVJOX09OX09OQ0UoMSk7CiAKIAkJLyogUmVsZWFzZSBkZXNjcmlwdG9yIGFzIHNvb24gYXMgZXh0cmFjdGluZyBuZWNlc3NhcnkgaW5mbwogCQkgKiB0byByZWR1Y2UgY29udGVudGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmMKaW5kZXggNDljNjkzMjg5NzA5NC4uNjBlN2EzNjA5N2YxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jCkBAIC0zMjksNyAmIzQzOzMyOSwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2hhbF9kZXNjX3Jlb19wYXJzZV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCQkJICAgIEhBTF9SRU9fREVTVF9SSU5HX0lORk8wX1BVU0hfUkVBU09OKTsKIAllcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy0mZ3Q7aW5mbzAsCiAJCQkJIEhBTF9SRU9fREVTVF9SSU5HX0lORk8wX0VSUk9SX0NPREUpOwotCWRwLSZndDtkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWlmIChsaWtlbHkoZXJyX2NvZGUgJmx0OyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAogCWlmIChwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9FUlJfREVURUNURUQgJmFtcDsmYW1wOwogCSAgICBwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9ST1VUSU5HX0lOU1RSVUNUSU9OKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogYXRoMTJrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYSBoYW5kZnVsIG9mIGBhdGgxMmtgIGZpbGVzOiBgZGVidWdmcy5jYCwgYGRwLmhgLCBgZHBfc3RhdHMuaGAsIGFuZCBzb21lIGB3aWZpN2AgZmlsZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIG5ldyBzdGF0cyB0byBgYXRoMTJrX2RldmljZV9kcF9zdGF0c2AgYW5kIHVwZGF0aW5nIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byBoYW5kbGUgZHVtcGluZyBhbmQgcmVzZXR0aW5nIHRoZXNlIHN0YXRzLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIHN0YXRzIGFycmF5cywgd2hpY2ggaXMgZ3JlYXQuICBUaGluZ3MgbGlrZSBgaWYgKGxpa2VseShyeGNiLSZndDtlcnJfY29kZSAmbHQ7IEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpYCBiZWZvcmUgaW5jcmVtZW50aW5nIGFuIGFycmF5IGVudHJ5LiBUaGV5JiMzOTtyZSBhbHNvIHRocm93aW5nIGluIGEgYFdBUk5fT05fT05DRSgxKWAgaWYgdGhvc2UgYm91bmRzIGFyZSB2aW9sYXRlZCwgd2hpY2ggaXMgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZHJvcCByZWFzb25zIHRyYWNrZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6emFibGU/ICBUaGUgY2hhbmdlcyBhcmUgYmFzaWNhbGx5OiBkZWJ1Z2ZzIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciBgZGV2aWNlX2RwX3N0YXRzYCwgdGhlIGJvdW5kcyBjaGVja3MgSSBtZW50aW9uZWQsIGFuZCBzdGF0cyBjb3VudGVyIGluY3JlbWVudHMuIFRoZSBib3VuZHMgY2hlY2tpbmcgaXMgdGhlIGtleSBwYXJ0IGZvciBmdXp6aW5nIHBvdGVudGlhbCwgYnV0IGl0ICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgY2hlY2tzIGxpa2UgdGhpcyB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgZHVyaW5nIHN0YXRzIGluY3JlbWVudGluZy4gVGhlIGV4YW1wbGUgY29kZSBzbmlwcGV0IGlzIHZlcnkgY2xlYXIg4oCTIHRoZXkmIzM5O3JlIG1ha2luZyBzdXJlIGByeGNiLSZndDtlcnJfY29kZWAgaXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgYmVmb3JlIGFjY2Vzc2luZyBgZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLnJ4ZG1hX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXWAuICBUaGF0IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGlzIGlzIGFuIGBhdGgxMmtgIGRyaXZlci4gSXQmIzM5O3MgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgbWVhbmluZyBQQ0kgb3IgQUhCIGhhcmR3YXJlLiAgV2ktRmkgZHJpdmVycyBvZnRlbiByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gIEkmIzM5O20gcmFja2luZyBteSBicmFpbiwgZG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIGBhdGgxMmtgPyBOb3BlLiBOb3QgdGhhdCBJJiMzOTttIGF3YXJlIG9mLiAgYG1hYzgwMjExX2h3c2ltYCAqZW11bGF0ZXMqIFdpLUZpIGluIGEgZ2VuZXJhbCB3YXksIGJ1dCBgYXRoMTJrYCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gQ2FuIGBhdGgxMmtgIGJlIHByb2JlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmU/IExldCBtZSBjaGVja+KApiBub3BlLCBpdCYjMzk7cyBhIFBDSS9BSEIgZHJpdmVyLiAgQW5kIG5vLCBJJiMzOTttIG5vdCBmaW5kaW5nIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4KCk9rYXksIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgIGBhdGgxMmtgIGlzICpleGFjdGx5KiB0aGF0IOKAkyB2ZW5kb3Itc3BlY2lmaWMsIFBDSWUvQUhCIChzbyB0aGF0IG1lYW5zIFBDSWUtbGlrZSksIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgYWN0dWFsIGhhcmR3YXJlLiBTbywgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIGFuZCB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQsIEkgbXVzdCBjb25jbHVkZSB0aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyB3aXRoaW4gdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoZSB2ZXJ5IG5hdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIHRhcmdldCBoYXJkd2FyZSBtYWtlcyBpdCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyLiphdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTk6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEF0eXBpY2FsIEhlbW9seXRpYyBVcmVtaWMgU3luZHJvbWUgKGFIVVMpIG9yIFNpbWlsYXIgQ29uZGl0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtZSB0aGlua2luZyBhYm91dCBBSEIuIEJ1dCBJIGNhbiYjMzk7dCBqdW1wIHRvIGNvbmNsdXNpb25zIGp1c3QgeWV0LiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBydWxlIG91dCBvdGhlciBwb3NzaWJpbGl0aWVzLCBvciBhdCBsZWFzdCBjb25zaWRlciB0aGVtLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzbiYjMzk7dCBzb21ldGhpbmcgZWxzZSAqYWxvbmdzaWRlKiBvciAqaW5zdGVhZCBvZiogQUhCLiBJIHdhbnQgdG8gYXBwcm9hY2ggdGhpcyBzeXN0ZW1hdGljYWxseSwgd2l0aCBhIGJyb2FkIGRpZmZlcmVudGlhbCBkaWFnbm9zaXMgaW4gbWluZCwgYW5kIG5vdCBtaXNzIGEgdHJpY2suIFNvLCBteSB0aG91Z2h0IGlzOiBMZXQmIzM5O3MgaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGlzIHN0cmljdGx5IEFIQiwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSB0byB0aGUgc3RvcnkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBjYXN0IGEgd2lkZXIgbmV0IGluIG15IHRoaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0LiphdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya193aWZpN19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQmIzM5O3MgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGEgV2lGaSA3IGRldmljZSBsaWtlIGluIHRoaXMgY29udGV4dD8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoZSBhdGgxMGsgYW5kIGF0aDExayBmYW1pbGllczsgSSB3b25kZXIgd2hhdCBhcmNoaXRlY3R1cmFsIGRpZmZlcmVuY2VzIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgZm9yIFdpRmkgNyBhbmQgaG93IHRob3NlIGFyZSByZWZsZWN0ZWQgaW4gdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCBoYXJkd2FyZS1zcGVjaWZpYywgZHJpdmVyLXNwZWNpZmljLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IG5ldyByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBoZXJlIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgODAyLjExYmUgc3RhbmRhcmQsIG9yIGlzIGl0IGJ1aWxkaW5nIHVwb24gZXhpc3RpbmcgY29kZT8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiBxdWl0ZSBhIGJpdCBmcm9tIHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgaWYgdGhlIGF1dGhvcnMgaGF2ZSBpbmNsdWRlZCBhbnkgY29tbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3dpZmk3X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9MzM9dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjM5OnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBhdGgxMmtfd2lmaTdfaW5pdGAgY29kZSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEF0aDEyayBXaUZpIDcgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIGBhdGgxMmtfd2lmaTdfaW5pdGAuIEltbWVkaWF0ZWx5LCB0aGUgJiMzNDtpbml0JiMzNDsgcGFydCBzaWduYWxzIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhlIFdpRmkgNyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgaW5pdGlhbCBkZXZpY2UgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBoYXJkd2FyZSwgY29uZmlndXJlcyB0aGUgcmFkaW8sIGFuZCBzZXRzIHVwIHRoZSBmb3VuZGF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBXaUZpIDcgb3BlcmF0aW9ucy4gSSBiZXQgdGhpcyBpcyB3aGVyZSB0aGUgcG93ZXItdXAgc2VxdWVuY2UsIFBIWSBpbml0aWFsaXphdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIHNldHRpbmdzLCBjbG9jayBjb25maWd1cmF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGRyaXZlciBzdHJ1Y3R1cmVzLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBuZXcgZmVhdHVyZXMgb2YgV2lGaSA3LCBsaWtlIHRoZSAzMjAgTUh6IGNoYW5uZWxzLCBtdWx0aS1saW5rIG9wZXJhdGlvbiwgYW5kIGltcHJvdmVkIG1vZHVsYXRpb24gc2NoZW1lcywgYXJlIGludGVncmF0ZWQgYXQgdGhlIHZlcnkgc3RhcnQuIEkmIzM5O2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgbWFkZSBoZXJlIHRvIGVuYWJsZSB0aGlzIG5ldyBzdGFuZGFyZC4gSXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBkcml2ZXIgc2V0dXAsIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgY29tZSB0b2dldGhlci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzOTpcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHRhaGJfZXJyID0gYXRoMTJrX3dpZmk3X2FoYl9pbml0KCk7XG4gIDQyOlx0XHRpZiAoYWhiX2VycilcbiAgNDM6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcblwmIzM0OyxcbiAgNDQ6XHRcdFx0XHRhaGJfZXJyKTtcbiAgNDU6XHRcbiAgNDY6XHRcdHBjaV9lcnIgPSBhdGgxMmtfd2lmaTdfcGNpX2luaXQoKTtcbiAgNDc6XHRcdGlmIChwY2lfZXJyKVxuICA0ODpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0OTpcdFx0XHRcdHBjaV9lcnIpO1xuICA1MDpcdFxuICA1MTpcdFx0LyogSWYgYm90aCBmYWlsZWQsIHJldHVybiBvbmUgb2YgdGhlIGZhaWx1cmVzIChhcmJpdHJhcnkpICovXG4gIDUyOlx0XHRyZXR1cm4gYWhiX2VyciBcdTAwMjZcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xuICA1MzpcdH1cbiAgNTQ6XHRcbiAgNTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdGlmICghcGNpX2VycilcbiAgNTg6XHRcdFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI0CgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NtZW50IG9mIEZ1enppbmcgVmlhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBwYXRjaCBpc24mIzM5O3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGhlcmUmIzM5O3Mgd2h5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gTm93LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYm90aCBvZiB0aGVzZSBpbnRlcmZhY2VzIGFyZSB0aWVkIHRvIGFjdHVhbCwgcGh5c2ljYWwgaGFyZHdhcmUuIFdoaWxlIEFIQiAqY291bGQqIHRoZW9yZXRpY2FsbHkgYmUgcmVwcmVzZW50ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBub2Rlcywgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBvZmZlciB0aGVzZSBnZW5lcmljIEFIQiBkZXZpY2UgdHJlZSBub2Rlcy4gSXQgaXMgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHBvc3NpYmxlIHRvIGVtdWxhdGUuCgpNb3Jlb3ZlciwgdGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gYW5kIHNvbWUgYm91bmRzIGNoZWNraW5nIGFyb3VuZCB0aG9zZSBzdGF0aXN0aWNzLiBUaGF0IHNvdW5kcyBpbm5vY3VvdXMgb24gaXRzIG93biwgYnV0IGNvbnRleHQgaXMgZXZlcnl0aGluZy4gQmVjYXVzZSBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXLigJRpbiB0aGlzIGNhc2UsIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGhhcmR3YXJlIChhdGgxMmsp4oCUaXQmIzM5O3MgcmVhc29uYWJsZSB0byBhc3N1bWUgYSBkZWdyZWUgb2YgaGFyZHdhcmUgZGVwZW5kZW5jeS4gV2Uga25vdyBpdCByZXF1aXJlcyByZWFsIFBDSWUgYW5kL29yIEFIQiBoYXJkd2FyZSwgYW5kIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBnb29kIGVtdWxhdGlvbiBvZiB0aGlzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzLCBpdCYjMzk7cyBub3QgcHJhY3RpY2FsIHRvIHByb2NlZWQgd2l0aCBmdXp6aW5nIHRoaXMuIFJldHVybmluZyBXb3J0aEZ1enppbmc9ZmFsc2Ugc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2Ugd2l0aCB0aGUganVzdGlmaWNhdGlvbiBiZWluZyB0aGF0IHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgV2ktRmkgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIFBDSWUvQUhCIGhhcmR3YXJlIG5vdCByZWFsaXN0aWNhbGx5IGVtdWxhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIG9yIEFIQiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBkZWJ1Z2ZzIHN0YXRpc3RpY3MgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgdGhvc2Ugc3RhdGlzdGljcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTU6NTc6MjMuMzU0OTk0NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5NjY4NTY4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyMy4zNTUwMTcxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMDg4OTc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwZDBmZWNkYTdjNGQwMzQ4ZGI0ZmFmNzRlZjQ1NTJlOGIyNjQ4MmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNTo1NzoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jXFxuaW5kZXggZDU0OTk1YjdhZGIyNy4uZWQ3MDQ1YTJhMzgwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jXFxuQEAgLTEwNzEsNiArMTA3MSwyMCBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0W0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfUE5fRVJSX0ZMQUdfU0VUXSA9IFxcXCJQTiBlcnJcXFwiLFxcbiBcXHRcXHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXFxcIkRlc2MgYmxvY2tlZFxcXCJ9O1xcbiBcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yeF9kcm9wW1dCTV9FUlJfRFJPUF9NQVhdID0ge1xcbitcXHRcXHRbV0JNX0VSUl9HRVRfU1dfREVTQ10gPSBcXFwiU1cgZGVzYyBlcnJvclxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RFU0NfUEFSU0VdID0gXFxcIkRlc2MgcGFyc2UgZXJyb3JcXFwiLFxcbitcXHRcXHRbV0JNX0VSUl9EUk9QX0lOVl9IV19JRF0gPSBcXFwiSW52YWxpZCBodyBpZFxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUF0gPSBcXFwiTnVsbCBQYXJ0bmVyIGRwXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFBdID0gXFxcIlByb2Nlc3MgTnVsbCBQYXJ0bmVyIGRwXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BERVZdID0gXFxcIk51bGwgUGRldlxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfTlVMTF9BUl0gPSBcXFwiTnVsbCBhclxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkddID0gXFxcIkNBQyBSdW5uaW5nXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9TR10gPSBcXFwiU2NhdHRlciBHYXRoZXJcXFwiLFxcbitcXHRcXHRbV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFJdID0gXFxcIkludmFsaWQgTldpZmkgSGRyIGxlblxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdICA9IFxcXCJSRU8gR2VuZXJpY1xcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10gPSBcXFwiUlhETUEgR2VuZXJpY1xcXCJ9O1xcbitcXG4gXFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yZWxfc3JjW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXSA9IHtcXG4gXFx0XFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfVFFNXSA9IFxcXCJUUU1cXFwiLFxcbiBcXHRcXHRbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9SWERNQV0gPSBcXFwiUnhkbWFcXFwiLFxcbkBAIC0xMDk1LDEzICsxMTA5LDMyIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWDsgaSsrKVxcbiBcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIiVzOiAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IHJ4ZG1hX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2VyeGRtYV9lcnJvcltpXSk7XFxuK1xcdFxcdFxcdFxcdCByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy1cXHUwMDNld2JtX2Vyci5yeGRtYV9lcnJvcltpXSk7XFxuIFxcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuUkVPIGVycm9yczpcXFxcblxcXCIpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYOyBpKyspXFxuIFxcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwiJXM6ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcmVvX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2VyZW9fZXJyb3JbaV0pO1xcbitcXHRcXHRcXHRcXHQgcmVvX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V3Ym1fZXJyLnJlb19lcnJvcltpXSk7XFxuK1xcbitcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuV0JNIFJ4IERyb3AgQ291bnQ6XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFdCTV9FUlJfRFJPUF9NQVg7IGkrKylcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCIlczogJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V3Ym1fZXJyLmRyb3BbaV0pO1xcbitcXG4rXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXFxuK1xcdFxcdFxcdCBcXFwiXFxcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGRldmljZV9zdGF0cy1cXHUwMDNld2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTtcXG4rXFxuK1xcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwiXFxcXG5SRU8gc2VudCB0byBzdGFja1xcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpKyspIHtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJyaW5nJWQ6XFxcIiwgaSk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhYi1cXHUwMDNlYWctXFx1MDAzZW51bV9kZXZpY2VzOyBqKyspXFxuK1xcdFxcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlxcXFx0JWQ6JXVcXFwiLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgZGV2aWNlX3N0YXRzLVxcdTAwM2VzZW50X3RvX3N0YWNrW2ldW2pdKTtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJcXFxcblxcXCIpO1xcbitcXHR9XFxuIFxcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuSEFMIFJFTyBlcnJvcnM6XFxcXG5cXFwiKTtcXG4gXFxuQEAgLTExMTcsNiArMTE1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJyaW5nJWQ6ICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgaSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V0eF9lcnIuZGVzY19uYVtpXSk7XFxuIFxcbitcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfSFdfTUFYX1FVRVVFUzsgaSsrKVxcbitcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcInBvb2wlZDogJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCBkZXZpY2Vfc3RhdHMtXFx1MDAzZXR4X2Vyci50eGJ1Zl9uYVtpXSk7XFxuK1xcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcXG4gXFx0XFx0XFx0IFxcXCJcXFxcbk1pc2MgVHJhbnNtaXQgRmFpbHVyZXM6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgYXRvbWljX3JlYWQoXFx1MDAyNmRldmljZV9zdGF0cy1cXHUwMDNldHhfZXJyLm1pc2NfZmFpbCkpO1xcbkBAIC0xMTgxLDcgKzEyMTksNyBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJcXFxcblJFTyBSeCBSZWNlaXZlZDpcXFxcblxcXCIpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERQX1JFT19EU1RfUklOR19NQVg7IGkrKykge1xcbi1cXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlJpbmclZDpcXFwiLCBpICsgMSk7XFxuK1xcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwicmluZyVkOlxcXCIsIGkpO1xcbiBcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFiLVxcdTAwM2VhZy1cXHUwMDNlbnVtX2RldmljZXM7IGorKykge1xcbiBcXHRcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcXG5AQCAtMTIxNSw4ICsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdFxcbithdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbit7XFxuK1xcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gYXRoMTJrX2FiX3RvX2RwKGFiKTtcXG4rXFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFxcdTAwMjZkcC1cXHUwMDNlZGV2aWNlX3N0YXRzO1xcbitcXHRjaGFyIGJ1ZlsyMF0gPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlPSBzaXplb2YoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBjb3VudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0LyogZHJvcCB0aGUgcG9zc2libGUgJ1xcXFxuJyBmcm9tIHRoZSBlbmQgKi9cXG4rXFx0aWYgKGNvdW50IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBidWZbY291bnQgLSAxXSA9PSAnXFxcXG4nKVxcbitcXHRcXHRidWZbY291bnQgLSAxXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRpZiAoIXN0cmNtcChidWYsIFxcXCJyZXNldFxcXCIpKSB7XFxuK1xcdFxcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJ1bnN1cHBvcnRlZCBjb21tYW5kOiAlc1xcXFxuXFxcIiwgYnVmKTtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RldmljZV9kcF9zdGF0cyA9IHtcXG4gXFx0LnJlYWQgPSBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyxcXG4rXFx0LndyaXRlID0gYXRoMTJrX2RlYnVnZnNfd3JpdGVfZGV2aWNlX2RwX3N0YXRzLFxcbiBcXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbiBcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gXFx0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxcbkBAIC0xMjI3LDcgKzEyOTgsNyBAQCB2b2lkIGF0aDEya19kZWJ1Z2ZzX3BkZXZfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNpbXVsYXRlX2Z3X2NyYXNoXFxcIiwgMDYwMCwgYWItXFx1MDAzZWRlYnVnZnNfc29jLCBhYixcXG4gXFx0XFx0XFx0ICAgIFxcdTAwMjZmb3BzX3NpbXVsYXRlX2Z3X2NyYXNoKTtcXG4gXFxuLVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImRldmljZV9kcF9zdGF0c1xcXCIsIDA0MDAsIGFiLVxcdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImRldmljZV9kcF9zdGF0c1xcXCIsIDA2MDAsIGFiLVxcdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19kZXZpY2VfZHBfc3RhdHMpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcXG5pbmRleCBiZWYwZjJiYTA1NjBmLi4yODlhZWRlNmRhYmI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiAjaWZuZGVmIEFUSDEyS19EUF9IXFxuICNkZWZpbmUgQVRIMTJLX0RQX0hcXG4gXFxuKyNpbmNsdWRlIFxcXCJkcF9zdGF0cy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImRwX2h0dC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZHBfY21uLmhcXFwiXFxuQEAgLTQyOSwxOSArNDMwLDI3IEBAIHN0cnVjdCBhdGgxMmtfZHBfYXJjaF9vcHMge1xcbiBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF90eF9lcnJfc3RhdHMge1xcbiBcXHQvKiBUQ0wgUmluZyBEZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovXFxuIFxcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xcbitcXHQvKiBUWCBkZXNjcmlwdG9yIHBvb2wgZXhoYXVzdGVkIChwZXIgcG9vbF9pZCAvIHRyYWZmaWMgY2xhc3MpICovXFxuK1xcdHUzMiB0eGJ1Zl9uYVtBVEgxMktfSFdfTUFYX1FVRVVFU107XFxuIFxcdC8qIE90aGVyIGZhaWx1cmVzIGR1cmluZyBkcF90eCBkdWUgdG8gbWVtIGFsbG9jYXRpb24gZmFpbHVyZVxcbiBcXHQgKiBpZHIgdW5hdmFpbGFibGUgZXRjLlxcbiBcXHQgKi9cXG4gXFx0YXRvbWljX3QgbWlzY19mYWlsO1xcbiB9O1xcbiBcXG4rc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XFxuK1xcdHUzMiByeGRtYV9lcnJvcltIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVhdO1xcbitcXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcXG4rXFx0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XFxuK1xcdHUzMiBzd19kZXNjX2ZhbGxiYWNrO1xcbit9O1xcbitcXG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMge1xcbiBcXHR1MzIgZXJyX3JpbmdfcGt0cztcXG4gXFx0dTMyIGludmFsaWRfcmJtO1xcbi1cXHR1MzIgcnhkbWFfZXJyb3JbSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYXTtcXG4tXFx0dTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07XFxuIFxcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF90eF9lcnJfc3RhdHMgdHhfZXJyO1xcbitcXHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHdibV9lcnI7XFxuIFxcdHUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcXG4gXFx0dTMyIHJ4X3dibV9yZWxfc291cmNlW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdO1xcbiBcXHR1MzIgdHFtX3JlbF9yZWFzb25bTUFYX1RRTV9SRUxFQVNFX1JFQVNPTl07XFxuQEAgLTQ1MCw2ICs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7XFxuIFxcdHUzMiB0eF9lbnF1ZXVlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcXG4gXFx0dTMyIHR4X2NvbXBsZXRlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcXG4gXFx0dTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlO1xcbitcXHR1MzIgc2VudF90b19zdGFja1tEUF9SRU9fRFNUX1JJTkdfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdO1xcbiB9O1xcbiBcXG4gc3RydWN0IGF0aDEya19kcCB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDRkMzg5MmFjZmYzMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcXG5AQCAtMCwwICsxLDI1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBBVEgxMktfRFBfU1RBVFNfSFxcbisjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19IXFxuK1xcbitlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIHtcXG4rXFx0V0JNX0VSUl9HRVRfU1dfREVTQyxcXG4rXFx0V0JNX0VSUl9ERVNDX1BBUlNFLFxcbitcXHRXQk1fRVJSX0RST1BfSU5WX0hXX0lELFxcbitcXHRXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCxcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUCxcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfUERFVixcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfQVIsXFxuK1xcdFdCTV9FUlJfRFJPUF9DQUNfUlVOTklORyxcXG4rXFx0V0JNX0VSUl9EUk9QX1NHLFxcbitcXHRXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUixcXG4rXFx0V0JNX0VSUl9EUk9QX1JFT19HRU5FUklDLFxcbitcXHRXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQyxcXG4rXFx0V0JNX0VSUl9EUk9QX01BWCxcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBBVEgxMktfRFBfU1RBVFNfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG5pbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbkBAIC0xMiw2ICsxMiwxNSBAQFxcbiAjaW5jbHVkZSBcXFwiaGFsX3djbjc4NTAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhhbF9xY2MyMDcyLmhcXFwiXFxuIFxcbitzdGF0aWMgdm9pZFxcbithdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICptc2R1LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbilcXG4re1xcbitcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtkcm9wX3JlYXNvbl0rKztcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1MTYgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGVudW0gYXRoMTJrX3BlZXJfbWV0YWRhdGFfdmVyc2lvbiB2ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgX19sZTMyIHBlZXJfbWV0YWRhdGEpXFxuQEAgLTY0Miw3ICs2NTEsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3NfcmVjZWl2ZWRfcGFja2V0cyhzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRpZiAobGlrZWx5KHJpbmdfaWQgXFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYKSlcXG4rXFx0XFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5zZW50X3RvX3N0YWNrW3JpbmdfaWRdW3BhcnRuZXJfZHAtXFx1MDAzZWRldmljZV9pZF0rKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcdFxcdGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoZHBfcGRldiwgbmFwaSwgbXNkdSwgXFx1MDAyNnJ4X2luZm8pO1xcbiBcXHR9XFxuIFxcbkBAIC0xNjE0LDYgKzE2MjYsNyBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0XFx0LyogRmlyc3QgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciwgc28gZGVkdWN0IGl0J3MgbGVuZ3RoICovXFxuIFxcdFxcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XFxuIFxcdFxcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSsrO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTY0OSw4ICsxNjYyLDEwIEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2hfbnVsbF9xX2Rlc2Moc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRcXHRza2JfcHV0KG1zZHUsIGhhbF9yeF9kZXNjX3N6ICsgbDNwYWRfYnl0ZXMgKyBtc2R1X2xlbik7XFxuIFxcdFxcdHNrYl9wdWxsKG1zZHUsIGhhbF9yeF9kZXNjX3N6ICsgbDNwYWRfYnl0ZXMpO1xcbiBcXHR9XFxuLVxcdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKSB7XFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSsrO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0YXRoMTJrX2RwX3J4X2hfcHBkdShkcF9wZGV2LCByeF9pbmZvKTtcXG4gXFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3J4X2hfbXBkdShkcF9wZGV2LCBtc2R1LCByeF9pbmZvKTtcXG5AQCAtMTc2Myw3ICsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdGJvb2wgZHJvcCA9IGZhbHNlO1xcbiBcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yeGRtYV9lcnJvcltyeGNiLVxcdTAwM2VlcnJfY29kZV0rKztcXG4rXFx0aWYgKGxpa2VseShyeGNiLVxcdTAwM2VlcnJfY29kZSBcXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yeGRtYV9lcnJvcltyeGNiLVxcdTAwM2VlcnJfY29kZV0rKztcXG4rXFx0ZWxzZVxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ4Y2ItXFx1MDAzZWVycl9jb2RlKSB7XFxuIFxcdGNhc2UgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfVU5BVVRIX1dEU19FUlI6XFxuQEAgLTE3ODAsNiArMTc5OCw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdFxcdC8qIFRPRE86IFJldmlldyBvdGhlciByeGRtYSBlcnJvciBjb2RlIHRvIGNoZWNrIGlmIGFueXRoaW5nIGlzXFxuIFxcdFxcdCAqIHdvcnRoIHJlcG9ydGluZyB0byBtYWM4MDIxMVxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdKys7XFxuIFxcdFxcdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0xNzk2LDcgKzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdGJvb2wgZHJvcCA9IGZhbHNlO1xcbiBcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbcnhjYi1cXHUwMDNlZXJyX2NvZGVdKys7XFxuK1xcdGlmIChsaWtlbHkocnhjYi1cXHUwMDNlZXJyX2NvZGUgXFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbcnhjYi1cXHUwMDNlZXJyX2NvZGVdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4gXFx0c3dpdGNoIChyeGNiLVxcdTAwM2VlcnJfY29kZSkge1xcbiBcXHRjYXNlIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19BRERSX1pFUk86XFxuQEAgLTE4MTMsNiArMTgzNSw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3Jlb19lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRcXHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgZXJyb3JzIGFuZCBwcm9jZXNzIHRoZW0gdG8gbWFjODAyMTFcXG4gXFx0XFx0ICogYXMgYXBwcm9wcmlhdGUuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdKys7XFxuIFxcdFxcdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0xOTM1LDYgKzE5NTgsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0cmV0ID0gYXRoMTJrX3dpZmk3X2hhbF93Ym1fZGVzY19wYXJzZV9lcnIoZHAsIHJ4X2Rlc2MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmVycl9pbmZvKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RFU0NfUEFSU0VdKys7XFxuIFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgcmV0KTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE5NDQsOCArMTk2OCwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFxuIFxcdFxcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xcbiBcXHRcXHRpZiAoIWRlc2NfaW5mbykge1xcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuc3dfZGVzY19mYWxsYmFjaysrO1xcbiBcXHRcXHRcXHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XFxuIFxcdFxcdFxcdGlmICghZGVzY19pbmZvKSB7XFxuK1xcdFxcdFxcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfR0VUX1NXX0RFU0NdKys7XFxuIFxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiSW52YWxpZCBjb29raWUgaW4gRFAgV0JNIHJ4IGVycm9yIGRlc2NyaXB0b3IgcmV0cmlldmFsOiAweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgZXJyX2luZm8uY29va2llKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE5NjEsNyArMTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXFx1MDAzZWRldmljZV9pZDtcXG4gXFx0XFx0cGFydG5lcl9kcCA9IGF0aDEya19kcF9od19ncnBfdG9fZHAoZHBfaHdfZ3JwLCBkZXZpY2VfaWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhcnRuZXJfZHApKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xcbitcXHRcXHRcXHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQKTtcXG4gXFxuIFxcdFxcdFxcdC8qIEluIGFueSBjYXNlIGNvbnRpbnVhdGlvbiBiaXQgaXMgc2V0XFxuIFxcdFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcXG5AQCAtMjAwNyw3ICsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcdFxcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cXHUwMDNlaGFsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXNkdV9kYXRhKTtcXG4gXFx0XFx0aWYgKGh3X2xpbmtfaWQgXFx1MDAzZT0gQVRIMTJLX0dST1VQX01BWF9SQURJTykge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTtcXG4gXFxuIFxcdFxcdFxcdC8qIEluIGFueSBjYXNlIGNvbnRpbnVhdGlvbiBiaXQgaXMgc2V0XFxuIFxcdFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcXG5AQCAtMjA2OCw3ICsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIlVuYWJsZSB0byBwcm9jZXNzIFdCTSBlcnJvciBtc2R1IGR1ZSB0byBpbnZhbGlkIGh3IGxpbmsgaWQgJWQgZGV2aWNlIGlkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICBod19saW5rX2lkLCBkZXZpY2VfaWQpO1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIwNzcsMTggKzIxMDYsMjEgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcbiBcXHRcXHRkcF9wZGV2ID0gYXRoMTJrX2RwX3RvX3BkZXZfZHAocGFydG5lcl9kcCwgcGRldl9pZHgpO1xcbiBcXHRcXHRpZiAoIWRwX3BkZXYpIHtcXG4tXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuK1xcdFxcdFxcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgV0JNX0VSUl9EUk9QX05VTExfUERFVik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7XFxuIFxcbiBcXHRcXHRpZiAoIWFyIHx8ICFyY3VfZGVyZWZlcmVuY2UoYXItXFx1MDAzZWFiLVxcdTAwM2VwZGV2c19hY3RpdmVbcGRldl9pZHhdKSkge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9BUik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFxcdTAwMjZhci1cXHUwMDNlZGV2X2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuaW5kZXggNTg3ZDU4ZWVjY2ZhNS4uZjU3MmFhNTgxZDExNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG5AQCAtMTY3LDggKzE2NywxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxcbiBcXHR0eF9yaW5nID0gXFx1MDAyNmRwLVxcdTAwM2V0eF9yaW5nW3RpLnJpbmdfaWRdO1xcbiBcXG4gXFx0dHhfZGVzYyA9IGF0aDEya19kcF90eF9hc3NpZ25fYnVmZmVyKGRwLCBwb29sX2lkKTtcXG4tXFx0aWYgKCF0eF9kZXNjKVxcbitcXHRpZiAoIXR4X2Rlc2MpIHtcXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50eF9lcnIudHhidWZfbmFbcG9vbF9pZF0rKztcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGRwX2xpbmtfdmlmID0gYXRoMTJrX2RwX3ZpZl90b19kcF9saW5rX3ZpZihcXHUwMDI2YWh2aWYtXFx1MDAzZWRwX3ZpZiwgYXJ2aWYtXFx1MDAzZWxpbmtfaWQpO1xcbiBcXG5AQCAtNTc1LDE4ICs1NzcsMjEgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLFxcbiB7XFxuIFxcdHN0cnVjdCBodHRfdHhfd2JtX2NvbXBsZXRpb24gKnN0YXR1c19kZXNjO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2h0dF93Ym1fdHhfc3RhdHVzIHRzID0ge307XFxuLVxcdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcXG4rXFx0ZW51bSBoYWxfd2JtX2h0dF90eF9jb21wX3N0YXR1cyBodHRfc3RhdHVzO1xcbiBcXHR1MTYgcGVlcl9pZDtcXG4gXFxuIFxcdHN0YXR1c19kZXNjID0gZGVzYztcXG4gXFxuLVxcdHdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVxcdTAwM2VpbmZvMCxcXG4rXFx0aHR0X3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXFx1MDAzZWluZm8wLFxcbiBcXHRcXHRcXHRcXHQgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzBfU1RBVFVTKTtcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5md190eF9zdGF0dXNbd2JtX3N0YXR1c10rKztcXG4rXFx0aWYgKGxpa2VseShodHRfc3RhdHVzIFxcdTAwM2MgTUFYX0ZXX1RYX1NUQVRVUykpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW2h0dF9zdGF0dXNdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4tXFx0c3dpdGNoICh3Ym1fc3RhdHVzKSB7XFxuK1xcdHN3aXRjaCAoaHR0X3N0YXR1cykge1xcbiBcXHRjYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzpcXG4tXFx0XFx0dHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spO1xcbitcXHRcXHR0cy5hY2tlZCA9IHRydWU7XFxuIFxcdFxcdHRzLmFja19yc3NpID0gbGUzMl9nZXRfYml0cyhzdGF0dXNfZGVzYy1cXHUwMDNlaW5mbzIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xcbiBcXG5AQCAtNjA4LDcgKzYxMyw3IEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRhdGgxMmtfd2FybihkcC1cXHUwMDNlYWIsIFxcXCJVbmtub3duIGh0dCB3Ym0gdHggc3RhdHVzICVkXFxcXG5cXFwiLCB3Ym1fc3RhdHVzKTtcXG4rXFx0XFx0YXRoMTJrX3dhcm4oZHAtXFx1MDAzZWFiLCBcXFwiVW5rbm93biBodHQgdHggc3RhdHVzICVkXFxcXG5cXFwiLCBodHRfc3RhdHVzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gfVxcbkBAIC05ODQsMTEgKzk4OSwxNyBAQCB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxcbiBcXHRcXHQvKiBGaW5kIHRoZSBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUgdmFsdWUgKi9cXG4gXFx0XFx0YnVmX3JlbF9zb3VyY2UgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUpO1xcbi1cXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xcbitcXHRcXHRpZiAobGlrZWx5KGJ1Zl9yZWxfc291cmNlIFxcdTAwM2MgSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVgpKVxcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFxuIFxcdFxcdHJlbF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcXG4tXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSsrO1xcbitcXHRcXHRpZiAobGlrZWx5KHJlbF9zdGF0dXMgXFx1MDAzYyBNQVhfVFFNX1JFTEVBU0VfUkVBU09OKSlcXG4rXFx0XFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSsrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFxuIFxcdFxcdC8qIFJlbGVhc2UgZGVzY3JpcHRvciBhcyBzb29uIGFzIGV4dHJhY3RpbmcgbmVjZXNzYXJ5IGluZm9cXG4gXFx0XFx0ICogdG8gcmVkdWNlIGNvbnRlbnRpb25cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcXG5pbmRleCA0OWM2OTMyODk3MDk0Li42MGU3YTM2MDk3ZjEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jXFxuQEAgLTMyOSw3ICszMjksMTAgQEAgaW50IGF0aDEya193aWZpN19oYWxfZGVzY19yZW9fcGFyc2VfZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRcXHRcXHQgICAgSEFMX1JFT19ERVNUX1JJTkdfSU5GTzBfUFVTSF9SRUFTT04pO1xcbiBcXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XFxuK1xcdGlmIChsaWtlbHkoZXJyX2NvZGUgXFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4gXFx0aWYgKHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX0VSUl9ERVRFQ1RFRCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcHVzaF9yZWFzb24gIT0gSEFMX1JFT19ERVNUX1JJTkdfUFVTSF9SRUFTT05fUk9VVElOR19JTlNUUlVDVElPTikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyNC43NjY5Njk4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjc1NTQ4NzQwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MGQwZmVjZGE3YzRkMDM0OGRiNGZhZjc0ZWY0NTUyZThiMjY0ODJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNTo1NzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbkBAIC0xMDcxLDYgKzEwNzEsMjAgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFtIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX1BOX0VSUl9GTEFHX1NFVF0gPSBcIlBOIGVyclwiLFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXCJEZXNjIGJsb2NrZWRcIn07XG4gXG4rXHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3J4X2Ryb3BbV0JNX0VSUl9EUk9QX01BWF0gPSB7XG4rXHRcdFtXQk1fRVJSX0dFVF9TV19ERVNDXSA9IFwiU1cgZGVzYyBlcnJvclwiLFxuK1x0XHRbV0JNX0VSUl9ERVNDX1BBUlNFXSA9IFwiRGVzYyBwYXJzZSBlcnJvclwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX0lOVl9IV19JRF0gPSBcIkludmFsaWQgaHcgaWRcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQXSA9IFwiTnVsbCBQYXJ0bmVyIGRwXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQXSA9IFwiUHJvY2VzcyBOdWxsIFBhcnRuZXIgZHBcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BERVZdID0gXCJOdWxsIFBkZXZcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX0FSXSA9IFwiTnVsbCBhclwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX0NBQ19SVU5OSU5HXSA9IFwiQ0FDIFJ1bm5pbmdcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9TR10gPSBcIlNjYXR0ZXIgR2F0aGVyXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUl0gPSBcIkludmFsaWQgTldpZmkgSGRyIGxlblwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX1JFT19HRU5FUklDXSAgPSBcIlJFTyBHZW5lcmljXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10gPSBcIlJYRE1BIEdlbmVyaWNcIn07XG4rXG4gXHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3JlbF9zcmNbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdID0ge1xuIFx0XHRbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU1dID0gXCJUUU1cIixcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gXCJSeGRtYVwiLFxuQEAgLTEwOTUsMTMgKzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVg7IGkrKylcbiBcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiJXM6ICV1XFxuXCIsXG4tXHRcdFx0XHQgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcnhkbWFfZXJyb3JbaV0pO1xuK1x0XHRcdFx0IHJ4ZG1hX2VycltpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIucnhkbWFfZXJyb3JbaV0pO1xuIFxuIFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuUkVPIGVycm9yczpcXG5cIik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWDsgaSsrKVxuIFx0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCIlczogJXVcXG5cIixcbi1cdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcmVvX2Vycm9yW2ldKTtcbitcdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5yZW9fZXJyb3JbaV0pO1xuK1xuK1x0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuV0JNIFJ4IERyb3AgQ291bnQ6XFxuXCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgV0JNX0VSUl9EUk9QX01BWDsgaSsrKVxuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCIlczogJXVcXG5cIixcbitcdFx0XHRcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIuZHJvcFtpXSk7XG4rXG4rXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcbitcdFx0XHQgXCJcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcblwiLFxuK1x0XHRcdCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTtcbitcbitcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcblJFTyBzZW50IHRvIHN0YWNrXFxuXCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSsrKSB7XG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInJpbmclZDpcIiwgaSk7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFiLVx1MDAzZWFnLVx1MDAzZW51bV9kZXZpY2VzOyBqKyspXG4rXHRcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXG4rXHRcdFx0XHRcdCBcIlxcdCVkOiV1XCIsIGosXG4rXHRcdFx0XHRcdCBkZXZpY2Vfc3RhdHMtXHUwMDNlc2VudF90b19zdGFja1tpXVtqXSk7XG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcblwiKTtcbitcdH1cbiBcbiBcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcbkhBTCBSRU8gZXJyb3JzOlxcblwiKTtcbiBcbkBAIC0xMTE3LDYgKzExNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInJpbmclZDogJXVcXG5cIixcbiBcdFx0XHRcdCBpLCBkZXZpY2Vfc3RhdHMtXHUwMDNldHhfZXJyLmRlc2NfbmFbaV0pO1xuIFxuK1x0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcblwiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDEyS19IV19NQVhfUVVFVUVTOyBpKyspXG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInBvb2wlZDogJXVcXG5cIixcbitcdFx0XHRcdCBpLCBkZXZpY2Vfc3RhdHMtXHUwMDNldHhfZXJyLnR4YnVmX25hW2ldKTtcbitcbiBcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLFxuIFx0XHRcdCBcIlxcbk1pc2MgVHJhbnNtaXQgRmFpbHVyZXM6ICVkXFxuXCIsXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIubWlzY19mYWlsKSk7XG5AQCAtMTE4MSw3ICsxMjE5LDcgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCJcXG5SRU8gUnggUmVjZWl2ZWQ6XFxuXCIpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSsrKSB7XG4tXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlJpbmclZDpcIiwgaSArIDEpO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCJyaW5nJWQ6XCIsIGkpO1xuIFxuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhYi1cdTAwM2VhZy1cdTAwM2VudW1fZGV2aWNlczsgaisrKSB7XG4gXHRcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXG5AQCAtMTIxNSw4ICsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3RcbithdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYWIpO1xuK1x0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFx1MDAyNmRwLVx1MDAzZWRldmljZV9zdGF0cztcbitcdGNoYXIgYnVmWzIwXSA9IHt9O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb3VudCBcdTAwM2U9IHNpemVvZihidWYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0LyogZHJvcCB0aGUgcG9zc2libGUgJ1xcbicgZnJvbSB0aGUgZW5kICovXG4rXHRpZiAoY291bnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGJ1Zltjb3VudCAtIDFdID09ICdcXG4nKVxuK1x0XHRidWZbY291bnQgLSAxXSA9ICdcXDAnO1xuK1xuK1x0aWYgKCFzdHJjbXAoYnVmLCBcInJlc2V0XCIpKSB7XG4rXHRcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdGF0aDEya193YXJuKGFiLCBcInVuc3VwcG9ydGVkIGNvbW1hbmQ6ICVzXFxuXCIsIGJ1Zik7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19kZXZpY2VfZHBfc3RhdHMgPSB7XG4gXHQucmVhZCA9IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzLFxuK1x0LndyaXRlID0gYXRoMTJrX2RlYnVnZnNfd3JpdGVfZGV2aWNlX2RwX3N0YXRzLFxuIFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxuQEAgLTEyMjcsNyArMTI5OCw3IEBAIHZvaWQgYXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaW11bGF0ZV9md19jcmFzaFwiLCAwNjAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfc2ltdWxhdGVfZndfY3Jhc2gpO1xuIFxuLVx0ZGVidWdmc19jcmVhdGVfZmlsZShcImRldmljZV9kcF9zdGF0c1wiLCAwNDAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGV2aWNlX2RwX3N0YXRzXCIsIDA2MDAsIGFiLVx1MDAzZWRlYnVnZnNfc29jLCBhYixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19kZXZpY2VfZHBfc3RhdHMpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbmluZGV4IGJlZjBmMmJhMDU2MGYuLjI4OWFlZGU2ZGFiYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxuQEAgLTcsNiArNyw3IEBAXG4gI2lmbmRlZiBBVEgxMktfRFBfSFxuICNkZWZpbmUgQVRIMTJLX0RQX0hcbiBcbisjaW5jbHVkZSBcImRwX3N0YXRzLmhcIlxuICNpbmNsdWRlIFwiaHcuaFwiXG4gI2luY2x1ZGUgXCJkcF9odHQuaFwiXG4gI2luY2x1ZGUgXCJkcF9jbW4uaFwiXG5AQCAtNDI5LDE5ICs0MzAsMjcgQEAgc3RydWN0IGF0aDEya19kcF9hcmNoX29wcyB7XG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHtcbiBcdC8qIFRDTCBSaW5nIERlc2NyaXB0b3IgdW5hdmFpbGFibGUgKi9cbiBcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuK1x0LyogVFggZGVzY3JpcHRvciBwb29sIGV4aGF1c3RlZCAocGVyIHBvb2xfaWQgLyB0cmFmZmljIGNsYXNzKSAqL1xuK1x0dTMyIHR4YnVmX25hW0FUSDEyS19IV19NQVhfUVVFVUVTXTtcbiBcdC8qIE90aGVyIGZhaWx1cmVzIGR1cmluZyBkcF90eCBkdWUgdG8gbWVtIGFsbG9jYXRpb24gZmFpbHVyZVxuIFx0ICogaWRyIHVuYXZhaWxhYmxlIGV0Yy5cbiBcdCAqL1xuIFx0YXRvbWljX3QgbWlzY19mYWlsO1xuIH07XG4gXG4rc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XG4rXHR1MzIgcnhkbWFfZXJyb3JbSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYXTtcbitcdHUzMiByZW9fZXJyb3JbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVhdO1xuK1x0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XG4rXHR1MzIgc3dfZGVzY19mYWxsYmFjaztcbit9O1xuK1xuIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHtcbiBcdHUzMiBlcnJfcmluZ19wa3RzO1xuIFx0dTMyIGludmFsaWRfcmJtO1xuLVx0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4tXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcbiBcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xuIFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjtcbitcdHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3J4X3dibV9lcnJfc3RhdHMgd2JtX2VycjtcbiBcdHUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcbiBcdHUzMiByeF93Ym1fcmVsX3NvdXJjZVtIQUxfV0JNX1JFTF9TUkNfTU9EVUxFX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcbiBcdHUzMiB0cW1fcmVsX3JlYXNvbltNQVhfVFFNX1JFTEVBU0VfUkVBU09OXTtcbkBAIC00NTAsNiArNDU5LDcgQEAgc3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMge1xuIFx0dTMyIHR4X2VucXVldWVkW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuIFx0dTMyIHR4X2NvbXBsZXRlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcbiBcdHUzMiByZW9fZXhjZXBfbXNkdV9idWZfdHlwZTtcbitcdHUzMiBzZW50X3RvX3N0YWNrW0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gfTtcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNGQzODkyYWNmZjMyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbkBAIC0wLDAgKzEsMjUgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbisgKi9cbitcbisjaWZuZGVmIEFUSDEyS19EUF9TVEFUU19IXG4rI2RlZmluZSBBVEgxMktfRFBfU1RBVFNfSFxuK1xuK2VudW0gYXRoMTJrX3dibV9lcnJfZHJvcF9yZWFzb24ge1xuK1x0V0JNX0VSUl9HRVRfU1dfREVTQyxcbitcdFdCTV9FUlJfREVTQ19QQVJTRSxcbitcdFdCTV9FUlJfRFJPUF9JTlZfSFdfSUQsXG4rXHRXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCxcbitcdFdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsXG4rXHRXQk1fRVJSX0RST1BfTlVMTF9QREVWLFxuK1x0V0JNX0VSUl9EUk9QX05VTExfQVIsXG4rXHRXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsXG4rXHRXQk1fRVJSX0RST1BfU0csXG4rXHRXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUixcbitcdFdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQyxcbitcdFdCTV9FUlJfRFJPUF9SWERNQV9HRU5FUklDLFxuK1x0V0JNX0VSUl9EUk9QX01BWCxcbit9O1xuK1xuKyNlbmRpZiAvKiBBVEgxMktfRFBfU1RBVFNfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uZDk2ZDgzMDE1NjVjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMTIsNiArMTIsMTUgQEBcbiAjaW5jbHVkZSBcImhhbF93Y243ODUwLmhcIlxuICNpbmNsdWRlIFwiaGFsX3FjYzIwNzIuaFwiXG4gXG4rc3RhdGljIHZvaWRcbithdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqbXNkdSxcbitcdFx0XHRcdCAgICBlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uKVxuK3tcbitcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbZHJvcF9yZWFzb25dKys7XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbit9XG4rXG4gc3RhdGljIHUxNiBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X3BlZXJfaWQoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRcdCAgZW51bSBhdGgxMmtfcGVlcl9tZXRhZGF0YV92ZXJzaW9uIHZlcixcbiBcdFx0XHRcdFx0ICBfX2xlMzIgcGVlcl9tZXRhZGF0YSlcbkBAIC02NDIsNyArNjUxLDEwIEBAIGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3JlY2VpdmVkX3BhY2tldHMoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cbitcdFx0aWYgKGxpa2VseShyaW5nX2lkIFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYKSlcbitcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuc2VudF90b19zdGFja1tyaW5nX2lkXVtwYXJ0bmVyX2RwLVx1MDAzZWRldmljZV9pZF0rKztcbitcdFx0ZWxzZVxuK1x0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0YXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShkcF9wZGV2LCBuYXBpLCBtc2R1LCBcdTAwMjZyeF9pbmZvKTtcbiBcdH1cbiBcbkBAIC0xNjE0LDYgKzE2MjYsNyBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0LyogRmlyc3QgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciwgc28gZGVkdWN0IGl0J3MgbGVuZ3RoICovXG4gXHRcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XG4gXHRcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfU0ddKys7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTE2NDksOCArMTY2MiwxMCBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0c2tiX3B1dChtc2R1LCBoYWxfcnhfZGVzY19zeiArIGwzcGFkX2J5dGVzICsgbXNkdV9sZW4pO1xuIFx0XHRza2JfcHVsbChtc2R1LCBoYWxfcnhfZGVzY19zeiArIGwzcGFkX2J5dGVzKTtcbiBcdH1cbi1cdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSlcbitcdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSkge1xuK1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSsrO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdGF0aDEya19kcF9yeF9oX3BwZHUoZHBfcGRldiwgcnhfaW5mbyk7XG4gXHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfaF9tcGR1KGRwX3BkZXYsIG1zZHUsIHJ4X2luZm8pO1xuQEAgLTE3NjMsNyArMTc3OCwxMCBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yeGRtYV9lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcbiBcdGJvb2wgZHJvcCA9IGZhbHNlO1xuIFxuLVx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnJ4ZG1hX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KHJ4Y2ItXHUwMDNlZXJyX2NvZGUgXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnJ4ZG1hX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9VTkFVVEhfV0RTX0VSUjpcbkBAIC0xNzgwLDYgKzE3OTgsNyBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yeGRtYV9lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgcnhkbWEgZXJyb3IgY29kZSB0byBjaGVjayBpZiBhbnl0aGluZyBpc1xuIFx0XHQgKiB3b3J0aCByZXBvcnRpbmcgdG8gbWFjODAyMTFcbiBcdFx0ICovXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdKys7XG4gXHRcdGRyb3AgPSB0cnVlO1xuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xNzk2LDcgKzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiID0gQVRIMTJLX1NLQl9SWENCKG1zZHUpO1xuIFx0Ym9vbCBkcm9wID0gZmFsc2U7XG4gXG4tXHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KHJ4Y2ItXHUwMDNlZXJyX2NvZGUgXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYKSlcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX0RFU0NfQUREUl9aRVJPOlxuQEAgLTE4MTMsNiArMTgzNSw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3Jlb19lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgZXJyb3JzIGFuZCBwcm9jZXNzIHRoZW0gdG8gbWFjODAyMTFcbiBcdFx0ICogYXMgYXBwcm9wcmlhdGUuXG4gXHRcdCAqL1xuK1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10rKztcbiBcdFx0ZHJvcCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTE5MzUsNiArMTk1OCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfaGFsX3dibV9kZXNjX3BhcnNlX2VycihkcCwgcnhfZGVzYyxcbiBcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXJyX2luZm8pO1xuIFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RFU0NfUEFSU0VdKys7XG4gXHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwiZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXFxuXCIsXG4gXHRcdFx0XHQgICAgcmV0KTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xOTQ0LDggKzE5NjgsMTAgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xuIFx0XHRpZiAoIWRlc2NfaW5mbykge1xuK1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnN3X2Rlc2NfZmFsbGJhY2srKztcbiBcdFx0XHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XG4gXHRcdFx0aWYgKCFkZXNjX2luZm8pIHtcbitcdFx0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9HRVRfU1dfREVTQ10rKztcbiBcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcIkludmFsaWQgY29va2llIGluIERQIFdCTSByeCBlcnJvciBkZXNjcmlwdG9yIHJldHJpZXZhbDogMHgleFxcblwiLFxuIFx0XHRcdFx0XHQgICAgZXJyX2luZm8uY29va2llKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE5NjEsNyArMTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXHUwMDNlZGV2aWNlX2lkO1xuIFx0XHRwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCk7XG4gXG4gXHRcdFx0LyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXRcbiBcdFx0XHQgKiBpbiB0aGUgcHJldmlvdXMgcmVjb3JkLCBjbGVhbnVwIHNjYXR0ZXJfbXNkdV9saXN0XG5AQCAtMjAwNyw3ICsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cdTAwM2VoYWwsXG4gXHRcdFx0XHRcdFx0XHQgICAgbXNkdV9kYXRhKTtcbiBcdFx0aWYgKGh3X2xpbmtfaWQgXHUwMDNlPSBBVEgxMktfR1JPVVBfTUFYX1JBRElPKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4rXHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4rXHRcdFx0XHRcdFx0XHQgICAgV0JNX0VSUl9EUk9QX0lOVl9IV19JRCk7XG4gXG4gXHRcdFx0LyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXRcbiBcdFx0XHQgKiBpbiB0aGUgcHJldmlvdXMgcmVjb3JkLCBjbGVhbnVwIHNjYXR0ZXJfbXNkdV9saXN0XG5AQCAtMjA2OCw3ICsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCJVbmFibGUgdG8gcHJvY2VzcyBXQk0gZXJyb3IgbXNkdSBkdWUgdG8gaW52YWxpZCBodyBsaW5rIGlkICVkIGRldmljZSBpZCAlZFxcblwiLFxuIFx0XHRcdFx0ICAgaHdfbGlua19pZCwgZGV2aWNlX2lkKTtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTIwNzcsMTggKzIxMDYsMjEgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdGRwX3BkZXYgPSBhdGgxMmtfZHBfdG9fcGRldl9kcChwYXJ0bmVyX2RwLCBwZGV2X2lkeCk7XG4gXHRcdGlmICghZHBfcGRldikge1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuK1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuK1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BERVYpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7XG4gXG4gXHRcdGlmICghYXIgfHwgIXJjdV9kZXJlZmVyZW5jZShhci1cdTAwM2VhYi1cdTAwM2VwZGV2c19hY3RpdmVbcGRldl9pZHhdKSkge1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuK1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuK1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX0FSKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFx1MDAyNmFyLVx1MDAzZWRldl9mbGFncykpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCA1ODdkNThlZWNjZmE1Li5mNTcyYWE1ODFkMTE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC0xNjcsOCArMTY3LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXG4gXHR0eF9yaW5nID0gXHUwMDI2ZHAtXHUwMDNldHhfcmluZ1t0aS5yaW5nX2lkXTtcbiBcbiBcdHR4X2Rlc2MgPSBhdGgxMmtfZHBfdHhfYXNzaWduX2J1ZmZlcihkcCwgcG9vbF9pZCk7XG4tXHRpZiAoIXR4X2Rlc2MpXG4rXHRpZiAoIXR4X2Rlc2MpIHtcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X2Vyci50eGJ1Zl9uYVtwb29sX2lkXSsrO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbiBcbiBcdGRwX2xpbmtfdmlmID0gYXRoMTJrX2RwX3ZpZl90b19kcF9saW5rX3ZpZihcdTAwMjZhaHZpZi1cdTAwM2VkcF92aWYsIGFydmlmLVx1MDAzZWxpbmtfaWQpO1xuIFxuQEAgLTU3NSwxOCArNTc3LDIxIEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcbiB7XG4gXHRzdHJ1Y3QgaHR0X3R4X3dibV9jb21wbGV0aW9uICpzdGF0dXNfZGVzYztcbiBcdHN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTtcbi1cdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcbitcdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgaHR0X3N0YXR1cztcbiBcdHUxNiBwZWVyX2lkO1xuIFxuIFx0c3RhdHVzX2Rlc2MgPSBkZXNjO1xuIFxuLVx0d2JtX3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzAsXG4rXHRodHRfc3RhdHVzID0gbGUzMl9nZXRfYml0cyhzdGF0dXNfZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCAgIEhUVF9UWF9XQk1fQ09NUF9JTkZPMF9TVEFUVVMpO1xuLVx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1t3Ym1fc3RhdHVzXSsrO1xuK1x0aWYgKGxpa2VseShodHRfc3RhdHVzIFx1MDAzYyBNQVhfRldfVFhfU1RBVFVTKSlcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSsrO1xuK1x0ZWxzZVxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4tXHRzd2l0Y2ggKHdibV9zdGF0dXMpIHtcbitcdHN3aXRjaCAoaHR0X3N0YXR1cykge1xuIFx0Y2FzZSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0s6XG4tXHRcdHRzLmFja2VkID0gKHdibV9zdGF0dXMgPT0gSEFMX1dCTV9SRUxfSFRUX1RYX0NPTVBfU1RBVFVTX09LKTtcbitcdFx0dHMuYWNrZWQgPSB0cnVlO1xuIFx0XHR0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzIsXG4gXHRcdFx0XHRcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xuIFxuQEAgLTYwOCw3ICs2MTMsNyBAQCBhdGgxMmtfZHBfdHhfcHJvY2Vzc19odHRfdHhfY29tcGxldGUoc3RydWN0IGF0aDEya19kcCAqZHAsIHZvaWQgKmRlc2MsXG4gXHRcdCAqL1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGF0aDEya193YXJuKGRwLVx1MDAzZWFiLCBcIlVua25vd24gaHR0IHdibSB0eCBzdGF0dXMgJWRcXG5cIiwgd2JtX3N0YXR1cyk7XG4rXHRcdGF0aDEya193YXJuKGRwLVx1MDAzZWFiLCBcIlVua25vd24gaHR0IHR4IHN0YXR1cyAlZFxcblwiLCBodHRfc3RhdHVzKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gfVxuQEAgLTk4NCwxMSArOTg5LDE3IEBAIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRpb25faGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgaW50IHJpbmdfaWQpXG4gXHRcdC8qIEZpbmQgdGhlIEhBTF9XQk1fUkVMRUFTRV9JTkZPMF9SRUxfU1JDX01PRFVMRSB2YWx1ZSAqL1xuIFx0XHRidWZfcmVsX3NvdXJjZSA9IGxlMzJfZ2V0X2JpdHModHhfc3RhdHVzLVx1MDAzZWluZm8wLFxuIFx0XHRcdFx0XHQgICAgICAgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xuK1x0XHRpZiAobGlrZWx5KGJ1Zl9yZWxfc291cmNlIFx1MDAzYyBIQUxfV0JNX1JFTF9TUkNfTU9EVUxFX01BWCkpXG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xuK1x0XHRlbHNlXG4rXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0XHRyZWxfc3RhdHVzID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtXHUwMDNlaW5mbzAsXG4gXHRcdFx0XHRcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdKys7XG4rXHRcdGlmIChsaWtlbHkocmVsX3N0YXR1cyBcdTAwM2MgTUFYX1RRTV9SRUxFQVNFX1JFQVNPTikpXG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdKys7XG4rXHRcdGVsc2VcbitcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRcdC8qIFJlbGVhc2UgZGVzY3JpcHRvciBhcyBzb29uIGFzIGV4dHJhY3RpbmcgbmVjZXNzYXJ5IGluZm9cbiBcdFx0ICogdG8gcmVkdWNlIGNvbnRlbnRpb25cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuaW5kZXggNDljNjkzMjg5NzA5NC4uNjBlN2EzNjA5N2YxMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcbkBAIC0zMjksNyArMzI5LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfaGFsX2Rlc2NfcmVvX3BhcnNlX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdCAgICBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9QVVNIX1JFQVNPTik7XG4gXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KGVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnJlb19lcnJvcltlcnJfY29kZV0rKztcbitcdGVsc2VcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0aWYgKHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX0VSUl9ERVRFQ1RFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9ST1VUSU5HX0lOU1RSVUNUSU9OKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyNC43NjY5NzIxNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDIyNDM4MzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQ6IGF0aDEyayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBhIGhhbmRmdWwgb2YgYGF0aDEya2AgZmlsZXM6IGBkZWJ1Z2ZzLmNgLCBgZHAuaGAsIGBkcF9zdGF0cy5oYCwgYW5kIHNvbWUgYHdpZmk3YCBmaWxlcy4gTG9va3MgbGlrZSBpdCdzIGFkZGluZyBuZXcgc3RhdHMgdG8gYGF0aDEya19kZXZpY2VfZHBfc3RhdHNgIGFuZCB1cGRhdGluZyB0aGUgZGVidWdmcyBpbnRlcmZhY2UgdG8gaGFuZGxlIGR1bXBpbmcgYW5kIHJlc2V0dGluZyB0aGVzZSBzdGF0cy4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZXkndmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIHN0YXRzIGFycmF5cywgd2hpY2ggaXMgZ3JlYXQuICBUaGluZ3MgbGlrZSBgaWYgKGxpa2VseShyeGNiLVx1MDAzZWVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVgpKWAgYmVmb3JlIGluY3JlbWVudGluZyBhbiBhcnJheSBlbnRyeS4gVGhleSdyZSBhbHNvIHRocm93aW5nIGluIGEgYFdBUk5fT05fT05DRSgxKWAgaWYgdGhvc2UgYm91bmRzIGFyZSB2aW9sYXRlZCwgd2hpY2ggaXMgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZHJvcCByZWFzb25zIHRyYWNrZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gIFRoZSBjaGFuZ2VzIGFyZSBiYXNpY2FsbHk6IGRlYnVnZnMgcmVhZC93cml0ZSBmdW5jdGlvbnMgZm9yIGBkZXZpY2VfZHBfc3RhdHNgLCB0aGUgYm91bmRzIGNoZWNrcyBJIG1lbnRpb25lZCwgYW5kIHN0YXRzIGNvdW50ZXIgaW5jcmVtZW50cy4gVGhlIGJvdW5kcyBjaGVja2luZyBpcyB0aGUga2V5IHBhcnQgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBidXQgaXQgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIHdyaXRlcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGNoZWNrcyBsaWtlIHRoaXMgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIGR1cmluZyBzdGF0cyBpbmNyZW1lbnRpbmcuIFRoZSBleGFtcGxlIGNvZGUgc25pcHBldCBpcyB2ZXJ5IGNsZWFyIOKAkyB0aGV5J3JlIG1ha2luZyBzdXJlIGByeGNiLVx1MDAzZWVycl9jb2RlYCBpcyB3aXRoaW4gdGhlIGFycmF5IGJvdW5kcyBiZWZvcmUgYWNjZXNzaW5nIGBkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yeGRtYV9lcnJvcltyeGNiLVx1MDAzZWVycl9jb2RlXWAuICBUaGF0IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhpcyBpcyBhbiBgYXRoMTJrYCBkcml2ZXIuIEl0J3MgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgbWVhbmluZyBQQ0kgb3IgQUhCIGhhcmR3YXJlLiAgV2ktRmkgZHJpdmVycyBvZnRlbiByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGV5IGFyZW4ndCBkaXJlY3RseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiAgSSdtIHJhY2tpbmcgbXkgYnJhaW4sIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBgYXRoMTJrYD8gTm9wZS4gTm90IHRoYXQgSSdtIGF3YXJlIG9mLiAgYG1hYzgwMjExX2h3c2ltYCAqZW11bGF0ZXMqIFdpLUZpIGluIGEgZ2VuZXJhbCB3YXksIGJ1dCBgYXRoMTJrYCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gQ2FuIGBhdGgxMmtgIGJlIHByb2JlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmU/IExldCBtZSBjaGVja+KApiBub3BlLCBpdCdzIGEgUENJL0FIQiBkcml2ZXIuICBBbmQgbm8sIEknbSBub3QgZmluZGluZyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHNwZWNpZmljYWxseSBmb3IgYGF0aDEya2AuXG5cbk9rYXksIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgIGBhdGgxMmtgIGlzICpleGFjdGx5KiB0aGF0IOKAkyB2ZW5kb3Itc3BlY2lmaWMsIFBDSWUvQUhCIChzbyB0aGF0IG1lYW5zIFBDSWUtbGlrZSksIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgYWN0dWFsIGhhcmR3YXJlLiBTbywgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIGFuZCB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQsIEkgbXVzdCBjb25jbHVkZSB0aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyB3aXRoaW4gdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoZSB2ZXJ5IG5hdHVyZSBvZiB0aGUgZHJpdmVyJ3MgdGFyZ2V0IGhhcmR3YXJlIG1ha2VzIGl0IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE1OjU3OjM4Ljk5MTM1ODgxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM0MjY1NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXIuKmF0aDEya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIF9fbWF5YmVfdW51c2VkIGF0aDEya19wY2lfcG1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgxOTppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc2PXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE1OjU3OjQxLjkyNTYyOTM3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MzI0NDg0MTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBBdHlwaWNhbCBIZW1vbHl0aWMgVXJlbWljIFN5bmRyb21lIChhSFVTKSBvciBTaW1pbGFyIENvbmRpdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBzZWVpbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1lIHRoaW5raW5nIGFib3V0IEFIQi4gQnV0IEkgY2FuJ3QganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgcnVsZSBvdXQgb3RoZXIgcG9zc2liaWxpdGllcywgb3IgYXQgbGVhc3QgY29uc2lkZXIgdGhlbS4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzbid0IHNvbWV0aGluZyBlbHNlICphbG9uZ3NpZGUqIG9yICppbnN0ZWFkIG9mKiBBSEIuIEkgd2FudCB0byBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5LCB3aXRoIGEgYnJvYWQgZGlmZmVyZW50aWFsIGRpYWdub3NpcyBpbiBtaW5kLCBhbmQgbm90IG1pc3MgYSB0cmljay4gU28sIG15IHRob3VnaHQgaXM6IExldCdzIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBpcyBzdHJpY3RseSBBSEIsIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byB0aGUgc3RvcnkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBjYXN0IGEgd2lkZXIgbmV0IGluIG15IHRoaW5raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAwOjU1LjE3MDQ3MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ0NDY2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXQuKmF0aDEya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDA6NTcuNTg0OTMyMTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MDkxODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya193aWZpN19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQncyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYSBXaUZpIDcgZGV2aWNlIGxpa2UgaW4gdGhpcyBjb250ZXh0PyBJJ20gZmFtaWxpYXIgd2l0aCB0aGUgYXRoMTBrIGFuZCBhdGgxMWsgZmFtaWxpZXM7IEkgd29uZGVyIHdoYXQgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGV5J3ZlIGludHJvZHVjZWQgZm9yIFdpRmkgNyBhbmQgaG93IHRob3NlIGFyZSByZWZsZWN0ZWQgaW4gdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCBoYXJkd2FyZS1zcGVjaWZpYywgZHJpdmVyLXNwZWNpZmljLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IG5ldyByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBoZXJlIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgODAyLjExYmUgc3RhbmRhcmQsIG9yIGlzIGl0IGJ1aWxkaW5nIHVwb24gZXhpc3RpbmcgY29kZT8gSSdsbCBwcm9iYWJseSBiZSBhYmxlIHRvIGdsZWFuIHF1aXRlIGEgYml0IGZyb20gdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIGlmIHRoZSBhdXRob3JzIGhhdmUgaW5jbHVkZWQgYW55IGNvbW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAxOjA0LjA2NTg1NDE5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2Mzg4NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya193aWZpN19pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jPTMzPXZvaWQgYXRoMTJrX3dpZmk3X2FyY2hfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYzozOTpzdGF0aWMgaW50IGF0aDEya193aWZpN19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAxOjA1LjY5MjI0ODg0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDE0Njc0MzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBhdGgxMmtfd2lmaTdfaW5pdGAgY29kZSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQXRoMTJrIFdpRmkgNyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIGBhdGgxMmtfd2lmaTdfaW5pdGAuIEltbWVkaWF0ZWx5LCB0aGUgXCJpbml0XCIgcGFydCBzaWduYWxzIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhlIFdpRmkgNyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGhhcmR3YXJlLCBjb25maWd1cmVzIHRoZSByYWRpbywgYW5kIHNldHMgdXAgdGhlIGZvdW5kYXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgZm9yIFdpRmkgNyBvcGVyYXRpb25zLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBwb3dlci11cCBzZXF1ZW5jZSwgUEhZIGluaXRpYWxpemF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZyBhcmUgaGFuZGxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlciBzZXR0aW5ncywgY2xvY2sgY29uZmlndXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBkcml2ZXIgc3RydWN0dXJlcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG5ldyBmZWF0dXJlcyBvZiBXaUZpIDcsIGxpa2UgdGhlIDMyMCBNSHogY2hhbm5lbHMsIG11bHRpLWxpbmsgb3BlcmF0aW9uLCBhbmQgaW1wcm92ZWQgbW9kdWxhdGlvbiBzY2hlbWVzLCBhcmUgaW50ZWdyYXRlZCBhdCB0aGUgdmVyeSBzdGFydC4gSSdsbCBiZSB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGFyY2hpdGVjdHVyYWwgZGVjaXNpb25zIG1hZGUgaGVyZSB0byBlbmFibGUgdGhpcyBuZXcgc3RhbmRhcmQuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBkcml2ZXIgc2V0dXAsIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgY29tZSB0b2dldGhlci4gTGV0J3MgZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDk6MTUuODM4OTk1NzIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM5OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdGFoYl9lcnIgPSBhdGgxMmtfd2lmaTdfYWhiX2luaXQoKTtcXG4gIDQyOlxcdFxcdGlmIChhaGJfZXJyKVxcbiAgNDM6XFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgYXRoMTJrIFdpLUZpIDcgQUhCIGRldmljZTogJWRcXFxcblxcXCIsXFxuICA0NDpcXHRcXHRcXHRcXHRhaGJfZXJyKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0cGNpX2VyciA9IGF0aDEya193aWZpN19wY2lfaW5pdCgpO1xcbiAgNDc6XFx0XFx0aWYgKHBjaV9lcnIpXFxuICA0ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBQQ0kgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ5OlxcdFxcdFxcdFxcdHBjaV9lcnIpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQvKiBJZiBib3RoIGZhaWxlZCwgcmV0dXJuIG9uZSBvZiB0aGUgZmFpbHVyZXMgKGFyYml0cmFyeSkgKi9cXG4gIDUyOlxcdFxcdHJldHVybiBhaGJfZXJyIFxcdTAwMjZcXHUwMDI2IHBjaV9lcnIgPyBhaGJfZXJyIDogMDtcXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdFxcdGlmICghcGNpX2VycilcXG4gIDU4OlxcdFxcdFxcdGF0aDEya193aWZpN19wY2lfZXhpdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOToxNS44MzkwNjIwMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0ODI3Mzk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzbWVudCBvZiBGdXp6aW5nIFZpYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzbid0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gTm93LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYm90aCBvZiB0aGVzZSBpbnRlcmZhY2VzIGFyZSB0aWVkIHRvIGFjdHVhbCwgcGh5c2ljYWwgaGFyZHdhcmUuIFdoaWxlIEFIQiAqY291bGQqIHRoZW9yZXRpY2FsbHkgYmUgcmVwcmVzZW50ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBub2Rlcywgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IG9mZmVyIHRoZXNlIGdlbmVyaWMgQUhCIGRldmljZSB0cmVlIG5vZGVzLiBJdCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcG9zc2libGUgdG8gZW11bGF0ZS5cblxuTW9yZW92ZXIsIHRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBiZSBhZGRpbmcgc3RhdGlzdGljcyBjb2xsZWN0aW9uIGFuZCBzb21lIGJvdW5kcyBjaGVja2luZyBhcm91bmQgdGhvc2Ugc3RhdGlzdGljcy4gVGhhdCBzb3VuZHMgaW5ub2N1b3VzIG9uIGl0cyBvd24sIGJ1dCBjb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIEJlY2F1c2UgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXLigJRpbiB0aGlzIGNhc2UsIGZvciBRdWFsY29tbSdzIFdpLUZpIDcgaGFyZHdhcmUgKGF0aDEyaynigJRpdCdzIHJlYXNvbmFibGUgdG8gYXNzdW1lIGEgZGVncmVlIG9mIGhhcmR3YXJlIGRlcGVuZGVuY3kuIFdlIGtub3cgaXQgcmVxdWlyZXMgcmVhbCBQQ0llIGFuZC9vciBBSEIgaGFyZHdhcmUsIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgaGF2ZSBnb29kIGVtdWxhdGlvbiBvZiB0aGlzLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB0eXBlIG9mIGNoYW5nZXMsIGl0J3Mgbm90IHByYWN0aWNhbCB0byBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzLiBSZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3QgY2hvaWNlIHdpdGggdGhlIGp1c3RpZmljYXRpb24gYmVpbmcgdGhhdCB0aGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlbGllcyBvbiBwaHlzaWNhbCBQQ0llL0FIQiBoYXJkd2FyZSBub3QgcmVhbGlzdGljYWxseSBlbXVsYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNCwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOTozMi4zMjE4MDUxMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgb3IgQUhCIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGRlYnVnZnMgc3RhdGlzdGljcyBhbmQgYm91bmRzIGNoZWNraW5nIGZvciB0aG9zZSBzdGF0aXN0aWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIG9yIEFIQiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBkZWJ1Z2ZzIHN0YXRpc3RpY3MgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgdGhvc2Ugc3RhdGlzdGljcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz6kqd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 15:18:03 +0000 UTC FinishedAt: 2026-08-06 16:09:34 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgb3IgQUhCIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGRlYnVnZnMgc3RhdGlzdGljcyBhbmQgYm91bmRzIGNoZWNraW5nIGZvciB0aG9zZSBzdGF0aXN0aWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYwZDBmZWNkYTdjNGQwMzQ4ZGI0ZmFmNzRlZjQ1NTJlOGIyNjQ4MmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE1OjU3OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbkBAIC0xMDcxLDYgJiM0MzsxMDcxLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9QTl9FUlJfRkxBR19TRVRdID0gXCYjMzQ7UE4gZXJyXCYjMzQ7LFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXCYjMzQ7RGVzYyBibG9ja2VkXCYjMzQ7fTtcbiBcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3J4X2Ryb3BbV0JNX0VSUl9EUk9QX01BWF0gPSB7XG4mIzQzO1x0XHRbV0JNX0VSUl9HRVRfU1dfREVTQ10gPSBcJiMzNDtTVyBkZXNjIGVycm9yXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfREVTQ19QQVJTRV0gPSBcJiMzNDtEZXNjIHBhcnNlIGVycm9yXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9JTlZfSFdfSURdID0gXCYjMzQ7SW52YWxpZCBodyBpZFwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUF0gPSBcJiMzNDtOdWxsIFBhcnRuZXIgZHBcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUF0gPSBcJiMzNDtQcm9jZXNzIE51bGwgUGFydG5lciBkcFwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QREVWXSA9IFwmIzM0O051bGwgUGRldlwmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfTlVMTF9BUl0gPSBcJiMzNDtOdWxsIGFyXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9DQUNfUlVOTklOR10gPSBcJiMzNDtDQUMgUnVubmluZ1wmIzM0OyxcbiYjNDM7XHRcdFtXQk1fRVJSX0RST1BfU0ddID0gXCYjMzQ7U2NhdHRlciBHYXRoZXJcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFJdID0gXCYjMzQ7SW52YWxpZCBOV2lmaSBIZHIgbGVuXCYjMzQ7LFxuJiM0MztcdFx0W1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10gID0gXCYjMzQ7UkVPIEdlbmVyaWNcJiMzNDssXG4mIzQzO1x0XHRbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdID0gXCYjMzQ7UlhETUEgR2VuZXJpY1wmIzM0O307XG4mIzQzO1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yZWxfc3JjW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXSA9IHtcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfVFFNXSA9IFwmIzM0O1RRTVwmIzM0OyxcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gXCYjMzQ7UnhkbWFcJiMzNDssXG5AQCAtMTA5NSwxMyAmIzQzOzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVg7IGkmIzQzOyYjNDM7KVxuIFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDslczogJXVcXG5cJiMzNDssXG4tXHRcdFx0XHQgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcnhkbWFfZXJyb3JbaV0pO1xuJiM0MztcdFx0XHRcdCByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy1cdTAwM2V3Ym1fZXJyLnJ4ZG1hX2Vycm9yW2ldKTtcbiBcbiBcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O1xcblJFTyBlcnJvcnM6XFxuXCYjMzQ7KTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYOyBpJiM0MzsmIzQzOylcbiBcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7JXM6ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0IHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy1cdTAwM2VyZW9fZXJyb3JbaV0pO1xuJiM0MztcdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5yZW9fZXJyb3JbaV0pO1xuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtcXG5XQk0gUnggRHJvcCBDb3VudDpcXG5cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFdCTV9FUlJfRFJPUF9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7JXM6ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIuZHJvcFtpXSk7XG4mIzQzO1xuJiM0MztcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sXG4mIzQzO1x0XHRcdCBcJiMzNDtcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGRldmljZV9zdGF0cy1cdTAwM2V3Ym1fZXJyLnN3X2Rlc2NfZmFsbGJhY2spO1xuJiM0MztcbiYjNDM7XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtcXG5SRU8gc2VudCB0byBzdGFja1xcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O3JpbmclZDpcJiMzNDssIGkpO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgYWItXHUwMDNlYWctXHUwMDNlbnVtX2RldmljZXM7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1xcdCVkOiV1XCYjMzQ7LCBqLFxuJiM0MztcdFx0XHRcdFx0IGRldmljZV9zdGF0cy1cdTAwM2VzZW50X3RvX3N0YWNrW2ldW2pdKTtcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0fVxuIFxuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuSEFMIFJFTyBlcnJvcnM6XFxuXCYjMzQ7KTtcbiBcbkBAIC0xMTE3LDYgJiM0MzsxMTUwLDExIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtyaW5nJWQ6ICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IGksIGRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIuZGVzY19uYVtpXSk7XG4gXG4mIzQzO1x0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0hXX01BWF9RVUVVRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7cG9vbCVkOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaSwgZGV2aWNlX3N0YXRzLVx1MDAzZXR4X2Vyci50eGJ1Zl9uYVtpXSk7XG4mIzQzO1xuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbixcbiBcdFx0XHQgXCYjMzQ7XFxuTWlzYyBUcmFuc21pdCBGYWlsdXJlczogJWRcXG5cJiMzNDssXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIubWlzY19mYWlsKSk7XG5AQCAtMTE4MSw3ICYjNDM7MTIxOSw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7XFxuUkVPIFJ4IFJlY2VpdmVkOlxcblwmIzM0Oyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCBcJiMzNDtSaW5nJWQ6XCYjMzQ7LCBpICYjNDM7IDEpO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgXCYjMzQ7cmluZyVkOlwmIzM0OywgaSk7XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFiLVx1MDAzZWFnLVx1MDAzZW51bV9kZXZpY2VzOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdGxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sXG5AQCAtMTIxNSw4ICYjNDM7MTI1Myw0MSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdFxuJiM0MzthdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhYik7XG4mIzQzO1x0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFx1MDAyNmRwLVx1MDAzZWRldmljZV9zdGF0cztcbiYjNDM7XHRjaGFyIGJ1ZlsyMF0gPSB7fTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHQvKiBkcm9wIHRoZSBwb3NzaWJsZSAmIzM5O1xcbiYjMzk7IGZyb20gdGhlIGVuZCAqL1xuJiM0MztcdGlmIChjb3VudCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYnVmW2NvdW50IC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGJ1Zltjb3VudCAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdHJjbXAoYnVmLCBcJiMzNDtyZXNldFwmIzM0OykpIHtcbiYjNDM7XHRcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5zdXBwb3J0ZWQgY29tbWFuZDogJXNcXG5cJiMzNDssIGJ1Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfZGV2aWNlX2RwX3N0YXRzID0ge1xuIFx0LnJlYWQgPSBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyxcbiYjNDM7XHQud3JpdGUgPSBhdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMsXG4gXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gXHQubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssXG5AQCAtMTIyNyw3ICYjNDM7MTI5OCw3IEBAIHZvaWQgYXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2ltdWxhdGVfZndfY3Jhc2hcJiMzNDssIDA2MDAsIGFiLVx1MDAzZWRlYnVnZnNfc29jLCBhYixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19zaW11bGF0ZV9md19jcmFzaCk7XG4gXG4tXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2RldmljZV9kcF9zdGF0c1wmIzM0OywgMDQwMCwgYWItXHUwMDNlZGVidWdmc19zb2MsIGFiLFxuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZGV2aWNlX2RwX3N0YXRzXCYjMzQ7LCAwNjAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfZGV2aWNlX2RwX3N0YXRzKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oXG5pbmRleCBiZWYwZjJiYTA1NjBmLi4yODlhZWRlNmRhYmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjaWZuZGVmIEFUSDEyS19EUF9IXG4gI2RlZmluZSBBVEgxMktfRFBfSFxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtkcF9zdGF0cy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2RwX2h0dC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZHBfY21uLmhcJiMzNDtcbkBAIC00MjksMTkgJiM0Mzs0MzAsMjcgQEAgc3RydWN0IGF0aDEya19kcF9hcmNoX29wcyB7XG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHtcbiBcdC8qIFRDTCBSaW5nIERlc2NyaXB0b3IgdW5hdmFpbGFibGUgKi9cbiBcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuJiM0MztcdC8qIFRYIGRlc2NyaXB0b3IgcG9vbCBleGhhdXN0ZWQgKHBlciBwb29sX2lkIC8gdHJhZmZpYyBjbGFzcykgKi9cbiYjNDM7XHR1MzIgdHhidWZfbmFbQVRIMTJLX0hXX01BWF9RVUVVRVNdO1xuIFx0LyogT3RoZXIgZmFpbHVyZXMgZHVyaW5nIGRwX3R4IGR1ZSB0byBtZW0gYWxsb2NhdGlvbiBmYWlsdXJlXG4gXHQgKiBpZHIgdW5hdmFpbGFibGUgZXRjLlxuIFx0ICovXG4gXHRhdG9taWNfdCBtaXNjX2ZhaWw7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XG4mIzQzO1x0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4mIzQzO1x0dTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07XG4mIzQzO1x0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XG4mIzQzO1x0dTMyIHN3X2Rlc2NfZmFsbGJhY2s7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHtcbiBcdHUzMiBlcnJfcmluZ19wa3RzO1xuIFx0dTMyIGludmFsaWRfcmJtO1xuLVx0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4tXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcbiBcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xuIFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjtcbiYjNDM7XHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHdibV9lcnI7XG4gXHR1MzIgcmVvX3J4W0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gXHR1MzIgcnhfd2JtX3JlbF9zb3VyY2VbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gXHR1MzIgdHFtX3JlbF9yZWFzb25bTUFYX1RRTV9SRUxFQVNFX1JFQVNPTl07XG5AQCAtNDUwLDYgJiM0Mzs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7XG4gXHR1MzIgdHhfZW5xdWV1ZWRbRFBfVENMX05VTV9SSU5HX01BWF07XG4gXHR1MzIgdHhfY29tcGxldGVkW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuIFx0dTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlO1xuJiM0MztcdHUzMiBzZW50X3RvX3N0YWNrW0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gfTtcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNGQzODkyYWNmZjMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBBVEgxMktfRFBfU1RBVFNfSFxuJiM0MzsjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19IXG4mIzQzO1xuJiM0MztlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIHtcbiYjNDM7XHRXQk1fRVJSX0dFVF9TV19ERVNDLFxuJiM0MztcdFdCTV9FUlJfREVTQ19QQVJTRSxcbiYjNDM7XHRXQk1fRVJSX0RST1BfSU5WX0hXX0lELFxuJiM0MztcdFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsXG4mIzQzO1x0V0JNX0VSUl9EUk9QX05VTExfUERFVixcbiYjNDM7XHRXQk1fRVJSX0RST1BfTlVMTF9BUixcbiYjNDM7XHRXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsXG4mIzQzO1x0V0JNX0VSUl9EUk9QX1NHLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSLFxuJiM0MztcdFdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQyxcbiYjNDM7XHRXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQyxcbiYjNDM7XHRXQk1fRVJSX0RST1BfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIEFUSDEyS19EUF9TVEFUU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5pbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbkBAIC0xMiw2ICYjNDM7MTIsMTUgQEBcbiAjaW5jbHVkZSBcJiMzNDtoYWxfd2NuNzg1MC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGFsX3FjYzIwNzIuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKm1zZHUsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gYXRoMTJrX3dibV9lcnJfZHJvcF9yZWFzb24gZHJvcF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW2Ryb3BfcmVhc29uXSYjNDM7JiM0Mzs7XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHUxNiBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X3BlZXJfaWQoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRcdCAgZW51bSBhdGgxMmtfcGVlcl9tZXRhZGF0YV92ZXJzaW9uIHZlcixcbiBcdFx0XHRcdFx0ICBfX2xlMzIgcGVlcl9tZXRhZGF0YSlcbkBAIC02NDIsNyAmIzQzOzY1MSwxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc19yZWNlaXZlZF9wYWNrZXRzKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4tXG4mIzQzO1x0XHRpZiAobGlrZWx5KHJpbmdfaWQgXHUwMDNjIERQX1JFT19EU1RfUklOR19NQVgpKVxuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuc2VudF90b19zdGFja1tyaW5nX2lkXVtwYXJ0bmVyX2RwLVx1MDAzZWRldmljZV9pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXHRcdGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoZHBfcGRldiwgbmFwaSwgbXNkdSwgXHUwMDI2cnhfaW5mbyk7XG4gXHR9XG4gXG5AQCAtMTYxNCw2ICYjNDM7MTYyNiw3IEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2hfbnVsbF9xX2Rlc2Moc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBGaXJzdCBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLCBzbyBkZWR1Y3QgaXQmIzM5O3MgbGVuZ3RoICovXG4gXHRcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XG4gXHRcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcbiYjNDM7XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSYjNDM7JiM0Mzs7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTE2NDksOCAmIzQzOzE2NjIsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9udWxsX3FfZGVzYyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdHNrYl9wdXQobXNkdSwgaGFsX3J4X2Rlc2Nfc3ogJiM0MzsgbDNwYWRfYnl0ZXMgJiM0MzsgbXNkdV9sZW4pO1xuIFx0XHRza2JfcHVsbChtc2R1LCBoYWxfcnhfZGVzY19zeiAmIzQzOyBsM3BhZF9ieXRlcyk7XG4gXHR9XG4tXHRpZiAodW5saWtlbHkoIWF0aDEya19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKGRwLCBtc2R1LCByeF9pbmZvKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKSB7XG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSYjNDM7JiM0Mzs7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGF0aDEya19kcF9yeF9oX3BwZHUoZHBfcGRldiwgcnhfaW5mbyk7XG4gXHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfaF9tcGR1KGRwX3BkZXYsIG1zZHUsIHJ4X2luZm8pO1xuQEAgLTE3NjMsNyAmIzQzOzE3NzgsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRib29sIGRyb3AgPSBmYWxzZTtcbiBcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yeGRtYV9lcnJvcltyeGNiLVx1MDAzZWVycl9jb2RlXSYjNDM7JiM0Mzs7XG4mIzQzO1x0aWYgKGxpa2VseShyeGNiLVx1MDAzZWVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVgpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucnhkbWFfZXJyb3JbcnhjYi1cdTAwM2VlcnJfY29kZV0mIzQzOyYjNDM7O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9VTkFVVEhfV0RTX0VSUjpcbkBAIC0xNzgwLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0LyogVE9ETzogUmV2aWV3IG90aGVyIHJ4ZG1hIGVycm9yIGNvZGUgdG8gY2hlY2sgaWYgYW55dGhpbmcgaXNcbiBcdFx0ICogd29ydGggcmVwb3J0aW5nIHRvIG1hYzgwMjExXG4gXHRcdCAqL1xuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10mIzQzOyYjNDM7O1xuIFx0XHRkcm9wID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTc5Niw3ICYjNDM7MTgxNSwxMCBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yZW9fZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRib29sIGRyb3AgPSBmYWxzZTtcbiBcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbcnhjYi1cdTAwM2VlcnJfY29kZV0mIzQzOyYjNDM7O1xuJiM0MztcdGlmIChsaWtlbHkocnhjYi1cdTAwM2VlcnJfY29kZSBcdTAwM2MgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVgpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRzd2l0Y2ggKHJ4Y2ItXHUwMDNlZXJyX2NvZGUpIHtcbiBcdGNhc2UgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0FERFJfWkVSTzpcbkBAIC0xODEzLDYgJiM0MzsxODM1LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRcdC8qIFRPRE86IFJldmlldyBvdGhlciBlcnJvcnMgYW5kIHByb2Nlc3MgdGhlbSB0byBtYWM4MDIxMVxuIFx0XHQgKiBhcyBhcHByb3ByaWF0ZS5cbiBcdFx0ICovXG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10mIzQzOyYjNDM7O1xuIFx0XHRkcm9wID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTkzNSw2ICYjNDM7MTk1OCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfaGFsX3dibV9kZXNjX3BhcnNlX2VycihkcCwgcnhfZGVzYyxcbiBcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXJyX2luZm8pO1xuIFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9ERVNDX1BBUlNFXSYjNDM7JiM0Mzs7XG4gXHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBwYXJzZSByeCBlcnJvciBpbiB3Ym1fcmVsIHJpbmcgZGVzYyAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICByZXQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE5NDQsOCAmIzQzOzE5NjgsMTAgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xuIFx0XHRpZiAoIWRlc2NfaW5mbykge1xuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrJiM0MzsmIzQzOztcbiBcdFx0XHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XG4gXHRcdFx0aWYgKCFkZXNjX2luZm8pIHtcbiYjNDM7XHRcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfR0VUX1NXX0RFU0NdJiM0MzsmIzQzOztcbiBcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtJbnZhbGlkIGNvb2tpZSBpbiBEUCBXQk0gcnggZXJyb3IgZGVzY3JpcHRvciByZXRyaWV2YWw6IDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICBlcnJfaW5mby5jb29raWUpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMTk2MSw3ICYjNDM7MTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXHUwMDNlZGV2aWNlX2lkO1xuIFx0XHRwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQKTtcbiBcbiBcdFx0XHQvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldFxuIFx0XHRcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcbkBAIC0yMDA3LDcgJiM0MzsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cdTAwM2VoYWwsXG4gXHRcdFx0XHRcdFx0XHQgICAgbXNkdV9kYXRhKTtcbiBcdFx0aWYgKGh3X2xpbmtfaWQgXHUwMDNlPSBBVEgxMktfR1JPVVBfTUFYX1JBRElPKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTtcbiBcbiBcdFx0XHQvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldFxuIFx0XHRcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcbkBAIC0yMDY4LDcgJiM0MzsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCYjMzQ7VW5hYmxlIHRvIHByb2Nlc3MgV0JNIGVycm9yIG1zZHUgZHVlIHRvIGludmFsaWQgaHcgbGluayBpZCAlZCBkZXZpY2UgaWQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICBod19saW5rX2lkLCBkZXZpY2VfaWQpO1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuJiM0MztcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUCk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0yMDc3LDE4ICYjNDM7MjEwNiwyMSBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcbiBcdFx0ZHBfcGRldiA9IGF0aDEya19kcF90b19wZGV2X2RwKHBhcnRuZXJfZHAsIHBkZXZfaWR4KTtcbiBcdFx0aWYgKCFkcF9wZGV2KSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4mIzQzO1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QREVWKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRhciA9IGF0aDEya19wZGV2X2RwX3RvX2FyKGRwX3BkZXYpO1xuIFxuIFx0XHRpZiAoIWFyIHx8ICFyY3VfZGVyZWZlcmVuY2UoYXItXHUwMDNlYWItXHUwMDNlcGRldnNfYWN0aXZlW3BkZXZfaWR4XSkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX0FSKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFx1MDAyNmFyLVx1MDAzZWRldl9mbGFncykpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbiYjNDM7XHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9DQUNfUlVOTklORyk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbmluZGV4IDU4N2Q1OGVlY2NmYTUuLmY1NzJhYTU4MWQxMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguY1xuQEAgLTE2Nyw4ICYjNDM7MTY3LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXG4gXHR0eF9yaW5nID0gXHUwMDI2ZHAtXHUwMDNldHhfcmluZ1t0aS5yaW5nX2lkXTtcbiBcbiBcdHR4X2Rlc2MgPSBhdGgxMmtfZHBfdHhfYXNzaWduX2J1ZmZlcihkcCwgcG9vbF9pZCk7XG4tXHRpZiAoIXR4X2Rlc2MpXG4mIzQzO1x0aWYgKCF0eF9kZXNjKSB7XG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMudHhfZXJyLnR4YnVmX25hW3Bvb2xfaWRdJiM0MzsmIzQzOztcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0ZHBfbGlua192aWYgPSBhdGgxMmtfZHBfdmlmX3RvX2RwX2xpbmtfdmlmKFx1MDAyNmFodmlmLVx1MDAzZWRwX3ZpZiwgYXJ2aWYtXHUwMDNlbGlua19pZCk7XG4gXG5AQCAtNTc1LDE4ICYjNDM7NTc3LDIxIEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcbiB7XG4gXHRzdHJ1Y3QgaHR0X3R4X3dibV9jb21wbGV0aW9uICpzdGF0dXNfZGVzYztcbiBcdHN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTtcbi1cdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcbiYjNDM7XHRlbnVtIGhhbF93Ym1faHR0X3R4X2NvbXBfc3RhdHVzIGh0dF9zdGF0dXM7XG4gXHR1MTYgcGVlcl9pZDtcbiBcbiBcdHN0YXR1c19kZXNjID0gZGVzYztcbiBcbi1cdHdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVx1MDAzZWluZm8wLFxuJiM0MztcdGh0dF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVx1MDAzZWluZm8wLFxuIFx0XHRcdFx0ICAgSFRUX1RYX1dCTV9DT01QX0lORk8wX1NUQVRVUyk7XG4tXHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW3dibV9zdGF0dXNdJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAobGlrZWx5KGh0dF9zdGF0dXMgXHUwMDNjIE1BWF9GV19UWF9TVEFUVVMpKVxuJiM0MztcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSYjNDM7JiM0Mzs7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuLVx0c3dpdGNoICh3Ym1fc3RhdHVzKSB7XG4mIzQzO1x0c3dpdGNoIChodHRfc3RhdHVzKSB7XG4gXHRjYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzpcbi1cdFx0dHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spO1xuJiM0MztcdFx0dHMuYWNrZWQgPSB0cnVlO1xuIFx0XHR0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzIsXG4gXHRcdFx0XHRcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xuIFxuQEAgLTYwOCw3ICYjNDM7NjEzLDcgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLFxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRhdGgxMmtfd2FybihkcC1cdTAwM2VhYiwgXCYjMzQ7VW5rbm93biBodHQgd2JtIHR4IHN0YXR1cyAlZFxcblwmIzM0Oywgd2JtX3N0YXR1cyk7XG4mIzQzO1x0XHRhdGgxMmtfd2FybihkcC1cdTAwM2VhYiwgXCYjMzQ7VW5rbm93biBodHQgdHggc3RhdHVzICVkXFxuXCYjMzQ7LCBodHRfc3RhdHVzKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gfVxuQEAgLTk4NCwxMSAmIzQzOzk4OSwxNyBAQCB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxuIFx0XHQvKiBGaW5kIHRoZSBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUgdmFsdWUgKi9cbiBcdFx0YnVmX3JlbF9zb3VyY2UgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdFx0ICAgICAgIEhBTF9XQk1fUkVMRUFTRV9JTkZPMF9SRUxfU1JDX01PRFVMRSk7XG4tXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy50eF93Ym1fcmVsX3NvdXJjZVtidWZfcmVsX3NvdXJjZV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGxpa2VseShidWZfcmVsX3NvdXJjZSBcdTAwM2MgSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVgpKVxuJiM0MztcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMudHhfd2JtX3JlbF9zb3VyY2VbYnVmX3JlbF9zb3VyY2VdJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0XHRyZWxfc3RhdHVzID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtXHUwMDNlaW5mbzAsXG4gXHRcdFx0XHRcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChsaWtlbHkocmVsX3N0YXR1cyBcdTAwM2MgTUFYX1RRTV9SRUxFQVNFX1JFQVNPTikpXG4mIzQzO1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdFx0LyogUmVsZWFzZSBkZXNjcmlwdG9yIGFzIHNvb24gYXMgZXh0cmFjdGluZyBuZWNlc3NhcnkgaW5mb1xuIFx0XHQgKiB0byByZWR1Y2UgY29udGVudGlvblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jXG5pbmRleCA0OWM2OTMyODk3MDk0Li42MGU3YTM2MDk3ZjEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfaGFsX2Rlc2NfcmVvX3BhcnNlX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdCAgICBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9QVVNIX1JFQVNPTik7XG4gXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAobGlrZWx5KGVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXG4mIzQzO1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbZXJyX2NvZGVdJiM0MzsmIzQzOztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRpZiAocHVzaF9yZWFzb24gIT0gSEFMX1JFT19ERVNUX1JJTkdfUFVTSF9SRUFTT05fRVJSX0RFVEVDVEVEIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX1JPVVRJTkdfSU5TVFJVQ1RJT04pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkMGZlY2RhN2M0ZDAzNDhkYjRmYWY3NGVmNDU1MmU4YjI2NDgyYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTU6NTc6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jCkBAIC0xMDcxLDYgJiM0MzsxMDcxLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLAogCQlbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9QTl9FUlJfRkxBR19TRVRdID0gJiMzNDtQTiBlcnImIzM0OywKIAkJW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19CTE9DS0VEXSA9ICYjMzQ7RGVzYyBibG9ja2VkJiMzNDt9OwogCiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICp3Ym1fcnhfZHJvcFtXQk1fRVJSX0RST1BfTUFYXSA9IHsKJiM0MzsJCVtXQk1fRVJSX0dFVF9TV19ERVNDXSA9ICYjMzQ7U1cgZGVzYyBlcnJvciYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfREVTQ19QQVJTRV0gPSAmIzM0O0Rlc2MgcGFyc2UgZXJyb3ImIzM0OywKJiM0MzsJCVtXQk1fRVJSX0RST1BfSU5WX0hXX0lEXSA9ICYjMzQ7SW52YWxpZCBodyBpZCYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQXSA9ICYjMzQ7TnVsbCBQYXJ0bmVyIGRwJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUF0gPSAmIzM0O1Byb2Nlc3MgTnVsbCBQYXJ0bmVyIGRwJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX05VTExfUERFVl0gPSAmIzM0O051bGwgUGRldiYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9OVUxMX0FSXSA9ICYjMzQ7TnVsbCBhciYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9DQUNfUlVOTklOR10gPSAmIzM0O0NBQyBSdW5uaW5nJiMzNDssCiYjNDM7CQlbV0JNX0VSUl9EUk9QX1NHXSA9ICYjMzQ7U2NhdHRlciBHYXRoZXImIzM0OywKJiM0MzsJCVtXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUl0gPSAmIzM0O0ludmFsaWQgTldpZmkgSGRyIGxlbiYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10gID0gJiMzNDtSRU8gR2VuZXJpYyYjMzQ7LAomIzQzOwkJW1dCTV9FUlJfRFJPUF9SWERNQV9HRU5FUklDXSA9ICYjMzQ7UlhETUEgR2VuZXJpYyYjMzQ7fTsKJiM0MzsKIAlzdGF0aWMgY29uc3QgY2hhciAqd2JtX3JlbF9zcmNbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdID0gewogCQlbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU1dID0gJiMzNDtUUU0mIzM0OywKIAkJW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gJiMzNDtSeGRtYSYjMzQ7LApAQCAtMTA5NSwxMyAmIzQzOzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYOyBpJiM0MzsmIzQzOykKIAkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDslczogJXVcbiYjMzQ7LAotCQkJCSByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7cnhkbWFfZXJyb3JbaV0pOwomIzQzOwkJCQkgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtJmd0O3dibV9lcnIucnhkbWFfZXJyb3JbaV0pOwogCiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBlcnJvcnM6XG4mIzM0Oyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVg7IGkmIzQzOyYjNDM7KQogCQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0OyVzOiAldVxuJiMzNDssCi0JCQkJIHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7cmVvX2Vycm9yW2ldKTsKJiM0MzsJCQkJIHJlb19lcnJbaV0sIGRldmljZV9zdGF0cy0mZ3Q7d2JtX2Vyci5yZW9fZXJyb3JbaV0pOwomIzQzOwomIzQzOwlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0O1xuV0JNIFJ4IERyb3AgQ291bnQ6XG4mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBXQk1fRVJSX0RST1BfTUFYOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7JXM6ICV1XG4mIzM0OywKJiM0MzsJCQkJIHdibV9yeF9kcm9wW2ldLCBkZXZpY2Vfc3RhdHMtJmd0O3dibV9lcnIuZHJvcFtpXSk7CiYjNDM7CiYjNDM7CWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCiYjNDM7CQkJICYjMzQ7XG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxuJiMzNDssCiYjNDM7CQkJIGRldmljZV9zdGF0cy0mZ3Q7d2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTsKJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBzZW50IHRvIHN0YWNrXG4mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtyaW5nJWQ6JiMzNDssIGkpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IGFiLSZndDthZy0mZ3Q7bnVtX2RldmljZXM7IGomIzQzOyYjNDM7KQomIzQzOwkJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCiYjNDM7CQkJCQkgJiMzNDtcdCVkOiV1JiMzNDssIGosCiYjNDM7CQkJCQkgZGV2aWNlX3N0YXRzLSZndDtzZW50X3RvX3N0YWNrW2ldW2pdKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CX0KIAogCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7XG5IQUwgUkVPIGVycm9yczpcbiYjMzQ7KTsKIApAQCAtMTExNyw2ICYjNDM7MTE1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtyaW5nJWQ6ICV1XG4mIzM0OywKIAkJCQkgaSwgZGV2aWNlX3N0YXRzLSZndDt0eF9lcnIuZGVzY19uYVtpXSk7CiAKJiM0MzsJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblRYIERlc2NyaXB0b3IgUG9vbCBBbGxvYyBGYWlsdXJlczpcbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDEyS19IV19NQVhfUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7cG9vbCVkOiAldVxuJiMzNDssCiYjNDM7CQkJCSBpLCBkZXZpY2Vfc3RhdHMtJmd0O3R4X2Vyci50eGJ1Zl9uYVtpXSk7CiYjNDM7CiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwKIAkJCSAmIzM0O1xuTWlzYyBUcmFuc21pdCBGYWlsdXJlczogJWRcbiYjMzQ7LAogCQkJIGF0b21pY19yZWFkKCZhbXA7ZGV2aWNlX3N0YXRzLSZndDt0eF9lcnIubWlzY19mYWlsKSk7CkBAIC0xMTgxLDcgJiM0MzsxMjE5LDcgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsCiAJbGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgc2l6ZSAtIGxlbiwgJiMzNDtcblJFTyBSeCBSZWNlaXZlZDpcbiYjMzQ7KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpJiM0MzsmIzQzOykgewotCQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBzaXplIC0gbGVuLCAmIzM0O1JpbmclZDomIzM0OywgaSAmIzQzOyAxKTsKJiM0MzsJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sICYjMzQ7cmluZyVkOiYjMzQ7LCBpKTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgYWItJmd0O2FnLSZndDtudW1fZGV2aWNlczsgaiYjNDM7JiM0MzspIHsKIAkJCWxlbiAmIzQzOz0gc2NucHJpbnRmKGJ1ZiAmIzQzOyBsZW4sIHNpemUgLSBsZW4sCkBAIC0xMjE1LDggJiM0MzsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2F0aDEya19kZWJ1Z2ZzX3dyaXRlX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiYjNDM7CQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGF0aDEya19hYl90b19kcChhYik7CiYjNDM7CXN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzICpkZXZpY2Vfc3RhdHMgPSAmYW1wO2RwLSZndDtkZXZpY2Vfc3RhdHM7CiYjNDM7CWNoYXIgYnVmWzIwXSA9IHt9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoY291bnQgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgY291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CS8qIGRyb3AgdGhlIHBvc3NpYmxlICYjMzk7XG4mIzM5OyBmcm9tIHRoZSBlbmQgKi8KJiM0MzsJaWYgKGNvdW50ICZndDsgMCAmYW1wOyZhbXA7IGJ1Zltjb3VudCAtIDFdID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWJ1Zltjb3VudCAtIDFdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlpZiAoIXN0cmNtcChidWYsICYjMzQ7cmVzZXQmIzM0OykpIHsKJiM0MzsJCW1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXRoMTJrX3dhcm4oYWIsICYjMzQ7dW5zdXBwb3J0ZWQgY29tbWFuZDogJXNcbiYjMzQ7LCBidWYpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RldmljZV9kcF9zdGF0cyA9IHsKIAkucmVhZCA9IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzLAomIzQzOwkud3JpdGUgPSBhdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMsCiAJLm9wZW4gPSBzaW1wbGVfb3BlbiwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCkBAIC0xMjI3LDcgJiM0MzsxMjk4LDcgQEAgdm9pZCBhdGgxMmtfZGVidWdmc19wZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaW11bGF0ZV9md19jcmFzaCYjMzQ7LCAwNjAwLCBhYi0mZ3Q7ZGVidWdmc19zb2MsIGFiLAogCQkJICAgICZhbXA7Zm9wc19zaW11bGF0ZV9md19jcmFzaCk7CiAKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZGV2aWNlX2RwX3N0YXRzJiMzNDssIDA0MDAsIGFiLSZndDtkZWJ1Z2ZzX3NvYywgYWIsCiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZXZpY2VfZHBfc3RhdHMmIzM0OywgMDYwMCwgYWItJmd0O2RlYnVnZnNfc29jLCBhYiwKIAkJCSAgICAmYW1wO2ZvcHNfZGV2aWNlX2RwX3N0YXRzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oCmluZGV4IGJlZjBmMmJhMDU2MGYuLjI4OWFlZGU2ZGFiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmgKQEAgLTcsNiAmIzQzOzcsNyBAQAogI2lmbmRlZiBBVEgxMktfRFBfSAogI2RlZmluZSBBVEgxMktfRFBfSAogCiYjNDM7I2luY2x1ZGUgJiMzNDtkcF9zdGF0cy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2RwX2h0dC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZHBfY21uLmgmIzM0OwpAQCAtNDI5LDE5ICYjNDM7NDMwLDI3IEBAIHN0cnVjdCBhdGgxMmtfZHBfYXJjaF9vcHMgewogc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHsKIAkvKiBUQ0wgUmluZyBEZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovCiAJdTMyIGRlc2NfbmFbRFBfVENMX05VTV9SSU5HX01BWF07CiYjNDM7CS8qIFRYIGRlc2NyaXB0b3IgcG9vbCBleGhhdXN0ZWQgKHBlciBwb29sX2lkIC8gdHJhZmZpYyBjbGFzcykgKi8KJiM0MzsJdTMyIHR4YnVmX25hW0FUSDEyS19IV19NQVhfUVVFVUVTXTsKIAkvKiBPdGhlciBmYWlsdXJlcyBkdXJpbmcgZHBfdHggZHVlIHRvIG1lbSBhbGxvY2F0aW9uIGZhaWx1cmUKIAkgKiBpZHIgdW5hdmFpbGFibGUgZXRjLgogCSAqLwogCWF0b21pY190IG1pc2NfZmFpbDsKIH07CiAKJiM0MztzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHsKJiM0MzsJdTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07CiYjNDM7CXUzMiByZW9fZXJyb3JbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVhdOwomIzQzOwl1MzIgZHJvcFtXQk1fRVJSX0RST1BfTUFYXTsKJiM0MzsJdTMyIHN3X2Rlc2NfZmFsbGJhY2s7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHsKIAl1MzIgZXJyX3JpbmdfcGt0czsKIAl1MzIgaW52YWxpZF9yYm07Ci0JdTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07Ci0JdTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07CiAJdTMyIGhhbF9yZW9fZXJyb3JbRFBfUkVPX0RTVF9SSU5HX01BWF07CiAJc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjsKJiM0MzsJc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB3Ym1fZXJyOwogCXUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTsKIAl1MzIgcnhfd2JtX3JlbF9zb3VyY2VbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdW0FUSDEyS19NQVhfREVWSUNFU107CiAJdTMyIHRxbV9yZWxfcmVhc29uW01BWF9UUU1fUkVMRUFTRV9SRUFTT05dOwpAQCAtNDUwLDYgJiM0Mzs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7CiAJdTMyIHR4X2VucXVldWVkW0RQX1RDTF9OVU1fUklOR19NQVhdOwogCXUzMiB0eF9jb21wbGV0ZWRbRFBfVENMX05VTV9SSU5HX01BWF07CiAJdTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlOwomIzQzOwl1MzIgc2VudF90b19zdGFja1tEUF9SRU9fRFNUX1JJTkdfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdOwogfTsKIAogc3RydWN0IGF0aDEya19kcCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDRkMzg5MmFjZmYzMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaApAQCAtMCwwICYjNDM7MSwyNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgQVRIMTJLX0RQX1NUQVRTX0gKJiM0MzsjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19ICiYjNDM7CiYjNDM7ZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiB7CiYjNDM7CVdCTV9FUlJfR0VUX1NXX0RFU0MsCiYjNDM7CVdCTV9FUlJfREVTQ19QQVJTRSwKJiM0MzsJV0JNX0VSUl9EUk9QX0lOVl9IV19JRCwKJiM0MzsJV0JNX0VSUl9EUk9QX05VTExfUFJUTlJfRFAsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX1BERVYsCiYjNDM7CVdCTV9FUlJfRFJPUF9OVUxMX0FSLAomIzQzOwlXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsCiYjNDM7CVdCTV9FUlJfRFJPUF9TRywKJiM0MzsJV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFIsCiYjNDM7CVdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQywKJiM0MzsJV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUMsCiYjNDM7CVdCTV9FUlJfRFJPUF9NQVgsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogQVRIMTJLX0RQX1NUQVRTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwppbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAKICNpbmNsdWRlICYjMzQ7aGFsX3djbjc4NTAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hhbF9xY2MyMDcyLmgmIzM0OwogCiYjNDM7c3RhdGljIHZvaWQKJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBza19idWZmICptc2R1LAomIzQzOwkJCQkgICAgZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbikKJiM0Mzt7CiYjNDM7CWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW2Ryb3BfcmVhc29uXSYjNDM7JiM0Mzs7CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB1MTYgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQkJCQkgIGVudW0gYXRoMTJrX3BlZXJfbWV0YWRhdGFfdmVyc2lvbiB2ZXIsCiAJCQkJCSAgX19sZTMyIHBlZXJfbWV0YWRhdGEpCkBAIC02NDIsNyAmIzQzOzY1MSwxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc19yZWNlaXZlZF9wYWNrZXRzKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiAJCQljb250aW51ZTsKIAkJfQotCiYjNDM7CQlpZiAobGlrZWx5KHJpbmdfaWQgJmx0OyBEUF9SRU9fRFNUX1JJTkdfTUFYKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnNlbnRfdG9fc3RhY2tbcmluZ19pZF1bcGFydG5lcl9kcC0mZ3Q7ZGV2aWNlX2lkXSYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKDEpOwogCQlhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KGRwX3BkZXYsIG5hcGksIG1zZHUsICZhbXA7cnhfaW5mbyk7CiAJfQogCkBAIC0xNjE0LDYgJiM0MzsxNjI2LDcgQEAgc3RhdGljIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9udWxsX3FfZGVzYyhzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCS8qIEZpcnN0IGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIsIHNvIGRlZHVjdCBpdCYjMzk7cyBsZW5ndGggKi8KIAkJbXNkdV9sZW4gPSBtc2R1X2xlbiAtIChEUF9SWF9CVUZGRVJfU0laRSAtIGhhbF9yeF9kZXNjX3N6KTsKIAkJYXRoMTJrX3dpZmk3X2RwX3J4X251bGxfcV9kZXNjX3NnX2Ryb3AoZHAsIG1zZHVfbGVuLCBtc2R1X2xpc3QpOwomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSYjNDM7JiM0Mzs7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTY0OSw4ICYjNDM7MTY2MiwxMCBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAkJc2tiX3B1dChtc2R1LCBoYWxfcnhfZGVzY19zeiAmIzQzOyBsM3BhZF9ieXRlcyAmIzQzOyBtc2R1X2xlbik7CiAJCXNrYl9wdWxsKG1zZHUsIGhhbF9yeF9kZXNjX3N6ICYjNDM7IGwzcGFkX2J5dGVzKTsKIAl9Ci0JaWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKQomIzQzOwlpZiAodW5saWtlbHkoIWF0aDEya19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKGRwLCBtc2R1LCByeF9pbmZvKSkpIHsKJiM0MzsJCWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSYjNDM7JiM0Mzs7CiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlhdGgxMmtfZHBfcnhfaF9wcGR1KGRwX3BkZXYsIHJ4X2luZm8pOwogCXJldCA9IGF0aDEya193aWZpN19kcF9yeF9oX21wZHUoZHBfcGRldiwgbXNkdSwgcnhfaW5mbyk7CkBAIC0xNzYzLDcgJiM0MzsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlib29sIGRyb3AgPSBmYWxzZTsKIAotCWRwLSZndDtkZXZpY2Vfc3RhdHMucnhkbWFfZXJyb3JbcnhjYi0mZ3Q7ZXJyX2NvZGVdJiM0MzsmIzQzOzsKJiM0MzsJaWYgKGxpa2VseShyeGNiLSZndDtlcnJfY29kZSAmbHQ7IEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucnhkbWFfZXJyb3JbcnhjYi0mZ3Q7ZXJyX2NvZGVdJiM0MzsmIzQzOzsKJiM0MzsJZWxzZQomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwogCiAJc3dpdGNoIChyeGNiLSZndDtlcnJfY29kZSkgewogCWNhc2UgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfVU5BVVRIX1dEU19FUlI6CkBAIC0xNzgwLDYgJiM0MzsxNzk4LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcnhkbWFfZXJyKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAkJLyogVE9ETzogUmV2aWV3IG90aGVyIHJ4ZG1hIGVycm9yIGNvZGUgdG8gY2hlY2sgaWYgYW55dGhpbmcgaXMKIAkJICogd29ydGggcmVwb3J0aW5nIHRvIG1hYzgwMjExCiAJCSAqLwomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdJiM0MzsmIzQzOzsKIAkJZHJvcCA9IHRydWU7CiAJCWJyZWFrOwogCX0KQEAgLTE3OTYsNyAmIzQzOzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlib29sIGRyb3AgPSBmYWxzZTsKIAotCWRwLSZndDtkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWlmIChsaWtlbHkocnhjYi0mZ3Q7ZXJyX2NvZGUgJmx0OyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAogCXN3aXRjaCAocnhjYi0mZ3Q7ZXJyX2NvZGUpIHsKIAljYXNlIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19BRERSX1pFUk86CkBAIC0xODEzLDYgJiM0MzsxODM1LDcgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJCS8qIFRPRE86IFJldmlldyBvdGhlciBlcnJvcnMgYW5kIHByb2Nlc3MgdGhlbSB0byBtYWM4MDIxMQogCQkgKiBhcyBhcHByb3ByaWF0ZS4KIAkJICovCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdJiM0MzsmIzQzOzsKIAkJZHJvcCA9IHRydWU7CiAJCWJyZWFrOwogCX0KQEAgLTE5MzUsNiAmIzQzOzE5NTgsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAkJcmV0ID0gYXRoMTJrX3dpZmk3X2hhbF93Ym1fZGVzY19wYXJzZV9lcnIoZHAsIHJ4X2Rlc2MsCiAJCQkJCQkJICAmYW1wO2Vycl9pbmZvKTsKIAkJaWYgKHJldCkgewomIzQzOwkJCWRwLSZndDtkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfREVTQ19QQVJTRV0mIzQzOyYjNDM7OwogCQkJYXRoMTJrX3dhcm4oYWIsICYjMzQ7ZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXG4mIzM0OywKIAkJCQkgICAgcmV0KTsKIAkJCWNvbnRpbnVlOwpAQCAtMTk0NCw4ICYjNDM7MTk2OCwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAogCQkvKiByZXRyeSBtYW51YWwgZGVzYyByZXRyaWV2YWwgaWYgaHcgY2MgaXMgbm90IGRvbmUgKi8KIAkJaWYgKCFkZXNjX2luZm8pIHsKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuc3dfZGVzY19mYWxsYmFjayYjNDM7JiM0Mzs7CiAJCQlkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7CiAJCQlpZiAoIWRlc2NfaW5mbykgewomIzQzOwkJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0dFVF9TV19ERVNDXSYjNDM7JiM0Mzs7CiAJCQkJYXRoMTJrX3dhcm4oYWIsICYjMzQ7SW52YWxpZCBjb29raWUgaW4gRFAgV0JNIHJ4IGVycm9yIGRlc2NyaXB0b3IgcmV0cmlldmFsOiAweCV4XG4mIzM0OywKIAkJCQkJICAgIGVycl9pbmZvLmNvb2tpZSk7CiAJCQkJY29udGludWU7CkBAIC0xOTYxLDcgJiM0MzsxOTg3LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCWRldmljZV9pZCA9IGRlc2NfaW5mby0mZ3Q7ZGV2aWNlX2lkOwogCQlwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7CiAJCWlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX05VTExfUFJUTlJfRFApOwogCiAJCQkvKiBJbiBhbnkgY2FzZSBjb250aW51YXRpb24gYml0IGlzIHNldAogCQkJICogaW4gdGhlIHByZXZpb3VzIHJlY29yZCwgY2xlYW51cCBzY2F0dGVyX21zZHVfbGlzdApAQCAtMjAwNyw3ICYjNDM7MjAzNCw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCQlod19saW5rX2lkID0gYXRoMTJrX2RwX3J4X2dldF9tc2R1X3NyY19saW5rKHBhcnRuZXJfZHAtJmd0O2hhbCwKIAkJCQkJCQkgICAgbXNkdV9kYXRhKTsKIAkJaWYgKGh3X2xpbmtfaWQgJmd0Oz0gQVRIMTJLX0dST1VQX01BWF9SQURJTykgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTsKIAogCQkJLyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXQKIAkJCSAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3QKQEAgLTIwNjgsNyAmIzQzOzIwOTYsOCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwKIAkJCWF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSwKIAkJCQkgICAmIzM0O1VuYWJsZSB0byBwcm9jZXNzIFdCTSBlcnJvciBtc2R1IGR1ZSB0byBpbnZhbGlkIGh3IGxpbmsgaWQgJWQgZGV2aWNlIGlkICVkXG4mIzM0OywKIAkJCQkgICBod19saW5rX2lkLCBkZXZpY2VfaWQpOwotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIwNzcsMTggJiM0MzsyMTA2LDIxIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLAogCiAJCWRwX3BkZXYgPSBhdGgxMmtfZHBfdG9fcGRldl9kcChwYXJ0bmVyX2RwLCBwZGV2X2lkeCk7CiAJCWlmICghZHBfcGRldikgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CiYjNDM7CQkJYXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsCiYjNDM7CQkJCQkJCSAgICBXQk1fRVJSX0RST1BfTlVMTF9QREVWKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7CiAKIAkJaWYgKCFhciB8fCAhcmN1X2RlcmVmZXJlbmNlKGFyLSZndDthYi0mZ3Q7cGRldnNfYWN0aXZlW3BkZXZfaWR4XSkpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX05VTExfQVIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsICZhbXA7YXItJmd0O2Rldl9mbGFncykpIHsKLQkJCWRldl9rZnJlZV9za2JfYW55KG1zZHUpOwomIzQzOwkJCWF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LAomIzQzOwkJCQkJCQkgICAgV0JNX0VSUl9EUk9QX0NBQ19SVU5OSU5HKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYwppbmRleCA1ODdkNThlZWNjZmE1Li5mNTcyYWE1ODFkMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jCkBAIC0xNjcsOCAmIzQzOzE2NywxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYQogCXR4X3JpbmcgPSAmYW1wO2RwLSZndDt0eF9yaW5nW3RpLnJpbmdfaWRdOwogCiAJdHhfZGVzYyA9IGF0aDEya19kcF90eF9hc3NpZ25fYnVmZmVyKGRwLCBwb29sX2lkKTsKLQlpZiAoIXR4X2Rlc2MpCiYjNDM7CWlmICghdHhfZGVzYykgewomIzQzOwkJZHAtJmd0O2RldmljZV9zdGF0cy50eF9lcnIudHhidWZfbmFbcG9vbF9pZF0mIzQzOyYjNDM7OwogCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQogCiAJZHBfbGlua192aWYgPSBhdGgxMmtfZHBfdmlmX3RvX2RwX2xpbmtfdmlmKCZhbXA7YWh2aWYtJmd0O2RwX3ZpZiwgYXJ2aWYtJmd0O2xpbmtfaWQpOwogCkBAIC01NzUsMTggJiM0Mzs1NzcsMjEgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLAogewogCXN0cnVjdCBodHRfdHhfd2JtX2NvbXBsZXRpb24gKnN0YXR1c19kZXNjOwogCXN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTsKLQllbnVtIGhhbF93Ym1faHR0X3R4X2NvbXBfc3RhdHVzIHdibV9zdGF0dXM7CiYjNDM7CWVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgaHR0X3N0YXR1czsKIAl1MTYgcGVlcl9pZDsKIAogCXN0YXR1c19kZXNjID0gZGVzYzsKIAotCXdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLSZndDtpbmZvMCwKJiM0MzsJaHR0X3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtJmd0O2luZm8wLAogCQkJCSAgIEhUVF9UWF9XQk1fQ09NUF9JTkZPMF9TVEFUVVMpOwotCWRwLSZndDtkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW3dibV9zdGF0dXNdJiM0MzsmIzQzOzsKJiM0MzsJaWYgKGxpa2VseShodHRfc3RhdHVzICZsdDsgTUFYX0ZXX1RYX1NUQVRVUykpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAotCXN3aXRjaCAod2JtX3N0YXR1cykgewomIzQzOwlzd2l0Y2ggKGh0dF9zdGF0dXMpIHsKIAljYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzoKLQkJdHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spOwomIzQzOwkJdHMuYWNrZWQgPSB0cnVlOwogCQl0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtJmd0O2luZm8yLAogCQkJCQkgICAgSFRUX1RYX1dCTV9DT01QX0lORk8yX0FDS19SU1NJKTsKIApAQCAtNjA4LDcgJiM0Mzs2MTMsNyBAQCBhdGgxMmtfZHBfdHhfcHJvY2Vzc19odHRfdHhfY29tcGxldGUoc3RydWN0IGF0aDEya19kcCAqZHAsIHZvaWQgKmRlc2MsCiAJCSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGgxMmtfd2FybihkcC0mZ3Q7YWIsICYjMzQ7VW5rbm93biBodHQgd2JtIHR4IHN0YXR1cyAlZFxuJiMzNDssIHdibV9zdGF0dXMpOwomIzQzOwkJYXRoMTJrX3dhcm4oZHAtJmd0O2FiLCAmIzM0O1Vua25vd24gaHR0IHR4IHN0YXR1cyAlZFxuJiMzNDssIGh0dF9zdGF0dXMpOwogCQlicmVhazsKIAl9CiB9CkBAIC05ODQsMTEgJiM0Mzs5ODksMTcgQEAgdm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGlvbl9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgcmluZ19pZCkKIAkJLyogRmluZCB0aGUgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFIHZhbHVlICovCiAJCWJ1Zl9yZWxfc291cmNlID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtJmd0O2luZm8wLAogCQkJCQkgICAgICAgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFKTsKLQkJZHAtJmd0O2RldmljZV9zdGF0cy50eF93Ym1fcmVsX3NvdXJjZVtidWZfcmVsX3NvdXJjZV0mIzQzOyYjNDM7OwomIzQzOwkJaWYgKGxpa2VseShidWZfcmVsX3NvdXJjZSAmbHQ7IEhBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSYjNDM7JiM0Mzs7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKDEpOwogCiAJCXJlbF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy0mZ3Q7aW5mbzAsCiAJCQkJCSAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTsKLQkJZHAtJmd0O2RldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobGlrZWx5KHJlbF9zdGF0dXMgJmx0OyBNQVhfVFFNX1JFTEVBU0VfUkVBU09OKSkKJiM0MzsJCQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdJiM0MzsmIzQzOzsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXQVJOX09OX09OQ0UoMSk7CiAKIAkJLyogUmVsZWFzZSBkZXNjcmlwdG9yIGFzIHNvb24gYXMgZXh0cmFjdGluZyBuZWNlc3NhcnkgaW5mbwogCQkgKiB0byByZWR1Y2UgY29udGVudGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmMKaW5kZXggNDljNjkzMjg5NzA5NC4uNjBlN2EzNjA5N2YxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jCkBAIC0zMjksNyAmIzQzOzMyOSwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2hhbF9kZXNjX3Jlb19wYXJzZV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsCiAJCQkJICAgIEhBTF9SRU9fREVTVF9SSU5HX0lORk8wX1BVU0hfUkVBU09OKTsKIAllcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy0mZ3Q7aW5mbzAsCiAJCQkJIEhBTF9SRU9fREVTVF9SSU5HX0lORk8wX0VSUk9SX0NPREUpOwotCWRwLSZndDtkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWlmIChsaWtlbHkoZXJyX2NvZGUgJmx0OyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpCiYjNDM7CQlkcC0mZ3Q7ZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW2Vycl9jb2RlXSYjNDM7JiM0Mzs7CiYjNDM7CWVsc2UKJiM0MzsJCVdBUk5fT05fT05DRSgxKTsKIAogCWlmIChwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9FUlJfREVURUNURUQgJmFtcDsmYW1wOwogCSAgICBwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9ST1VUSU5HX0lOU1RSVUNUSU9OKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogYXRoMTJrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYSBoYW5kZnVsIG9mIGBhdGgxMmtgIGZpbGVzOiBgZGVidWdmcy5jYCwgYGRwLmhgLCBgZHBfc3RhdHMuaGAsIGFuZCBzb21lIGB3aWZpN2AgZmlsZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIG5ldyBzdGF0cyB0byBgYXRoMTJrX2RldmljZV9kcF9zdGF0c2AgYW5kIHVwZGF0aW5nIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byBoYW5kbGUgZHVtcGluZyBhbmQgcmVzZXR0aW5nIHRoZXNlIHN0YXRzLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIHN0YXRzIGFycmF5cywgd2hpY2ggaXMgZ3JlYXQuICBUaGluZ3MgbGlrZSBgaWYgKGxpa2VseShyeGNiLSZndDtlcnJfY29kZSAmbHQ7IEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpYCBiZWZvcmUgaW5jcmVtZW50aW5nIGFuIGFycmF5IGVudHJ5LiBUaGV5JiMzOTtyZSBhbHNvIHRocm93aW5nIGluIGEgYFdBUk5fT05fT05DRSgxKWAgaWYgdGhvc2UgYm91bmRzIGFyZSB2aW9sYXRlZCwgd2hpY2ggaXMgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZHJvcCByZWFzb25zIHRyYWNrZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6emFibGU/ICBUaGUgY2hhbmdlcyBhcmUgYmFzaWNhbGx5OiBkZWJ1Z2ZzIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciBgZGV2aWNlX2RwX3N0YXRzYCwgdGhlIGJvdW5kcyBjaGVja3MgSSBtZW50aW9uZWQsIGFuZCBzdGF0cyBjb3VudGVyIGluY3JlbWVudHMuIFRoZSBib3VuZHMgY2hlY2tpbmcgaXMgdGhlIGtleSBwYXJ0IGZvciBmdXp6aW5nIHBvdGVudGlhbCwgYnV0IGl0ICpwcmV2ZW50cyogb3V0LW9mLWJvdW5kcyB3cml0ZXMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgY2hlY2tzIGxpa2UgdGhpcyB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgZHVyaW5nIHN0YXRzIGluY3JlbWVudGluZy4gVGhlIGV4YW1wbGUgY29kZSBzbmlwcGV0IGlzIHZlcnkgY2xlYXIg4oCTIHRoZXkmIzM5O3JlIG1ha2luZyBzdXJlIGByeGNiLSZndDtlcnJfY29kZWAgaXMgd2l0aGluIHRoZSBhcnJheSBib3VuZHMgYmVmb3JlIGFjY2Vzc2luZyBgZHAtJmd0O2RldmljZV9zdGF0cy53Ym1fZXJyLnJ4ZG1hX2Vycm9yW3J4Y2ItJmd0O2Vycl9jb2RlXWAuICBUaGF0IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGlzIGlzIGFuIGBhdGgxMmtgIGRyaXZlci4gSXQmIzM5O3MgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgbWVhbmluZyBQQ0kgb3IgQUhCIGhhcmR3YXJlLiAgV2ktRmkgZHJpdmVycyBvZnRlbiByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gIEkmIzM5O20gcmFja2luZyBteSBicmFpbiwgZG9lcyBRRU1VIGV2ZW4gKmVtdWxhdGUqIGBhdGgxMmtgPyBOb3BlLiBOb3QgdGhhdCBJJiMzOTttIGF3YXJlIG9mLiAgYG1hYzgwMjExX2h3c2ltYCAqZW11bGF0ZXMqIFdpLUZpIGluIGEgZ2VuZXJhbCB3YXksIGJ1dCBgYXRoMTJrYCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gQ2FuIGBhdGgxMmtgIGJlIHByb2JlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmU/IExldCBtZSBjaGVja+KApiBub3BlLCBpdCYjMzk7cyBhIFBDSS9BSEIgZHJpdmVyLiAgQW5kIG5vLCBJJiMzOTttIG5vdCBmaW5kaW5nIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgc3BlY2lmaWNhbGx5IGZvciBgYXRoMTJrYC4KCk9rYXksIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgIGBhdGgxMmtgIGlzICpleGFjdGx5KiB0aGF0IOKAkyB2ZW5kb3Itc3BlY2lmaWMsIFBDSWUvQUhCIChzbyB0aGF0IG1lYW5zIFBDSWUtbGlrZSksIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgYWN0dWFsIGhhcmR3YXJlLiBTbywgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIGFuZCB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQsIEkgbXVzdCBjb25jbHVkZSB0aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyB3aXRoaW4gdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoZSB2ZXJ5IG5hdHVyZSBvZiB0aGUgZHJpdmVyJiMzOTtzIHRhcmdldCBoYXJkd2FyZSBtYWtlcyBpdCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyLiphdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MTk6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydCBhbmQgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEF0eXBpY2FsIEhlbW9seXRpYyBVcmVtaWMgU3luZHJvbWUgKGFIVVMpIG9yIFNpbWlsYXIgQ29uZGl0aW9ucyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtZSB0aGlua2luZyBhYm91dCBBSEIuIEJ1dCBJIGNhbiYjMzk7dCBqdW1wIHRvIGNvbmNsdXNpb25zIGp1c3QgeWV0LiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBydWxlIG91dCBvdGhlciBwb3NzaWJpbGl0aWVzLCBvciBhdCBsZWFzdCBjb25zaWRlciB0aGVtLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0IGlzbiYjMzk7dCBzb21ldGhpbmcgZWxzZSAqYWxvbmdzaWRlKiBvciAqaW5zdGVhZCBvZiogQUhCLiBJIHdhbnQgdG8gYXBwcm9hY2ggdGhpcyBzeXN0ZW1hdGljYWxseSwgd2l0aCBhIGJyb2FkIGRpZmZlcmVudGlhbCBkaWFnbm9zaXMgaW4gbWluZCwgYW5kIG5vdCBtaXNzIGEgdHJpY2suIFNvLCBteSB0aG91Z2h0IGlzOiBMZXQmIzM5O3MgaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGlzIHN0cmljdGx5IEFIQiwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSB0byB0aGUgc3RvcnkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBjYXN0IGEgd2lkZXIgbmV0IGluIG15IHRoaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0LiphdGgxMmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya193aWZpN19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQmIzM5O3MgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGEgV2lGaSA3IGRldmljZSBsaWtlIGluIHRoaXMgY29udGV4dD8gSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoZSBhdGgxMGsgYW5kIGF0aDExayBmYW1pbGllczsgSSB3b25kZXIgd2hhdCBhcmNoaXRlY3R1cmFsIGRpZmZlcmVuY2VzIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgZm9yIFdpRmkgNyBhbmQgaG93IHRob3NlIGFyZSByZWZsZWN0ZWQgaW4gdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCBoYXJkd2FyZS1zcGVjaWZpYywgZHJpdmVyLXNwZWNpZmljLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IG5ldyByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBoZXJlIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgODAyLjExYmUgc3RhbmRhcmQsIG9yIGlzIGl0IGJ1aWxkaW5nIHVwb24gZXhpc3RpbmcgY29kZT8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiBxdWl0ZSBhIGJpdCBmcm9tIHRoZSB2YXJpYWJsZSBuYW1lcyBhbmQgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgaWYgdGhlIGF1dGhvcnMgaGF2ZSBpbmNsdWRlZCBhbnkgY29tbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3dpZmk3X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9MzM9dm9pZCBhdGgxMmtfd2lmaTdfYXJjaF9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjM5OnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBhdGgxMmtfd2lmaTdfaW5pdGAgY29kZSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIEF0aDEyayBXaUZpIDcgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIGBhdGgxMmtfd2lmaTdfaW5pdGAuIEltbWVkaWF0ZWx5LCB0aGUgJiMzNDtpbml0JiMzNDsgcGFydCBzaWduYWxzIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhlIFdpRmkgNyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgaW5pdGlhbCBkZXZpY2UgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBoYXJkd2FyZSwgY29uZmlndXJlcyB0aGUgcmFkaW8sIGFuZCBzZXRzIHVwIHRoZSBmb3VuZGF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBXaUZpIDcgb3BlcmF0aW9ucy4gSSBiZXQgdGhpcyBpcyB3aGVyZSB0aGUgcG93ZXItdXAgc2VxdWVuY2UsIFBIWSBpbml0aWFsaXphdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIHNldHRpbmdzLCBjbG9jayBjb25maWd1cmF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGRyaXZlciBzdHJ1Y3R1cmVzLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZSBuZXcgZmVhdHVyZXMgb2YgV2lGaSA3LCBsaWtlIHRoZSAzMjAgTUh6IGNoYW5uZWxzLCBtdWx0aS1saW5rIG9wZXJhdGlvbiwgYW5kIGltcHJvdmVkIG1vZHVsYXRpb24gc2NoZW1lcywgYXJlIGludGVncmF0ZWQgYXQgdGhlIHZlcnkgc3RhcnQuIEkmIzM5O2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgbWFkZSBoZXJlIHRvIGVuYWJsZSB0aGlzIG5ldyBzdGFuZGFyZC4gSXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBkcml2ZXIgc2V0dXAsIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgY29tZSB0b2dldGhlci4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzOTpcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHRhaGJfZXJyID0gYXRoMTJrX3dpZmk3X2FoYl9pbml0KCk7XG4gIDQyOlx0XHRpZiAoYWhiX2VycilcbiAgNDM6XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBBSEIgZGV2aWNlOiAlZFxcblwmIzM0OyxcbiAgNDQ6XHRcdFx0XHRhaGJfZXJyKTtcbiAgNDU6XHRcbiAgNDY6XHRcdHBjaV9lcnIgPSBhdGgxMmtfd2lmaTdfcGNpX2luaXQoKTtcbiAgNDc6XHRcdGlmIChwY2lfZXJyKVxuICA0ODpcdFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIGF0aDEyayBXaS1GaSA3IFBDSSBkZXZpY2U6ICVkXFxuXCYjMzQ7LFxuICA0OTpcdFx0XHRcdHBjaV9lcnIpO1xuICA1MDpcdFxuICA1MTpcdFx0LyogSWYgYm90aCBmYWlsZWQsIHJldHVybiBvbmUgb2YgdGhlIGZhaWx1cmVzIChhcmJpdHJhcnkpICovXG4gIDUyOlx0XHRyZXR1cm4gYWhiX2VyciBcdTAwMjZcdTAwMjYgcGNpX2VyciA/IGFoYl9lcnIgOiAwO1xuICA1MzpcdH1cbiAgNTQ6XHRcbiAgNTU6XHRzdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuICA1NjpcdHtcbiAgNTc6XHRcdGlmICghcGNpX2VycilcbiAgNTg6XHRcdFx0YXRoMTJrX3dpZmk3X3BjaV9leGl0KCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI0CgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NtZW50IG9mIEZ1enppbmcgVmlhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGFydGljdWxhciBwYXRjaCBpc24mIzM5O3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGhlcmUmIzM5O3Mgd2h5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gTm93LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYm90aCBvZiB0aGVzZSBpbnRlcmZhY2VzIGFyZSB0aWVkIHRvIGFjdHVhbCwgcGh5c2ljYWwgaGFyZHdhcmUuIFdoaWxlIEFIQiAqY291bGQqIHRoZW9yZXRpY2FsbHkgYmUgcmVwcmVzZW50ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBub2Rlcywgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBvZmZlciB0aGVzZSBnZW5lcmljIEFIQiBkZXZpY2UgdHJlZSBub2Rlcy4gSXQgaXMgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHBvc3NpYmxlIHRvIGVtdWxhdGUuCgpNb3Jlb3ZlciwgdGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGFkZGluZyBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gYW5kIHNvbWUgYm91bmRzIGNoZWNraW5nIGFyb3VuZCB0aG9zZSBzdGF0aXN0aWNzLiBUaGF0IHNvdW5kcyBpbm5vY3VvdXMgb24gaXRzIG93biwgYnV0IGNvbnRleHQgaXMgZXZlcnl0aGluZy4gQmVjYXVzZSBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXLigJRpbiB0aGlzIGNhc2UsIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGhhcmR3YXJlIChhdGgxMmsp4oCUaXQmIzM5O3MgcmVhc29uYWJsZSB0byBhc3N1bWUgYSBkZWdyZWUgb2YgaGFyZHdhcmUgZGVwZW5kZW5jeS4gV2Uga25vdyBpdCByZXF1aXJlcyByZWFsIFBDSWUgYW5kL29yIEFIQiBoYXJkd2FyZSwgYW5kIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBnb29kIGVtdWxhdGlvbiBvZiB0aGlzLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzLCBpdCYjMzk7cyBub3QgcHJhY3RpY2FsIHRvIHByb2NlZWQgd2l0aCBmdXp6aW5nIHRoaXMuIFJldHVybmluZyBXb3J0aEZ1enppbmc9ZmFsc2Ugc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2Ugd2l0aCB0aGUganVzdGlmaWNhdGlvbiBiZWluZyB0aGF0IHRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgV2ktRmkgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIFBDSWUvQUhCIGhhcmR3YXJlIG5vdCByZWFsaXN0aWNhbGx5IGVtdWxhdGVkIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIG9yIEFIQiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBkZWJ1Z2ZzIHN0YXRpc3RpY3MgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgdGhvc2Ugc3RhdGlzdGljcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTU6NTc6MjMuMzU0OTk0NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5NjY4NTY4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyMy4zNTUwMTcxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMDg4OTc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwZDBmZWNkYTdjNGQwMzQ4ZGI0ZmFmNzRlZjQ1NTJlOGIyNjQ4MmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNTo1NzoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jXFxuaW5kZXggZDU0OTk1YjdhZGIyNy4uZWQ3MDQ1YTJhMzgwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jXFxuQEAgLTEwNzEsNiArMTA3MSwyMCBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0W0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfUE5fRVJSX0ZMQUdfU0VUXSA9IFxcXCJQTiBlcnJcXFwiLFxcbiBcXHRcXHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXFxcIkRlc2MgYmxvY2tlZFxcXCJ9O1xcbiBcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yeF9kcm9wW1dCTV9FUlJfRFJPUF9NQVhdID0ge1xcbitcXHRcXHRbV0JNX0VSUl9HRVRfU1dfREVTQ10gPSBcXFwiU1cgZGVzYyBlcnJvclxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RFU0NfUEFSU0VdID0gXFxcIkRlc2MgcGFyc2UgZXJyb3JcXFwiLFxcbitcXHRcXHRbV0JNX0VSUl9EUk9QX0lOVl9IV19JRF0gPSBcXFwiSW52YWxpZCBodyBpZFxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUF0gPSBcXFwiTnVsbCBQYXJ0bmVyIGRwXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFBdID0gXFxcIlByb2Nlc3MgTnVsbCBQYXJ0bmVyIGRwXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BERVZdID0gXFxcIk51bGwgUGRldlxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfTlVMTF9BUl0gPSBcXFwiTnVsbCBhclxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkddID0gXFxcIkNBQyBSdW5uaW5nXFxcIixcXG4rXFx0XFx0W1dCTV9FUlJfRFJPUF9TR10gPSBcXFwiU2NhdHRlciBHYXRoZXJcXFwiLFxcbitcXHRcXHRbV0JNX0VSUl9EUk9QX0lOVl9OV0lGSV9IRFJdID0gXFxcIkludmFsaWQgTldpZmkgSGRyIGxlblxcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdICA9IFxcXCJSRU8gR2VuZXJpY1xcXCIsXFxuK1xcdFxcdFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10gPSBcXFwiUlhETUEgR2VuZXJpY1xcXCJ9O1xcbitcXG4gXFx0c3RhdGljIGNvbnN0IGNoYXIgKndibV9yZWxfc3JjW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXSA9IHtcXG4gXFx0XFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfVFFNXSA9IFxcXCJUUU1cXFwiLFxcbiBcXHRcXHRbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9SWERNQV0gPSBcXFwiUnhkbWFcXFwiLFxcbkBAIC0xMDk1LDEzICsxMTA5LDMyIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWDsgaSsrKVxcbiBcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIiVzOiAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IHJ4ZG1hX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2VyeGRtYV9lcnJvcltpXSk7XFxuK1xcdFxcdFxcdFxcdCByeGRtYV9lcnJbaV0sIGRldmljZV9zdGF0cy1cXHUwMDNld2JtX2Vyci5yeGRtYV9lcnJvcltpXSk7XFxuIFxcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuUkVPIGVycm9yczpcXFxcblxcXCIpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYOyBpKyspXFxuIFxcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwiJXM6ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcmVvX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2VyZW9fZXJyb3JbaV0pO1xcbitcXHRcXHRcXHRcXHQgcmVvX2VycltpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V3Ym1fZXJyLnJlb19lcnJvcltpXSk7XFxuK1xcbitcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuV0JNIFJ4IERyb3AgQ291bnQ6XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFdCTV9FUlJfRFJPUF9NQVg7IGkrKylcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCIlczogJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V3Ym1fZXJyLmRyb3BbaV0pO1xcbitcXG4rXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXFxuK1xcdFxcdFxcdCBcXFwiXFxcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGRldmljZV9zdGF0cy1cXHUwMDNld2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTtcXG4rXFxuK1xcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwiXFxcXG5SRU8gc2VudCB0byBzdGFja1xcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYOyBpKyspIHtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJyaW5nJWQ6XFxcIiwgaSk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhYi1cXHUwMDNlYWctXFx1MDAzZW51bV9kZXZpY2VzOyBqKyspXFxuK1xcdFxcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlxcXFx0JWQ6JXVcXFwiLCBqLFxcbitcXHRcXHRcXHRcXHRcXHQgZGV2aWNlX3N0YXRzLVxcdTAwM2VzZW50X3RvX3N0YWNrW2ldW2pdKTtcXG4rXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJcXFxcblxcXCIpO1xcbitcXHR9XFxuIFxcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuSEFMIFJFTyBlcnJvcnM6XFxcXG5cXFwiKTtcXG4gXFxuQEAgLTExMTcsNiArMTE1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJyaW5nJWQ6ICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgaSwgZGV2aWNlX3N0YXRzLVxcdTAwM2V0eF9lcnIuZGVzY19uYVtpXSk7XFxuIFxcbitcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlxcXFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfSFdfTUFYX1FVRVVFUzsgaSsrKVxcbitcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcInBvb2wlZDogJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpLCBkZXZpY2Vfc3RhdHMtXFx1MDAzZXR4X2Vyci50eGJ1Zl9uYVtpXSk7XFxuK1xcbiBcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcXG4gXFx0XFx0XFx0IFxcXCJcXFxcbk1pc2MgVHJhbnNtaXQgRmFpbHVyZXM6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgYXRvbWljX3JlYWQoXFx1MDAyNmRldmljZV9zdGF0cy1cXHUwMDNldHhfZXJyLm1pc2NfZmFpbCkpO1xcbkBAIC0xMTgxLDcgKzEyMTksNyBAQCBzdGF0aWMgc3NpemVfdCBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFxcXCJcXFxcblJFTyBSeCBSZWNlaXZlZDpcXFxcblxcXCIpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERQX1JFT19EU1RfUklOR19NQVg7IGkrKykge1xcbi1cXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXFxcIlJpbmclZDpcXFwiLCBpICsgMSk7XFxuK1xcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcXFwicmluZyVkOlxcXCIsIGkpO1xcbiBcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFiLVxcdTAwM2VhZy1cXHUwMDNlbnVtX2RldmljZXM7IGorKykge1xcbiBcXHRcXHRcXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcXG5AQCAtMTIxNSw4ICsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdFxcbithdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbit7XFxuK1xcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gYXRoMTJrX2FiX3RvX2RwKGFiKTtcXG4rXFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFxcdTAwMjZkcC1cXHUwMDNlZGV2aWNlX3N0YXRzO1xcbitcXHRjaGFyIGJ1ZlsyMF0gPSB7fTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlPSBzaXplb2YoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSBjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBjb3VudCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0LyogZHJvcCB0aGUgcG9zc2libGUgJ1xcXFxuJyBmcm9tIHRoZSBlbmQgKi9cXG4rXFx0aWYgKGNvdW50IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBidWZbY291bnQgLSAxXSA9PSAnXFxcXG4nKVxcbitcXHRcXHRidWZbY291bnQgLSAxXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRpZiAoIXN0cmNtcChidWYsIFxcXCJyZXNldFxcXCIpKSB7XFxuK1xcdFxcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJ1bnN1cHBvcnRlZCBjb21tYW5kOiAlc1xcXFxuXFxcIiwgYnVmKTtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RldmljZV9kcF9zdGF0cyA9IHtcXG4gXFx0LnJlYWQgPSBhdGgxMmtfZGVidWdmc19kdW1wX2RldmljZV9kcF9zdGF0cyxcXG4rXFx0LndyaXRlID0gYXRoMTJrX2RlYnVnZnNfd3JpdGVfZGV2aWNlX2RwX3N0YXRzLFxcbiBcXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbiBcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gXFx0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxcbkBAIC0xMjI3LDcgKzEyOTgsNyBAQCB2b2lkIGF0aDEya19kZWJ1Z2ZzX3BkZXZfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNpbXVsYXRlX2Z3X2NyYXNoXFxcIiwgMDYwMCwgYWItXFx1MDAzZWRlYnVnZnNfc29jLCBhYixcXG4gXFx0XFx0XFx0ICAgIFxcdTAwMjZmb3BzX3NpbXVsYXRlX2Z3X2NyYXNoKTtcXG4gXFxuLVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImRldmljZV9kcF9zdGF0c1xcXCIsIDA0MDAsIGFiLVxcdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXFxuK1xcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImRldmljZV9kcF9zdGF0c1xcXCIsIDA2MDAsIGFiLVxcdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19kZXZpY2VfZHBfc3RhdHMpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcXG5pbmRleCBiZWYwZjJiYTA1NjBmLi4yODlhZWRlNmRhYmI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxcbkBAIC03LDYgKzcsNyBAQFxcbiAjaWZuZGVmIEFUSDEyS19EUF9IXFxuICNkZWZpbmUgQVRIMTJLX0RQX0hcXG4gXFxuKyNpbmNsdWRlIFxcXCJkcF9zdGF0cy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImRwX2h0dC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZHBfY21uLmhcXFwiXFxuQEAgLTQyOSwxOSArNDMwLDI3IEBAIHN0cnVjdCBhdGgxMmtfZHBfYXJjaF9vcHMge1xcbiBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF90eF9lcnJfc3RhdHMge1xcbiBcXHQvKiBUQ0wgUmluZyBEZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovXFxuIFxcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xcbitcXHQvKiBUWCBkZXNjcmlwdG9yIHBvb2wgZXhoYXVzdGVkIChwZXIgcG9vbF9pZCAvIHRyYWZmaWMgY2xhc3MpICovXFxuK1xcdHUzMiB0eGJ1Zl9uYVtBVEgxMktfSFdfTUFYX1FVRVVFU107XFxuIFxcdC8qIE90aGVyIGZhaWx1cmVzIGR1cmluZyBkcF90eCBkdWUgdG8gbWVtIGFsbG9jYXRpb24gZmFpbHVyZVxcbiBcXHQgKiBpZHIgdW5hdmFpbGFibGUgZXRjLlxcbiBcXHQgKi9cXG4gXFx0YXRvbWljX3QgbWlzY19mYWlsO1xcbiB9O1xcbiBcXG4rc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XFxuK1xcdHUzMiByeGRtYV9lcnJvcltIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVhdO1xcbitcXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcXG4rXFx0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XFxuK1xcdHUzMiBzd19kZXNjX2ZhbGxiYWNrO1xcbit9O1xcbitcXG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMge1xcbiBcXHR1MzIgZXJyX3JpbmdfcGt0cztcXG4gXFx0dTMyIGludmFsaWRfcmJtO1xcbi1cXHR1MzIgcnhkbWFfZXJyb3JbSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYXTtcXG4tXFx0dTMyIHJlb19lcnJvcltIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWF07XFxuIFxcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF90eF9lcnJfc3RhdHMgdHhfZXJyO1xcbitcXHRzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9yeF93Ym1fZXJyX3N0YXRzIHdibV9lcnI7XFxuIFxcdHUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcXG4gXFx0dTMyIHJ4X3dibV9yZWxfc291cmNlW0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdO1xcbiBcXHR1MzIgdHFtX3JlbF9yZWFzb25bTUFYX1RRTV9SRUxFQVNFX1JFQVNPTl07XFxuQEAgLTQ1MCw2ICs0NTksNyBAQCBzdHJ1Y3QgYXRoMTJrX2RldmljZV9kcF9zdGF0cyB7XFxuIFxcdHUzMiB0eF9lbnF1ZXVlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcXG4gXFx0dTMyIHR4X2NvbXBsZXRlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcXG4gXFx0dTMyIHJlb19leGNlcF9tc2R1X2J1Zl90eXBlO1xcbitcXHR1MzIgc2VudF90b19zdGFja1tEUF9SRU9fRFNUX1JJTkdfTUFYXVtBVEgxMktfTUFYX0RFVklDRVNdO1xcbiB9O1xcbiBcXG4gc3RydWN0IGF0aDEya19kcCB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfc3RhdHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDRkMzg5MmFjZmYzMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcXG5AQCAtMCwwICsxLDI1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBBVEgxMktfRFBfU1RBVFNfSFxcbisjZGVmaW5lIEFUSDEyS19EUF9TVEFUU19IXFxuK1xcbitlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIHtcXG4rXFx0V0JNX0VSUl9HRVRfU1dfREVTQyxcXG4rXFx0V0JNX0VSUl9ERVNDX1BBUlNFLFxcbitcXHRXQk1fRVJSX0RST1BfSU5WX0hXX0lELFxcbitcXHRXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCxcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfUFJPQ19EUCxcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfUERFVixcXG4rXFx0V0JNX0VSUl9EUk9QX05VTExfQVIsXFxuK1xcdFdCTV9FUlJfRFJPUF9DQUNfUlVOTklORyxcXG4rXFx0V0JNX0VSUl9EUk9QX1NHLFxcbitcXHRXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUixcXG4rXFx0V0JNX0VSUl9EUk9QX1JFT19HRU5FUklDLFxcbitcXHRXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQyxcXG4rXFx0V0JNX0VSUl9EUk9QX01BWCxcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBBVEgxMktfRFBfU1RBVFNfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG5pbmRleCA5NWQ4N2RkNjc4NzJmLi5kOTZkODMwMTU2NWNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbkBAIC0xMiw2ICsxMiwxNSBAQFxcbiAjaW5jbHVkZSBcXFwiaGFsX3djbjc4NTAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhhbF9xY2MyMDcyLmhcXFwiXFxuIFxcbitzdGF0aWMgdm9pZFxcbithdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICptc2R1LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBhdGgxMmtfd2JtX2Vycl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbilcXG4re1xcbitcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtkcm9wX3JlYXNvbl0rKztcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1MTYgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9wZWVyX2lkKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGVudW0gYXRoMTJrX3BlZXJfbWV0YWRhdGFfdmVyc2lvbiB2ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgX19sZTMyIHBlZXJfbWV0YWRhdGEpXFxuQEAgLTY0Miw3ICs2NTEsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3NfcmVjZWl2ZWRfcGFja2V0cyhzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuLVxcbitcXHRcXHRpZiAobGlrZWx5KHJpbmdfaWQgXFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYKSlcXG4rXFx0XFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5zZW50X3RvX3N0YWNrW3JpbmdfaWRdW3BhcnRuZXJfZHAtXFx1MDAzZWRldmljZV9pZF0rKztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcdFxcdGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoZHBfcGRldiwgbmFwaSwgbXNkdSwgXFx1MDAyNnJ4X2luZm8pO1xcbiBcXHR9XFxuIFxcbkBAIC0xNjE0LDYgKzE2MjYsNyBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4gXFx0XFx0LyogRmlyc3QgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciwgc28gZGVkdWN0IGl0J3MgbGVuZ3RoICovXFxuIFxcdFxcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XFxuIFxcdFxcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1NHXSsrO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtMTY0OSw4ICsxNjYyLDEwIEBAIHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2hfbnVsbF9xX2Rlc2Moc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRcXHRza2JfcHV0KG1zZHUsIGhhbF9yeF9kZXNjX3N6ICsgbDNwYWRfYnl0ZXMgKyBtc2R1X2xlbik7XFxuIFxcdFxcdHNrYl9wdWxsKG1zZHUsIGhhbF9yeF9kZXNjX3N6ICsgbDNwYWRfYnl0ZXMpO1xcbiBcXHR9XFxuLVxcdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSlcXG4rXFx0aWYgKHVubGlrZWx5KCFhdGgxMmtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChkcCwgbXNkdSwgcnhfaW5mbykpKSB7XFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSsrO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0YXRoMTJrX2RwX3J4X2hfcHBkdShkcF9wZGV2LCByeF9pbmZvKTtcXG4gXFx0cmV0ID0gYXRoMTJrX3dpZmk3X2RwX3J4X2hfbXBkdShkcF9wZGV2LCBtc2R1LCByeF9pbmZvKTtcXG5AQCAtMTc2Myw3ICsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdGJvb2wgZHJvcCA9IGZhbHNlO1xcbiBcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yeGRtYV9lcnJvcltyeGNiLVxcdTAwM2VlcnJfY29kZV0rKztcXG4rXFx0aWYgKGxpa2VseShyeGNiLVxcdTAwM2VlcnJfY29kZSBcXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yeGRtYV9lcnJvcltyeGNiLVxcdTAwM2VlcnJfY29kZV0rKztcXG4rXFx0ZWxzZVxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ4Y2ItXFx1MDAzZWVycl9jb2RlKSB7XFxuIFxcdGNhc2UgSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfVU5BVVRIX1dEU19FUlI6XFxuQEAgLTE3ODAsNiArMTc5OCw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3J4ZG1hX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdFxcdC8qIFRPRE86IFJldmlldyBvdGhlciByeGRtYSBlcnJvciBjb2RlIHRvIGNoZWNrIGlmIGFueXRoaW5nIGlzXFxuIFxcdFxcdCAqIHdvcnRoIHJlcG9ydGluZyB0byBtYWM4MDIxMVxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdKys7XFxuIFxcdFxcdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0xNzk2LDcgKzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdGJvb2wgZHJvcCA9IGZhbHNlO1xcbiBcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbcnhjYi1cXHUwMDNlZXJyX2NvZGVdKys7XFxuK1xcdGlmIChsaWtlbHkocnhjYi1cXHUwMDNlZXJyX2NvZGUgXFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbcnhjYi1cXHUwMDNlZXJyX2NvZGVdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4gXFx0c3dpdGNoIChyeGNiLVxcdTAwM2VlcnJfY29kZSkge1xcbiBcXHRjYXNlIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfREVTQ19BRERSX1pFUk86XFxuQEAgLTE4MTMsNiArMTgzNSw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3Jlb19lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRcXHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgZXJyb3JzIGFuZCBwcm9jZXNzIHRoZW0gdG8gbWFjODAyMTFcXG4gXFx0XFx0ICogYXMgYXBwcm9wcmlhdGUuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfUkVPX0dFTkVSSUNdKys7XFxuIFxcdFxcdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC0xOTM1LDYgKzE5NTgsNyBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFx0XFx0cmV0ID0gYXRoMTJrX3dpZmk3X2hhbF93Ym1fZGVzY19wYXJzZV9lcnIoZHAsIHJ4X2Rlc2MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmVycl9pbmZvKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RFU0NfUEFSU0VdKys7XFxuIFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgcmV0KTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE5NDQsOCArMTk2OCwxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3Byb2Nlc3Nfd2JtX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4gXFxuIFxcdFxcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xcbiBcXHRcXHRpZiAoIWRlc2NfaW5mbykge1xcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuc3dfZGVzY19mYWxsYmFjaysrO1xcbiBcXHRcXHRcXHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XFxuIFxcdFxcdFxcdGlmICghZGVzY19pbmZvKSB7XFxuK1xcdFxcdFxcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfR0VUX1NXX0RFU0NdKys7XFxuIFxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiSW52YWxpZCBjb29raWUgaW4gRFAgV0JNIHJ4IGVycm9yIGRlc2NyaXB0b3IgcmV0cmlldmFsOiAweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgZXJyX2luZm8uY29va2llKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTE5NjEsNyArMTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXFx1MDAzZWRldmljZV9pZDtcXG4gXFx0XFx0cGFydG5lcl9kcCA9IGF0aDEya19kcF9od19ncnBfdG9fZHAoZHBfaHdfZ3JwLCBkZXZpY2VfaWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhcnRuZXJfZHApKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xcbitcXHRcXHRcXHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQKTtcXG4gXFxuIFxcdFxcdFxcdC8qIEluIGFueSBjYXNlIGNvbnRpbnVhdGlvbiBiaXQgaXMgc2V0XFxuIFxcdFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcXG5AQCAtMjAwNyw3ICsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcdFxcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cXHUwMDNlaGFsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXNkdV9kYXRhKTtcXG4gXFx0XFx0aWYgKGh3X2xpbmtfaWQgXFx1MDAzZT0gQVRIMTJLX0dST1VQX01BWF9SQURJTykge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfSU5WX0hXX0lEKTtcXG4gXFxuIFxcdFxcdFxcdC8qIEluIGFueSBjYXNlIGNvbnRpbnVhdGlvbiBiaXQgaXMgc2V0XFxuIFxcdFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyByZWNvcmQsIGNsZWFudXAgc2NhdHRlcl9tc2R1X2xpc3RcXG5AQCAtMjA2OCw3ICsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfREFUQSxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIlVuYWJsZSB0byBwcm9jZXNzIFdCTSBlcnJvciBtc2R1IGR1ZSB0byBpbnZhbGlkIGh3IGxpbmsgaWQgJWQgZGV2aWNlIGlkICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICBod19saW5rX2lkLCBkZXZpY2VfaWQpO1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIwNzcsMTggKzIxMDYsMjEgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuIFxcbiBcXHRcXHRkcF9wZGV2ID0gYXRoMTJrX2RwX3RvX3BkZXZfZHAocGFydG5lcl9kcCwgcGRldl9pZHgpO1xcbiBcXHRcXHRpZiAoIWRwX3BkZXYpIHtcXG4tXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XFxuK1xcdFxcdFxcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgV0JNX0VSUl9EUk9QX05VTExfUERFVik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7XFxuIFxcbiBcXHRcXHRpZiAoIWFyIHx8ICFyY3VfZGVyZWZlcmVuY2UoYXItXFx1MDAzZWFiLVxcdTAwM2VwZGV2c19hY3RpdmVbcGRldl9pZHhdKSkge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9BUik7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFxcdTAwMjZhci1cXHUwMDNlZGV2X2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcXG4rXFx0XFx0XFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXFxuaW5kZXggNTg3ZDU4ZWVjY2ZhNS4uZjU3MmFhNTgxZDExNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcXG5AQCAtMTY3LDggKzE2NywxMCBAQCBpbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYVxcbiBcXHR0eF9yaW5nID0gXFx1MDAyNmRwLVxcdTAwM2V0eF9yaW5nW3RpLnJpbmdfaWRdO1xcbiBcXG4gXFx0dHhfZGVzYyA9IGF0aDEya19kcF90eF9hc3NpZ25fYnVmZmVyKGRwLCBwb29sX2lkKTtcXG4tXFx0aWYgKCF0eF9kZXNjKVxcbitcXHRpZiAoIXR4X2Rlc2MpIHtcXG4rXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50eF9lcnIudHhidWZfbmFbcG9vbF9pZF0rKztcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdGRwX2xpbmtfdmlmID0gYXRoMTJrX2RwX3ZpZl90b19kcF9saW5rX3ZpZihcXHUwMDI2YWh2aWYtXFx1MDAzZWRwX3ZpZiwgYXJ2aWYtXFx1MDAzZWxpbmtfaWQpO1xcbiBcXG5AQCAtNTc1LDE4ICs1NzcsMjEgQEAgYXRoMTJrX2RwX3R4X3Byb2Nlc3NfaHR0X3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCB2b2lkICpkZXNjLFxcbiB7XFxuIFxcdHN0cnVjdCBodHRfdHhfd2JtX2NvbXBsZXRpb24gKnN0YXR1c19kZXNjO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2h0dF93Ym1fdHhfc3RhdHVzIHRzID0ge307XFxuLVxcdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcXG4rXFx0ZW51bSBoYWxfd2JtX2h0dF90eF9jb21wX3N0YXR1cyBodHRfc3RhdHVzO1xcbiBcXHR1MTYgcGVlcl9pZDtcXG4gXFxuIFxcdHN0YXR1c19kZXNjID0gZGVzYztcXG4gXFxuLVxcdHdibV9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHN0YXR1c19kZXNjLVxcdTAwM2VpbmZvMCxcXG4rXFx0aHR0X3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXFx1MDAzZWluZm8wLFxcbiBcXHRcXHRcXHRcXHQgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzBfU1RBVFVTKTtcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5md190eF9zdGF0dXNbd2JtX3N0YXR1c10rKztcXG4rXFx0aWYgKGxpa2VseShodHRfc3RhdHVzIFxcdTAwM2MgTUFYX0ZXX1RYX1NUQVRVUykpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMuZndfdHhfc3RhdHVzW2h0dF9zdGF0dXNdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4tXFx0c3dpdGNoICh3Ym1fc3RhdHVzKSB7XFxuK1xcdHN3aXRjaCAoaHR0X3N0YXR1cykge1xcbiBcXHRjYXNlIEhBTF9XQk1fUkVMX0hUVF9UWF9DT01QX1NUQVRVU19PSzpcXG4tXFx0XFx0dHMuYWNrZWQgPSAod2JtX3N0YXR1cyA9PSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0spO1xcbitcXHRcXHR0cy5hY2tlZCA9IHRydWU7XFxuIFxcdFxcdHRzLmFja19yc3NpID0gbGUzMl9nZXRfYml0cyhzdGF0dXNfZGVzYy1cXHUwMDNlaW5mbzIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xcbiBcXG5AQCAtNjA4LDcgKzYxMyw3IEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRhdGgxMmtfd2FybihkcC1cXHUwMDNlYWIsIFxcXCJVbmtub3duIGh0dCB3Ym0gdHggc3RhdHVzICVkXFxcXG5cXFwiLCB3Ym1fc3RhdHVzKTtcXG4rXFx0XFx0YXRoMTJrX3dhcm4oZHAtXFx1MDAzZWFiLCBcXFwiVW5rbm93biBodHQgdHggc3RhdHVzICVkXFxcXG5cXFwiLCBodHRfc3RhdHVzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gfVxcbkBAIC05ODQsMTEgKzk4OSwxNyBAQCB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxcbiBcXHRcXHQvKiBGaW5kIHRoZSBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUgdmFsdWUgKi9cXG4gXFx0XFx0YnVmX3JlbF9zb3VyY2UgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBIQUxfV0JNX1JFTEVBU0VfSU5GTzBfUkVMX1NSQ19NT0RVTEUpO1xcbi1cXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xcbitcXHRcXHRpZiAobGlrZWx5KGJ1Zl9yZWxfc291cmNlIFxcdTAwM2MgSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVgpKVxcbitcXHRcXHRcXHRkcC1cXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFxuIFxcdFxcdHJlbF9zdGF0dXMgPSBsZTMyX2dldF9iaXRzKHR4X3N0YXR1cy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcXG4tXFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSsrO1xcbitcXHRcXHRpZiAobGlrZWx5KHJlbF9zdGF0dXMgXFx1MDAzYyBNQVhfVFFNX1JFTEVBU0VfUkVBU09OKSlcXG4rXFx0XFx0XFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy50cW1fcmVsX3JlYXNvbltyZWxfc3RhdHVzXSsrO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4gXFxuIFxcdFxcdC8qIFJlbGVhc2UgZGVzY3JpcHRvciBhcyBzb29uIGFzIGV4dHJhY3RpbmcgbmVjZXNzYXJ5IGluZm9cXG4gXFx0XFx0ICogdG8gcmVkdWNlIGNvbnRlbnRpb25cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcXG5pbmRleCA0OWM2OTMyODk3MDk0Li42MGU3YTM2MDk3ZjEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jXFxuQEAgLTMyOSw3ICszMjksMTAgQEAgaW50IGF0aDEya193aWZpN19oYWxfZGVzY19yZW9fcGFyc2VfZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbiBcXHRcXHRcXHRcXHQgICAgSEFMX1JFT19ERVNUX1JJTkdfSU5GTzBfUFVTSF9SRUFTT04pO1xcbiBcXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cXHUwMDNlaW5mbzAsXFxuIFxcdFxcdFxcdFxcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcXG4tXFx0ZHAtXFx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XFxuK1xcdGlmIChsaWtlbHkoZXJyX2NvZGUgXFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXFxuK1xcdFxcdGRwLVxcdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiBcXG4gXFx0aWYgKHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX0VSUl9ERVRFQ1RFRCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcHVzaF9yZWFzb24gIT0gSEFMX1JFT19ERVNUX1JJTkdfUFVTSF9SRUFTT05fUk9VVElOR19JTlNUUlVDVElPTikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyNC43NjY5Njk4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3Mjc1NTQ4NzQwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBvciBBSEIgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZGVidWdmcyBzdGF0aXN0aWNzIGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIHRob3NlIHN0YXRpc3RpY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MGQwZmVjZGE3YzRkMDM0OGRiNGZhZjc0ZWY0NTUyZThiMjY0ODJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNTo1NzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbmluZGV4IGQ1NDk5NWI3YWRiMjcuLmVkNzA0NWEyYTM4MDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RlYnVnZnMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kZWJ1Z2ZzLmNcbkBAIC0xMDcxLDYgKzEwNzEsMjAgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFtIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX1BOX0VSUl9GTEFHX1NFVF0gPSBcIlBOIGVyclwiLFxuIFx0XHRbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9ERVNDX0JMT0NLRURdID0gXCJEZXNjIGJsb2NrZWRcIn07XG4gXG4rXHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3J4X2Ryb3BbV0JNX0VSUl9EUk9QX01BWF0gPSB7XG4rXHRcdFtXQk1fRVJSX0dFVF9TV19ERVNDXSA9IFwiU1cgZGVzYyBlcnJvclwiLFxuK1x0XHRbV0JNX0VSUl9ERVNDX1BBUlNFXSA9IFwiRGVzYyBwYXJzZSBlcnJvclwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX0lOVl9IV19JRF0gPSBcIkludmFsaWQgaHcgaWRcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BSVE5SX0RQXSA9IFwiTnVsbCBQYXJ0bmVyIGRwXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQXSA9IFwiUHJvY2VzcyBOdWxsIFBhcnRuZXIgZHBcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX1BERVZdID0gXCJOdWxsIFBkZXZcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9OVUxMX0FSXSA9IFwiTnVsbCBhclwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX0NBQ19SVU5OSU5HXSA9IFwiQ0FDIFJ1bm5pbmdcIixcbitcdFx0W1dCTV9FUlJfRFJPUF9TR10gPSBcIlNjYXR0ZXIgR2F0aGVyXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUl0gPSBcIkludmFsaWQgTldpZmkgSGRyIGxlblwiLFxuK1x0XHRbV0JNX0VSUl9EUk9QX1JFT19HRU5FUklDXSAgPSBcIlJFTyBHZW5lcmljXCIsXG4rXHRcdFtXQk1fRVJSX0RST1BfUlhETUFfR0VORVJJQ10gPSBcIlJYRE1BIEdlbmVyaWNcIn07XG4rXG4gXHRzdGF0aWMgY29uc3QgY2hhciAqd2JtX3JlbF9zcmNbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9NQVhdID0ge1xuIFx0XHRbSEFMX1dCTV9SRUxfU1JDX01PRFVMRV9UUU1dID0gXCJUUU1cIixcbiBcdFx0W0hBTF9XQk1fUkVMX1NSQ19NT0RVTEVfUlhETUFdID0gXCJSeGRtYVwiLFxuQEAgLTEwOTUsMTMgKzExMDksMzIgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVg7IGkrKylcbiBcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiJXM6ICV1XFxuXCIsXG4tXHRcdFx0XHQgcnhkbWFfZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcnhkbWFfZXJyb3JbaV0pO1xuK1x0XHRcdFx0IHJ4ZG1hX2VycltpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIucnhkbWFfZXJyb3JbaV0pO1xuIFxuIFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuUkVPIGVycm9yczpcXG5cIik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWDsgaSsrKVxuIFx0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCIlczogJXVcXG5cIixcbi1cdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNlcmVvX2Vycm9yW2ldKTtcbitcdFx0XHRcdCByZW9fZXJyW2ldLCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5yZW9fZXJyb3JbaV0pO1xuK1xuK1x0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuV0JNIFJ4IERyb3AgQ291bnQ6XFxuXCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgV0JNX0VSUl9EUk9QX01BWDsgaSsrKVxuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCIlczogJXVcXG5cIixcbitcdFx0XHRcdCB3Ym1fcnhfZHJvcFtpXSwgZGV2aWNlX3N0YXRzLVx1MDAzZXdibV9lcnIuZHJvcFtpXSk7XG4rXG4rXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbixcbitcdFx0XHQgXCJcXG5XQk0gU1cgZGVzYyBmYWxsYmFjayAoSFcgQ0Mgbm90IGRvbmUpOiAldVxcblwiLFxuK1x0XHRcdCBkZXZpY2Vfc3RhdHMtXHUwMDNld2JtX2Vyci5zd19kZXNjX2ZhbGxiYWNrKTtcbitcbitcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcblJFTyBzZW50IHRvIHN0YWNrXFxuXCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSsrKSB7XG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInJpbmclZDpcIiwgaSk7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFiLVx1MDAzZWFnLVx1MDAzZW51bV9kZXZpY2VzOyBqKyspXG4rXHRcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXG4rXHRcdFx0XHRcdCBcIlxcdCVkOiV1XCIsIGosXG4rXHRcdFx0XHRcdCBkZXZpY2Vfc3RhdHMtXHUwMDNlc2VudF90b19zdGFja1tpXVtqXSk7XG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcblwiKTtcbitcdH1cbiBcbiBcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlxcbkhBTCBSRU8gZXJyb3JzOlxcblwiKTtcbiBcbkBAIC0xMTE3LDYgKzExNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInJpbmclZDogJXVcXG5cIixcbiBcdFx0XHRcdCBpLCBkZXZpY2Vfc3RhdHMtXHUwMDNldHhfZXJyLmRlc2NfbmFbaV0pO1xuIFxuK1x0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sIFwiXFxuVFggRGVzY3JpcHRvciBQb29sIEFsbG9jIEZhaWx1cmVzOlxcblwiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDEyS19IV19NQVhfUVVFVUVTOyBpKyspXG4rXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcInBvb2wlZDogJXVcXG5cIixcbitcdFx0XHRcdCBpLCBkZXZpY2Vfc3RhdHMtXHUwMDNldHhfZXJyLnR4YnVmX25hW2ldKTtcbitcbiBcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLFxuIFx0XHRcdCBcIlxcbk1pc2MgVHJhbnNtaXQgRmFpbHVyZXM6ICVkXFxuXCIsXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmRldmljZV9zdGF0cy1cdTAwM2V0eF9lcnIubWlzY19mYWlsKSk7XG5AQCAtMTE4MSw3ICsxMjE5LDcgQEAgc3RhdGljIHNzaXplX3QgYXRoMTJrX2RlYnVnZnNfZHVtcF9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCJcXG5SRU8gUnggUmVjZWl2ZWQ6XFxuXCIpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgRFBfUkVPX0RTVF9SSU5HX01BWDsgaSsrKSB7XG4tXHRcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCBcIlJpbmclZDpcIiwgaSArIDEpO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgXCJyaW5nJWQ6XCIsIGkpO1xuIFxuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhYi1cdTAwM2VhZy1cdTAwM2VudW1fZGV2aWNlczsgaisrKSB7XG4gXHRcdFx0bGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sXG5AQCAtMTIxNSw4ICsxMjUzLDQxIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3RcbithdGgxMmtfZGVidWdmc193cml0ZV9kZXZpY2VfZHBfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZixcbitcdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4re1xuK1x0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IGF0aDEya19kcCAqZHAgPSBhdGgxMmtfYWJfdG9fZHAoYWIpO1xuK1x0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMgKmRldmljZV9zdGF0cyA9IFx1MDAyNmRwLVx1MDAzZWRldmljZV9zdGF0cztcbitcdGNoYXIgYnVmWzIwXSA9IHt9O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChjb3VudCBcdTAwM2U9IHNpemVvZihidWYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0LyogZHJvcCB0aGUgcG9zc2libGUgJ1xcbicgZnJvbSB0aGUgZW5kICovXG4rXHRpZiAoY291bnQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGJ1Zltjb3VudCAtIDFdID09ICdcXG4nKVxuK1x0XHRidWZbY291bnQgLSAxXSA9ICdcXDAnO1xuK1xuK1x0aWYgKCFzdHJjbXAoYnVmLCBcInJlc2V0XCIpKSB7XG4rXHRcdG1lbXNldChkZXZpY2Vfc3RhdHMsIDAsIHNpemVvZigqZGV2aWNlX3N0YXRzKSk7XG4rXHRcdHJldHVybiBjb3VudDtcbitcdH1cbitcbitcdGF0aDEya193YXJuKGFiLCBcInVuc3VwcG9ydGVkIGNvbW1hbmQ6ICVzXFxuXCIsIGJ1Zik7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19kZXZpY2VfZHBfc3RhdHMgPSB7XG4gXHQucmVhZCA9IGF0aDEya19kZWJ1Z2ZzX2R1bXBfZGV2aWNlX2RwX3N0YXRzLFxuK1x0LndyaXRlID0gYXRoMTJrX2RlYnVnZnNfd3JpdGVfZGV2aWNlX2RwX3N0YXRzLFxuIFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0Lmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLFxuQEAgLTEyMjcsNyArMTI5OCw3IEBAIHZvaWQgYXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaW11bGF0ZV9md19jcmFzaFwiLCAwNjAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfc2ltdWxhdGVfZndfY3Jhc2gpO1xuIFxuLVx0ZGVidWdmc19jcmVhdGVfZmlsZShcImRldmljZV9kcF9zdGF0c1wiLCAwNDAwLCBhYi1cdTAwM2VkZWJ1Z2ZzX3NvYywgYWIsXG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGV2aWNlX2RwX3N0YXRzXCIsIDA2MDAsIGFiLVx1MDAzZWRlYnVnZnNfc29jLCBhYixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19kZXZpY2VfZHBfc3RhdHMpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbmluZGV4IGJlZjBmMmJhMDU2MGYuLjI4OWFlZGU2ZGFiYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaFxuQEAgLTcsNiArNyw3IEBAXG4gI2lmbmRlZiBBVEgxMktfRFBfSFxuICNkZWZpbmUgQVRIMTJLX0RQX0hcbiBcbisjaW5jbHVkZSBcImRwX3N0YXRzLmhcIlxuICNpbmNsdWRlIFwiaHcuaFwiXG4gI2luY2x1ZGUgXCJkcF9odHQuaFwiXG4gI2luY2x1ZGUgXCJkcF9jbW4uaFwiXG5AQCAtNDI5LDE5ICs0MzAsMjcgQEAgc3RydWN0IGF0aDEya19kcF9hcmNoX29wcyB7XG4gc3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHtcbiBcdC8qIFRDTCBSaW5nIERlc2NyaXB0b3IgdW5hdmFpbGFibGUgKi9cbiBcdHUzMiBkZXNjX25hW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuK1x0LyogVFggZGVzY3JpcHRvciBwb29sIGV4aGF1c3RlZCAocGVyIHBvb2xfaWQgLyB0cmFmZmljIGNsYXNzKSAqL1xuK1x0dTMyIHR4YnVmX25hW0FUSDEyS19IV19NQVhfUVVFVUVTXTtcbiBcdC8qIE90aGVyIGZhaWx1cmVzIGR1cmluZyBkcF90eCBkdWUgdG8gbWVtIGFsbG9jYXRpb24gZmFpbHVyZVxuIFx0ICogaWRyIHVuYXZhaWxhYmxlIGV0Yy5cbiBcdCAqL1xuIFx0YXRvbWljX3QgbWlzY19mYWlsO1xuIH07XG4gXG4rc3RydWN0IGF0aDEya19kZXZpY2VfZHBfcnhfd2JtX2Vycl9zdGF0cyB7XG4rXHR1MzIgcnhkbWFfZXJyb3JbSEFMX1JFT19FTlRSX1JJTkdfUlhETUFfRUNPREVfTUFYXTtcbitcdHUzMiByZW9fZXJyb3JbSEFMX1JFT19ERVNUX1JJTkdfRVJST1JfQ09ERV9NQVhdO1xuK1x0dTMyIGRyb3BbV0JNX0VSUl9EUk9QX01BWF07XG4rXHR1MzIgc3dfZGVzY19mYWxsYmFjaztcbit9O1xuK1xuIHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3N0YXRzIHtcbiBcdHUzMiBlcnJfcmluZ19wa3RzO1xuIFx0dTMyIGludmFsaWRfcmJtO1xuLVx0dTMyIHJ4ZG1hX2Vycm9yW0hBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWF07XG4tXHR1MzIgcmVvX2Vycm9yW0hBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYXTtcbiBcdHUzMiBoYWxfcmVvX2Vycm9yW0RQX1JFT19EU1RfUklOR19NQVhdO1xuIFx0c3RydWN0IGF0aDEya19kZXZpY2VfZHBfdHhfZXJyX3N0YXRzIHR4X2VycjtcbitcdHN0cnVjdCBhdGgxMmtfZGV2aWNlX2RwX3J4X3dibV9lcnJfc3RhdHMgd2JtX2VycjtcbiBcdHUzMiByZW9fcnhbRFBfUkVPX0RTVF9SSU5HX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcbiBcdHUzMiByeF93Ym1fcmVsX3NvdXJjZVtIQUxfV0JNX1JFTF9TUkNfTU9EVUxFX01BWF1bQVRIMTJLX01BWF9ERVZJQ0VTXTtcbiBcdHUzMiB0cW1fcmVsX3JlYXNvbltNQVhfVFFNX1JFTEVBU0VfUkVBU09OXTtcbkBAIC00NTAsNiArNDU5LDcgQEAgc3RydWN0IGF0aDEya19kZXZpY2VfZHBfc3RhdHMge1xuIFx0dTMyIHR4X2VucXVldWVkW0RQX1RDTF9OVU1fUklOR19NQVhdO1xuIFx0dTMyIHR4X2NvbXBsZXRlZFtEUF9UQ0xfTlVNX1JJTkdfTUFYXTtcbiBcdHUzMiByZW9fZXhjZXBfbXNkdV9idWZfdHlwZTtcbitcdHUzMiBzZW50X3RvX3N0YWNrW0RQX1JFT19EU1RfUklOR19NQVhdW0FUSDEyS19NQVhfREVWSUNFU107XG4gfTtcbiBcbiBzdHJ1Y3QgYXRoMTJrX2RwIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNGQzODkyYWNmZjMyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3N0YXRzLmhcbkBAIC0wLDAgKzEsMjUgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbisgKi9cbitcbisjaWZuZGVmIEFUSDEyS19EUF9TVEFUU19IXG4rI2RlZmluZSBBVEgxMktfRFBfU1RBVFNfSFxuK1xuK2VudW0gYXRoMTJrX3dibV9lcnJfZHJvcF9yZWFzb24ge1xuK1x0V0JNX0VSUl9HRVRfU1dfREVTQyxcbitcdFdCTV9FUlJfREVTQ19QQVJTRSxcbitcdFdCTV9FUlJfRFJPUF9JTlZfSFdfSUQsXG4rXHRXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCxcbitcdFdCTV9FUlJfRFJPUF9OVUxMX1BST0NfRFAsXG4rXHRXQk1fRVJSX0RST1BfTlVMTF9QREVWLFxuK1x0V0JNX0VSUl9EUk9QX05VTExfQVIsXG4rXHRXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcsXG4rXHRXQk1fRVJSX0RST1BfU0csXG4rXHRXQk1fRVJSX0RST1BfSU5WX05XSUZJX0hEUixcbitcdFdCTV9FUlJfRFJPUF9SRU9fR0VORVJJQyxcbitcdFdCTV9FUlJfRFJPUF9SWERNQV9HRU5FUklDLFxuK1x0V0JNX0VSUl9EUk9QX01BWCxcbit9O1xuK1xuKyNlbmRpZiAvKiBBVEgxMktfRFBfU1RBVFNfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uZDk2ZDgzMDE1NjVjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMTIsNiArMTIsMTUgQEBcbiAjaW5jbHVkZSBcImhhbF93Y243ODUwLmhcIlxuICNpbmNsdWRlIFwiaGFsX3FjYzIwNzIuaFwiXG4gXG4rc3RhdGljIHZvaWRcbithdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqbXNkdSxcbitcdFx0XHRcdCAgICBlbnVtIGF0aDEya193Ym1fZXJyX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uKVxuK3tcbitcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbZHJvcF9yZWFzb25dKys7XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbit9XG4rXG4gc3RhdGljIHUxNiBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X3BlZXJfaWQoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0XHRcdCAgZW51bSBhdGgxMmtfcGVlcl9tZXRhZGF0YV92ZXJzaW9uIHZlcixcbiBcdFx0XHRcdFx0ICBfX2xlMzIgcGVlcl9tZXRhZGF0YSlcbkBAIC02NDIsNyArNjUxLDEwIEBAIGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3JlY2VpdmVkX3BhY2tldHMoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cbitcdFx0aWYgKGxpa2VseShyaW5nX2lkIFx1MDAzYyBEUF9SRU9fRFNUX1JJTkdfTUFYKSlcbitcdFx0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMuc2VudF90b19zdGFja1tyaW5nX2lkXVtwYXJ0bmVyX2RwLVx1MDAzZWRldmljZV9pZF0rKztcbitcdFx0ZWxzZVxuK1x0XHRcdFdBUk5fT05fT05DRSgxKTtcbiBcdFx0YXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShkcF9wZGV2LCBuYXBpLCBtc2R1LCBcdTAwMjZyeF9pbmZvKTtcbiBcdH1cbiBcbkBAIC0xNjE0LDYgKzE2MjYsNyBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0LyogRmlyc3QgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciwgc28gZGVkdWN0IGl0J3MgbGVuZ3RoICovXG4gXHRcdG1zZHVfbGVuID0gbXNkdV9sZW4gLSAoRFBfUlhfQlVGRkVSX1NJWkUgLSBoYWxfcnhfZGVzY19zeik7XG4gXHRcdGF0aDEya193aWZpN19kcF9yeF9udWxsX3FfZGVzY19zZ19kcm9wKGRwLCBtc2R1X2xlbiwgbXNkdV9saXN0KTtcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RST1BfU0ddKys7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTE2NDksOCArMTY2MiwxMCBAQCBzdGF0aWMgaW50IGF0aDEya193aWZpN19kcF9yeF9oX251bGxfcV9kZXNjKHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdFx0c2tiX3B1dChtc2R1LCBoYWxfcnhfZGVzY19zeiArIGwzcGFkX2J5dGVzICsgbXNkdV9sZW4pO1xuIFx0XHRza2JfcHVsbChtc2R1LCBoYWxfcnhfZGVzY19zeiArIGwzcGFkX2J5dGVzKTtcbiBcdH1cbi1cdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSlcbitcdGlmICh1bmxpa2VseSghYXRoMTJrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoZHAsIG1zZHUsIHJ4X2luZm8pKSkge1xuK1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9JTlZfTldJRklfSERSXSsrO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdGF0aDEya19kcF9yeF9oX3BwZHUoZHBfcGRldiwgcnhfaW5mbyk7XG4gXHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfaF9tcGR1KGRwX3BkZXYsIG1zZHUsIHJ4X2luZm8pO1xuQEAgLTE3NjMsNyArMTc3OCwxMCBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yeGRtYV9lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcbiBcdGJvb2wgZHJvcCA9IGZhbHNlO1xuIFxuLVx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnJ4ZG1hX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KHJ4Y2ItXHUwMDNlZXJyX2NvZGUgXHUwMDNjIEhBTF9SRU9fRU5UUl9SSU5HX1JYRE1BX0VDT0RFX01BWCkpXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnJ4ZG1hX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9VTkFVVEhfV0RTX0VSUjpcbkBAIC0xNzgwLDYgKzE3OTgsNyBAQCBzdGF0aWMgYm9vbCBhdGgxMmtfd2lmaTdfZHBfcnhfaF9yeGRtYV9lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgcnhkbWEgZXJyb3IgY29kZSB0byBjaGVjayBpZiBhbnl0aGluZyBpc1xuIFx0XHQgKiB3b3J0aCByZXBvcnRpbmcgdG8gbWFjODAyMTFcbiBcdFx0ICovXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9EUk9QX1JYRE1BX0dFTkVSSUNdKys7XG4gXHRcdGRyb3AgPSB0cnVlO1xuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0xNzk2LDcgKzE4MTUsMTAgQEAgc3RhdGljIGJvb2wgYXRoMTJrX3dpZmk3X2RwX3J4X2hfcmVvX2VycihzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiID0gQVRIMTJLX1NLQl9SWENCKG1zZHUpO1xuIFx0Ym9vbCBkcm9wID0gZmFsc2U7XG4gXG4tXHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KHJ4Y2ItXHUwMDNlZXJyX2NvZGUgXHUwMDNjIEhBTF9SRU9fREVTVF9SSU5HX0VSUk9SX0NPREVfTUFYKSlcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIucmVvX2Vycm9yW3J4Y2ItXHUwMDNlZXJyX2NvZGVdKys7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRSgxKTtcbiBcbiBcdHN3aXRjaCAocnhjYi1cdTAwM2VlcnJfY29kZSkge1xuIFx0Y2FzZSBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX0RFU0NfQUREUl9aRVJPOlxuQEAgLTE4MTMsNiArMTgzNSw3IEBAIHN0YXRpYyBib29sIGF0aDEya193aWZpN19kcF9yeF9oX3Jlb19lcnIoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0XHQvKiBUT0RPOiBSZXZpZXcgb3RoZXIgZXJyb3JzIGFuZCBwcm9jZXNzIHRoZW0gdG8gbWFjODAyMTFcbiBcdFx0ICogYXMgYXBwcm9wcmlhdGUuXG4gXHRcdCAqL1xuK1x0XHRkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5kcm9wW1dCTV9FUlJfRFJPUF9SRU9fR0VORVJJQ10rKztcbiBcdFx0ZHJvcCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTE5MzUsNiArMTk1OCw3IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfaGFsX3dibV9kZXNjX3BhcnNlX2VycihkcCwgcnhfZGVzYyxcbiBcdFx0XHRcdFx0XHRcdCAgXHUwMDI2ZXJyX2luZm8pO1xuIFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLndibV9lcnIuZHJvcFtXQk1fRVJSX0RFU0NfUEFSU0VdKys7XG4gXHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwiZmFpbGVkIHRvIHBhcnNlIHJ4IGVycm9yIGluIHdibV9yZWwgcmluZyBkZXNjICVkXFxuXCIsXG4gXHRcdFx0XHQgICAgcmV0KTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xOTQ0LDggKzE5NjgsMTAgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdC8qIHJldHJ5IG1hbnVhbCBkZXNjIHJldHJpZXZhbCBpZiBodyBjYyBpcyBub3QgZG9uZSAqL1xuIFx0XHRpZiAoIWRlc2NfaW5mbykge1xuK1x0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnN3X2Rlc2NfZmFsbGJhY2srKztcbiBcdFx0XHRkZXNjX2luZm8gPSBhdGgxMmtfZHBfZ2V0X3J4X2Rlc2MoZHAsIGVycl9pbmZvLmNvb2tpZSk7XG4gXHRcdFx0aWYgKCFkZXNjX2luZm8pIHtcbitcdFx0XHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLmRyb3BbV0JNX0VSUl9HRVRfU1dfREVTQ10rKztcbiBcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcIkludmFsaWQgY29va2llIGluIERQIFdCTSByeCBlcnJvciBkZXNjcmlwdG9yIHJldHJpZXZhbDogMHgleFxcblwiLFxuIFx0XHRcdFx0XHQgICAgZXJyX2luZm8uY29va2llKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE5NjEsNyArMTk4Nyw4IEBAIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfcHJvY2Vzc193Ym1fZXJyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuIFx0XHRkZXZpY2VfaWQgPSBkZXNjX2luZm8tXHUwMDNlZGV2aWNlX2lkO1xuIFx0XHRwYXJ0bmVyX2RwID0gYXRoMTJrX2RwX2h3X2dycF90b19kcChkcF9od19ncnAsIGRldmljZV9pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFydG5lcl9kcCkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUlROUl9EUCk7XG4gXG4gXHRcdFx0LyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXRcbiBcdFx0XHQgKiBpbiB0aGUgcHJldmlvdXMgcmVjb3JkLCBjbGVhbnVwIHNjYXR0ZXJfbXNkdV9saXN0XG5AQCAtMjAwNyw3ICsyMDM0LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdGh3X2xpbmtfaWQgPSBhdGgxMmtfZHBfcnhfZ2V0X21zZHVfc3JjX2xpbmsocGFydG5lcl9kcC1cdTAwM2VoYWwsXG4gXHRcdFx0XHRcdFx0XHQgICAgbXNkdV9kYXRhKTtcbiBcdFx0aWYgKGh3X2xpbmtfaWQgXHUwMDNlPSBBVEgxMktfR1JPVVBfTUFYX1JBRElPKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7XG4rXHRcdFx0YXRoMTJrX3dpZmk3X2RwX3J4X3dibV9lcnJfZnJlZV9za2IoZHAsIG1zZHUsXG4rXHRcdFx0XHRcdFx0XHQgICAgV0JNX0VSUl9EUk9QX0lOVl9IV19JRCk7XG4gXG4gXHRcdFx0LyogSW4gYW55IGNhc2UgY29udGludWF0aW9uIGJpdCBpcyBzZXRcbiBcdFx0XHQgKiBpbiB0aGUgcHJldmlvdXMgcmVjb3JkLCBjbGVhbnVwIHNjYXR0ZXJfbXNkdV9saXN0XG5AQCAtMjA2OCw3ICsyMDk2LDggQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHRcdFx0ICAgXCJVbmFibGUgdG8gcHJvY2VzcyBXQk0gZXJyb3IgbXNkdSBkdWUgdG8gaW52YWxpZCBodyBsaW5rIGlkICVkIGRldmljZSBpZCAlZFxcblwiLFxuIFx0XHRcdFx0ICAgaHdfbGlua19pZCwgZGV2aWNlX2lkKTtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfTlVMTF9QUk9DX0RQKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTIwNzcsMTggKzIxMDYsMjEgQEAgaW50IGF0aDEya193aWZpN19kcF9yeF9wcm9jZXNzX3dibV9lcnIoc3RydWN0IGF0aDEya19kcCAqZHAsXG4gXG4gXHRcdGRwX3BkZXYgPSBhdGgxMmtfZHBfdG9fcGRldl9kcChwYXJ0bmVyX2RwLCBwZGV2X2lkeCk7XG4gXHRcdGlmICghZHBfcGRldikge1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuK1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuK1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX1BERVYpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGFyID0gYXRoMTJrX3BkZXZfZHBfdG9fYXIoZHBfcGRldik7XG4gXG4gXHRcdGlmICghYXIgfHwgIXJjdV9kZXJlZmVyZW5jZShhci1cdTAwM2VhYi1cdTAwM2VwZGV2c19hY3RpdmVbcGRldl9pZHhdKSkge1xuLVx0XHRcdGRldl9rZnJlZV9za2JfYW55KG1zZHUpO1xuK1x0XHRcdGF0aDEya193aWZpN19kcF9yeF93Ym1fZXJyX2ZyZWVfc2tiKGRwLCBtc2R1LFxuK1x0XHRcdFx0XHRcdFx0ICAgIFdCTV9FUlJfRFJPUF9OVUxMX0FSKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfQ0FDX1JVTk5JTkcsIFx1MDAyNmFyLVx1MDAzZWRldl9mbGFncykpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShtc2R1KTtcbitcdFx0XHRhdGgxMmtfd2lmaTdfZHBfcnhfd2JtX2Vycl9mcmVlX3NrYihkcCwgbXNkdSxcbitcdFx0XHRcdFx0XHRcdCAgICBXQk1fRVJSX0RST1BfQ0FDX1JVTk5JTkcpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG5pbmRleCA1ODdkNThlZWNjZmE1Li5mNTcyYWE1ODFkMTE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmNcbkBAIC0xNjcsOCArMTY3LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfZHBfdHgoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphXG4gXHR0eF9yaW5nID0gXHUwMDI2ZHAtXHUwMDNldHhfcmluZ1t0aS5yaW5nX2lkXTtcbiBcbiBcdHR4X2Rlc2MgPSBhdGgxMmtfZHBfdHhfYXNzaWduX2J1ZmZlcihkcCwgcG9vbF9pZCk7XG4tXHRpZiAoIXR4X2Rlc2MpXG4rXHRpZiAoIXR4X2Rlc2MpIHtcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X2Vyci50eGJ1Zl9uYVtwb29sX2lkXSsrO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbiBcbiBcdGRwX2xpbmtfdmlmID0gYXRoMTJrX2RwX3ZpZl90b19kcF9saW5rX3ZpZihcdTAwMjZhaHZpZi1cdTAwM2VkcF92aWYsIGFydmlmLVx1MDAzZWxpbmtfaWQpO1xuIFxuQEAgLTU3NSwxOCArNTc3LDIxIEBAIGF0aDEya19kcF90eF9wcm9jZXNzX2h0dF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgdm9pZCAqZGVzYyxcbiB7XG4gXHRzdHJ1Y3QgaHR0X3R4X3dibV9jb21wbGV0aW9uICpzdGF0dXNfZGVzYztcbiBcdHN0cnVjdCBhdGgxMmtfZHBfaHR0X3dibV90eF9zdGF0dXMgdHMgPSB7fTtcbi1cdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgd2JtX3N0YXR1cztcbitcdGVudW0gaGFsX3dibV9odHRfdHhfY29tcF9zdGF0dXMgaHR0X3N0YXR1cztcbiBcdHUxNiBwZWVyX2lkO1xuIFxuIFx0c3RhdHVzX2Rlc2MgPSBkZXNjO1xuIFxuLVx0d2JtX3N0YXR1cyA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzAsXG4rXHRodHRfc3RhdHVzID0gbGUzMl9nZXRfYml0cyhzdGF0dXNfZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCAgIEhUVF9UWF9XQk1fQ09NUF9JTkZPMF9TVEFUVVMpO1xuLVx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1t3Ym1fc3RhdHVzXSsrO1xuK1x0aWYgKGxpa2VseShodHRfc3RhdHVzIFx1MDAzYyBNQVhfRldfVFhfU1RBVFVTKSlcbitcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLmZ3X3R4X3N0YXR1c1todHRfc3RhdHVzXSsrO1xuK1x0ZWxzZVxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4tXHRzd2l0Y2ggKHdibV9zdGF0dXMpIHtcbitcdHN3aXRjaCAoaHR0X3N0YXR1cykge1xuIFx0Y2FzZSBIQUxfV0JNX1JFTF9IVFRfVFhfQ09NUF9TVEFUVVNfT0s6XG4tXHRcdHRzLmFja2VkID0gKHdibV9zdGF0dXMgPT0gSEFMX1dCTV9SRUxfSFRUX1RYX0NPTVBfU1RBVFVTX09LKTtcbitcdFx0dHMuYWNrZWQgPSB0cnVlO1xuIFx0XHR0cy5hY2tfcnNzaSA9IGxlMzJfZ2V0X2JpdHMoc3RhdHVzX2Rlc2MtXHUwMDNlaW5mbzIsXG4gXHRcdFx0XHRcdCAgICBIVFRfVFhfV0JNX0NPTVBfSU5GTzJfQUNLX1JTU0kpO1xuIFxuQEAgLTYwOCw3ICs2MTMsNyBAQCBhdGgxMmtfZHBfdHhfcHJvY2Vzc19odHRfdHhfY29tcGxldGUoc3RydWN0IGF0aDEya19kcCAqZHAsIHZvaWQgKmRlc2MsXG4gXHRcdCAqL1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGF0aDEya193YXJuKGRwLVx1MDAzZWFiLCBcIlVua25vd24gaHR0IHdibSB0eCBzdGF0dXMgJWRcXG5cIiwgd2JtX3N0YXR1cyk7XG4rXHRcdGF0aDEya193YXJuKGRwLVx1MDAzZWFiLCBcIlVua25vd24gaHR0IHR4IHN0YXR1cyAlZFxcblwiLCBodHRfc3RhdHVzKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gfVxuQEAgLTk4NCwxMSArOTg5LDE3IEBAIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRpb25faGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2RwICpkcCwgaW50IHJpbmdfaWQpXG4gXHRcdC8qIEZpbmQgdGhlIEhBTF9XQk1fUkVMRUFTRV9JTkZPMF9SRUxfU1JDX01PRFVMRSB2YWx1ZSAqL1xuIFx0XHRidWZfcmVsX3NvdXJjZSA9IGxlMzJfZ2V0X2JpdHModHhfc3RhdHVzLVx1MDAzZWluZm8wLFxuIFx0XHRcdFx0XHQgICAgICAgSEFMX1dCTV9SRUxFQVNFX0lORk8wX1JFTF9TUkNfTU9EVUxFKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xuK1x0XHRpZiAobGlrZWx5KGJ1Zl9yZWxfc291cmNlIFx1MDAzYyBIQUxfV0JNX1JFTF9TUkNfTU9EVUxFX01BWCkpXG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnR4X3dibV9yZWxfc291cmNlW2J1Zl9yZWxfc291cmNlXSsrO1xuK1x0XHRlbHNlXG4rXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0XHRyZWxfc3RhdHVzID0gbGUzMl9nZXRfYml0cyh0eF9zdGF0dXMtXHUwMDNlaW5mbzAsXG4gXHRcdFx0XHRcdCAgIEhBTF9XQk1fQ09NUExfVFhfSU5GTzBfVFFNX1JFTEVBU0VfUkVBU09OKTtcbi1cdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdKys7XG4rXHRcdGlmIChsaWtlbHkocmVsX3N0YXR1cyBcdTAwM2MgTUFYX1RRTV9SRUxFQVNFX1JFQVNPTikpXG4rXHRcdFx0ZHAtXHUwMDNlZGV2aWNlX3N0YXRzLnRxbV9yZWxfcmVhc29uW3JlbF9zdGF0dXNdKys7XG4rXHRcdGVsc2VcbitcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4gXG4gXHRcdC8qIFJlbGVhc2UgZGVzY3JpcHRvciBhcyBzb29uIGFzIGV4dHJhY3RpbmcgbmVjZXNzYXJ5IGluZm9cbiBcdFx0ICogdG8gcmVkdWNlIGNvbnRlbnRpb25cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2hhbF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9oYWxfcnguY1xuaW5kZXggNDljNjkzMjg5NzA5NC4uNjBlN2EzNjA5N2YxMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaGFsX3J4LmNcbkBAIC0zMjksNyArMzI5LDEwIEBAIGludCBhdGgxMmtfd2lmaTdfaGFsX2Rlc2NfcmVvX3BhcnNlX2VycihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcbiBcdFx0XHRcdCAgICBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9QVVNIX1JFQVNPTik7XG4gXHRlcnJfY29kZSA9IGxlMzJfZ2V0X2JpdHMoZGVzYy1cdTAwM2VpbmZvMCxcbiBcdFx0XHRcdCBIQUxfUkVPX0RFU1RfUklOR19JTkZPMF9FUlJPUl9DT0RFKTtcbi1cdGRwLVx1MDAzZWRldmljZV9zdGF0cy5yZW9fZXJyb3JbZXJyX2NvZGVdKys7XG4rXHRpZiAobGlrZWx5KGVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0RFU1RfUklOR19FUlJPUl9DT0RFX01BWCkpXG4rXHRcdGRwLVx1MDAzZWRldmljZV9zdGF0cy53Ym1fZXJyLnJlb19lcnJvcltlcnJfY29kZV0rKztcbitcdGVsc2VcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuIFxuIFx0aWYgKHB1c2hfcmVhc29uICE9IEhBTF9SRU9fREVTVF9SSU5HX1BVU0hfUkVBU09OX0VSUl9ERVRFQ1RFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwdXNoX3JlYXNvbiAhPSBIQUxfUkVPX0RFU1RfUklOR19QVVNIX1JFQVNPTl9ST1VUSU5HX0lOU1RSVUNUSU9OKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNTo1NzoyNC43NjY5NzIxNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDIyNDM4MzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQ6IGF0aDEyayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBhIGhhbmRmdWwgb2YgYGF0aDEya2AgZmlsZXM6IGBkZWJ1Z2ZzLmNgLCBgZHAuaGAsIGBkcF9zdGF0cy5oYCwgYW5kIHNvbWUgYHdpZmk3YCBmaWxlcy4gTG9va3MgbGlrZSBpdCdzIGFkZGluZyBuZXcgc3RhdHMgdG8gYGF0aDEya19kZXZpY2VfZHBfc3RhdHNgIGFuZCB1cGRhdGluZyB0aGUgZGVidWdmcyBpbnRlcmZhY2UgdG8gaGFuZGxlIGR1bXBpbmcgYW5kIHJlc2V0dGluZyB0aGVzZSBzdGF0cy4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZXkndmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIGJlZm9yZSBpbmNyZW1lbnRpbmcgdGhlIHN0YXRzIGFycmF5cywgd2hpY2ggaXMgZ3JlYXQuICBUaGluZ3MgbGlrZSBgaWYgKGxpa2VseShyeGNiLVx1MDAzZWVycl9jb2RlIFx1MDAzYyBIQUxfUkVPX0VOVFJfUklOR19SWERNQV9FQ09ERV9NQVgpKWAgYmVmb3JlIGluY3JlbWVudGluZyBhbiBhcnJheSBlbnRyeS4gVGhleSdyZSBhbHNvIHRocm93aW5nIGluIGEgYFdBUk5fT05fT05DRSgxKWAgaWYgdGhvc2UgYm91bmRzIGFyZSB2aW9sYXRlZCwgd2hpY2ggaXMgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgVGhlcmUgYXJlIGFsc28gc29tZSBuZXcgZHJvcCByZWFzb25zIHRyYWNrZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gIFRoZSBjaGFuZ2VzIGFyZSBiYXNpY2FsbHk6IGRlYnVnZnMgcmVhZC93cml0ZSBmdW5jdGlvbnMgZm9yIGBkZXZpY2VfZHBfc3RhdHNgLCB0aGUgYm91bmRzIGNoZWNrcyBJIG1lbnRpb25lZCwgYW5kIHN0YXRzIGNvdW50ZXIgaW5jcmVtZW50cy4gVGhlIGJvdW5kcyBjaGVja2luZyBpcyB0aGUga2V5IHBhcnQgZm9yIGZ1enppbmcgcG90ZW50aWFsLCBidXQgaXQgKnByZXZlbnRzKiBvdXQtb2YtYm91bmRzIHdyaXRlcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGNoZWNrcyBsaWtlIHRoaXMgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIGR1cmluZyBzdGF0cyBpbmNyZW1lbnRpbmcuIFRoZSBleGFtcGxlIGNvZGUgc25pcHBldCBpcyB2ZXJ5IGNsZWFyIOKAkyB0aGV5J3JlIG1ha2luZyBzdXJlIGByeGNiLVx1MDAzZWVycl9jb2RlYCBpcyB3aXRoaW4gdGhlIGFycmF5IGJvdW5kcyBiZWZvcmUgYWNjZXNzaW5nIGBkcC1cdTAwM2VkZXZpY2Vfc3RhdHMud2JtX2Vyci5yeGRtYV9lcnJvcltyeGNiLVx1MDAzZWVycl9jb2RlXWAuICBUaGF0IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhpcyBpcyBhbiBgYXRoMTJrYCBkcml2ZXIuIEl0J3MgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgbWVhbmluZyBQQ0kgb3IgQUhCIGhhcmR3YXJlLiAgV2ktRmkgZHJpdmVycyBvZnRlbiByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBhdCBsZWFzdCB0aGV5IGFyZW4ndCBkaXJlY3RseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiAgSSdtIHJhY2tpbmcgbXkgYnJhaW4sIGRvZXMgUUVNVSBldmVuICplbXVsYXRlKiBgYXRoMTJrYD8gTm9wZS4gTm90IHRoYXQgSSdtIGF3YXJlIG9mLiAgYG1hYzgwMjExX2h3c2ltYCAqZW11bGF0ZXMqIFdpLUZpIGluIGEgZ2VuZXJhbCB3YXksIGJ1dCBgYXRoMTJrYCBpcyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gQ2FuIGBhdGgxMmtgIGJlIHByb2JlZCB3aXRob3V0IHRoYXQgaGFyZHdhcmU/IExldCBtZSBjaGVja+KApiBub3BlLCBpdCdzIGEgUENJL0FIQiBkcml2ZXIuICBBbmQgbm8sIEknbSBub3QgZmluZGluZyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHNwZWNpZmljYWxseSBmb3IgYGF0aDEya2AuXG5cbk9rYXksIHRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhcjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgIGBhdGgxMmtgIGlzICpleGFjdGx5KiB0aGF0IOKAkyB2ZW5kb3Itc3BlY2lmaWMsIFBDSWUvQUhCIChzbyB0aGF0IG1lYW5zIFBDSWUtbGlrZSksIFdpLUZpIGRyaXZlci4gSXQgbmVlZHMgYWN0dWFsIGhhcmR3YXJlLiBTbywgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIGFuZCB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQsIEkgbXVzdCBjb25jbHVkZSB0aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgKm5vdCogd29ydGggZnV6emluZyB3aXRoaW4gdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoZSB2ZXJ5IG5hdHVyZSBvZiB0aGUgZHJpdmVyJ3MgdGFyZ2V0IGhhcmR3YXJlIG1ha2VzIGl0IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE1OjU3OjM4Ljk5MTM1ODgxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM0MjY1NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXIuKmF0aDEya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4MTI9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIF9fbWF5YmVfdW51c2VkIGF0aDEya19wY2lfcG1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgxOTppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODIwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg9MTc2PXZvaWQgYXRoMTJrX3BjaV9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgaXNfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE1OjU3OjQxLjkyNTYyOTM3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MzI0NDg0MTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBBdHlwaWNhbCBIZW1vbHl0aWMgVXJlbWljIFN5bmRyb21lIChhSFVTKSBvciBTaW1pbGFyIENvbmRpdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBzZWVpbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1lIHRoaW5raW5nIGFib3V0IEFIQi4gQnV0IEkgY2FuJ3QganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgcnVsZSBvdXQgb3RoZXIgcG9zc2liaWxpdGllcywgb3IgYXQgbGVhc3QgY29uc2lkZXIgdGhlbS4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzbid0IHNvbWV0aGluZyBlbHNlICphbG9uZ3NpZGUqIG9yICppbnN0ZWFkIG9mKiBBSEIuIEkgd2FudCB0byBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5LCB3aXRoIGEgYnJvYWQgZGlmZmVyZW50aWFsIGRpYWdub3NpcyBpbiBtaW5kLCBhbmQgbm90IG1pc3MgYSB0cmljay4gU28sIG15IHRob3VnaHQgaXM6IExldCdzIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBpcyBzdHJpY3RseSBBSEIsIG9yIGlmIHRoZXJlJ3MgbW9yZSB0byB0aGUgc3RvcnkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGFuZCBjYXN0IGEgd2lkZXIgbmV0IGluIG15IHRoaW5raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAwOjU1LjE3MDQ3MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ0NDY2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXQuKmF0aDEya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTY1LW1vZHVsZV9leGl0KGF0aDEya193aWZpN19leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDA6NTcuNTg0OTMyMTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MDkxODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya193aWZpN19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQncyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYSBXaUZpIDcgZGV2aWNlIGxpa2UgaW4gdGhpcyBjb250ZXh0PyBJJ20gZmFtaWxpYXIgd2l0aCB0aGUgYXRoMTBrIGFuZCBhdGgxMWsgZmFtaWxpZXM7IEkgd29uZGVyIHdoYXQgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGV5J3ZlIGludHJvZHVjZWQgZm9yIFdpRmkgNyBhbmQgaG93IHRob3NlIGFyZSByZWZsZWN0ZWQgaW4gdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCBoYXJkd2FyZS1zcGVjaWZpYywgZHJpdmVyLXNwZWNpZmljLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IG5ldyByZWdpc3RlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBoZXJlIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgODAyLjExYmUgc3RhbmRhcmQsIG9yIGlzIGl0IGJ1aWxkaW5nIHVwb24gZXhpc3RpbmcgY29kZT8gSSdsbCBwcm9iYWJseSBiZSBhYmxlIHRvIGdsZWFuIHF1aXRlIGEgYml0IGZyb20gdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIGlmIHRoZSBhdXRob3JzIGhhdmUgaW5jbHVkZWQgYW55IGNvbW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAxOjA0LjA2NTg1NDE5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2Mzg4NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya193aWZpN19pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jPTMzPXZvaWQgYXRoMTJrX3dpZmk3X2FyY2hfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYzozOTpzdGF0aWMgaW50IGF0aDEya193aWZpN19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE2OjAxOjA1LjY5MjI0ODg0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDE0Njc0MzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBhdGgxMmtfd2lmaTdfaW5pdGAgY29kZSwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQXRoMTJrIFdpRmkgNyBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIGBhdGgxMmtfd2lmaTdfaW5pdGAuIEltbWVkaWF0ZWx5LCB0aGUgXCJpbml0XCIgcGFydCBzaWduYWxzIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhlIFdpRmkgNyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlci4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGhhcmR3YXJlLCBjb25maWd1cmVzIHRoZSByYWRpbywgYW5kIHNldHMgdXAgdGhlIGZvdW5kYXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgZm9yIFdpRmkgNyBvcGVyYXRpb25zLiBJIGJldCB0aGlzIGlzIHdoZXJlIHRoZSBwb3dlci11cCBzZXF1ZW5jZSwgUEhZIGluaXRpYWxpemF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZyBhcmUgaGFuZGxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlciBzZXR0aW5ncywgY2xvY2sgY29uZmlndXJhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBkcml2ZXIgc3RydWN0dXJlcywgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMsIGFuZCBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG5ldyBmZWF0dXJlcyBvZiBXaUZpIDcsIGxpa2UgdGhlIDMyMCBNSHogY2hhbm5lbHMsIG11bHRpLWxpbmsgb3BlcmF0aW9uLCBhbmQgaW1wcm92ZWQgbW9kdWxhdGlvbiBzY2hlbWVzLCBhcmUgaW50ZWdyYXRlZCBhdCB0aGUgdmVyeSBzdGFydC4gSSdsbCBiZSB0cnlpbmcgdG8gZ3Jhc3AgdGhlIGFyY2hpdGVjdHVyYWwgZGVjaXNpb25zIG1hZGUgaGVyZSB0byBlbmFibGUgdGhpcyBuZXcgc3RhbmRhcmQuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEgY29tcGxleCBkYW5jZSBiZXR3ZWVuIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBkcml2ZXIgc2V0dXAsIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgY29tZSB0b2dldGhlci4gTGV0J3MgZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTY6MDk6MTUuODM4OTk1NzIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM5OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X2luaXQodm9pZClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdGFoYl9lcnIgPSBhdGgxMmtfd2lmaTdfYWhiX2luaXQoKTtcXG4gIDQyOlxcdFxcdGlmIChhaGJfZXJyKVxcbiAgNDM6XFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgYXRoMTJrIFdpLUZpIDcgQUhCIGRldmljZTogJWRcXFxcblxcXCIsXFxuICA0NDpcXHRcXHRcXHRcXHRhaGJfZXJyKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0cGNpX2VyciA9IGF0aDEya193aWZpN19wY2lfaW5pdCgpO1xcbiAgNDc6XFx0XFx0aWYgKHBjaV9lcnIpXFxuICA0ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdGgxMmsgV2ktRmkgNyBQQ0kgZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gIDQ5OlxcdFxcdFxcdFxcdHBjaV9lcnIpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQvKiBJZiBib3RoIGZhaWxlZCwgcmV0dXJuIG9uZSBvZiB0aGUgZmFpbHVyZXMgKGFyYml0cmFyeSkgKi9cXG4gIDUyOlxcdFxcdHJldHVybiBhaGJfZXJyIFxcdTAwMjZcXHUwMDI2IHBjaV9lcnIgPyBhaGJfZXJyIDogMDtcXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4gIDU2OlxcdHtcXG4gIDU3OlxcdFxcdGlmICghcGNpX2VycilcXG4gIDU4OlxcdFxcdFxcdGF0aDEya193aWZpN19wY2lfZXhpdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOToxNS44MzkwNjIwMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0ODI3Mzk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzbWVudCBvZiBGdXp6aW5nIFZpYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzbid0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBoZXJlJ3Mgd2h5LiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGJvdGggQUhCIGFuZCBQQ0kgZGV2aWNlcy4gTm93LCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYm90aCBvZiB0aGVzZSBpbnRlcmZhY2VzIGFyZSB0aWVkIHRvIGFjdHVhbCwgcGh5c2ljYWwgaGFyZHdhcmUuIFdoaWxlIEFIQiAqY291bGQqIHRoZW9yZXRpY2FsbHkgYmUgcmVwcmVzZW50ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBub2Rlcywgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IG9mZmVyIHRoZXNlIGdlbmVyaWMgQUhCIGRldmljZSB0cmVlIG5vZGVzLiBJdCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgcG9zc2libGUgdG8gZW11bGF0ZS5cblxuTW9yZW92ZXIsIHRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBiZSBhZGRpbmcgc3RhdGlzdGljcyBjb2xsZWN0aW9uIGFuZCBzb21lIGJvdW5kcyBjaGVja2luZyBhcm91bmQgdGhvc2Ugc3RhdGlzdGljcy4gVGhhdCBzb3VuZHMgaW5ub2N1b3VzIG9uIGl0cyBvd24sIGJ1dCBjb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIEJlY2F1c2UgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXLigJRpbiB0aGlzIGNhc2UsIGZvciBRdWFsY29tbSdzIFdpLUZpIDcgaGFyZHdhcmUgKGF0aDEyaynigJRpdCdzIHJlYXNvbmFibGUgdG8gYXNzdW1lIGEgZGVncmVlIG9mIGhhcmR3YXJlIGRlcGVuZGVuY3kuIFdlIGtub3cgaXQgcmVxdWlyZXMgcmVhbCBQQ0llIGFuZC9vciBBSEIgaGFyZHdhcmUsIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgaGF2ZSBnb29kIGVtdWxhdGlvbiBvZiB0aGlzLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSB0eXBlIG9mIGNoYW5nZXMsIGl0J3Mgbm90IHByYWN0aWNhbCB0byBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzLiBSZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3QgY2hvaWNlIHdpdGggdGhlIGp1c3RpZmljYXRpb24gYmVpbmcgdGhhdCB0aGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlbGllcyBvbiBwaHlzaWNhbCBQQ0llL0FIQiBoYXJkd2FyZSBub3QgcmVhbGlzdGljYWxseSBlbXVsYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNCwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNjowOTozMi4zMjE4MDUxMjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBRdWFsY29tbSBXaS1GaSA3IGRldmljZXMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgb3IgQUhCIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGRlYnVnZnMgc3RhdGlzdGljcyBhbmQgYm91bmRzIGNoZWNraW5nIGZvciB0aG9zZSBzdGF0aXN0aWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGF0aDEyayBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIG9yIEFIQiBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBkZWJ1Z2ZzIHN0YXRpc3RpY3MgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgdGhvc2Ugc3RhdGlzdGljcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz6kqd[1] Phase: Running StartedAt: 2026-08-06 16:09:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz6kqd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 16:09:43 +0000 UTC FinishedAt: 2026-08-06 16:09:48 +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,}