Name: series-workflowp6dxz Phase: Failed StartedAt: 2026-07-22 13:36:14 +0000 UTC FinishedAt: 2026-07-22 14:02:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp6dxz[0] Phase: Succeeded StartedAt: 2026-07-22 13:36:14 +0000 UTC FinishedAt: 2026-07-22 14:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp6dxz[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 13:36:14 +0000 UTC FinishedAt: 2026-07-22 14:01:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgTUNUUCBvdmVyIFBDQyBkcml2ZXIgYW5kIG1vZGlmaWVzIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIuIEJvdGggcmVxdWlyZSBzcGVjaWZpYyBBQ1BJIHRhYmxlcyAoUENDVCBhbmQgYSBkZXZpY2Ugd2l0aCBISUQgRE1UMDAwMSkgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZXNlIEFDUEkgdGFibGVzIGFyZSBub3QgcHJvdmlkZWQgYnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbmplY3RlZCBieSBzeXprYWxsZXIsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZmNzhiZDgyYjAxMGUyZmZlMDA4NTVkZDhjNWI1ZjUyMTYwY2UwODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNDowMDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA2OTQwYWEzZDQ5OGI5OS4uOWY0OGRlZTBmNGM2ZGMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNTU4Miw2ICYjNDM7MTU1ODIsMTEgQEAgRjpcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxuIEY6XHRpbmNsdWRlL25ldC9uZXRucy9tY3RwLmhcbiBGOlx0bmV0L21jdHAvXG4gXG4mIzQzO01BTkFHRU1FTlQgQ09NUE9ORU5UIFRSQU5TUE9SVCBQUk9UT0NPTCAoTUNUUCkgb3ZlciBQQ0MgKE1DVFAtUENDKSBEcml2ZXJcbiYjNDM7TTpcdEFkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuY1xuJiM0MztcbiBNQVBMRSBUUkVFXG4gTTpcdExpYW0gUi4gSG93bGV0dCBcdTAwM2NsaWFtQGluZnJhZGVhZC5vcmdcdTAwM2VcbiBSOlx0QWxpY2UgUnlobCBcdTAwM2NhbGljZXJ5aGxAZ29vZ2xlLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFpbGJveC9wY2MuYyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xuaW5kZXggNjM2ODc5YWUxZGI3NmIuLmRiZmU4ZGQ5MmRkZDI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tYWlsYm94L3BjYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21haWxib3gvcGNjLmNcbkBAIC0yNzAsNiAmIzQzOzI3MCw5IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbilcbiBcdHU2NCB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZChcdTAwMjZwY2hhbi1cdTAwM2VlcnJvciwgXHUwMDI2dmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzE0LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4ge1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHA7XG4mIzQzO1x0aW50IHJjO1xuIFxuIFx0cGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuIFxuQEAgLTMyMSwxNCAmIzQzOzMyNSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSlcbiYjNDM7XHQgICAgIVJFQURfT05DRShwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSkpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmICghcGNjX21ib3hfY21kX2NvbXBsZXRlX2NoZWNrKHBjaGFuKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuIFxuLVx0aWYgKHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihwY2hhbikpXG4tXHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7XHRyYyA9IHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihwY2hhbik7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYXIgdGhpcyBmbGFnIGFmdGVyIHVwZGF0aW5nIGludGVycnVwdCBhY2sgcmVnaXN0ZXIgYW5kIGp1c3RcbkBAIC0zMzYsMTUgJiM0MzszMzksNjAgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xuIFx0ICogcmVxdWlyZWQgdG8gYXZvaWQgYW55IHBvc3NpYmxlIHJhY2UgaW4gdXBkYXRhdGlvbiBvZiB0aGlzIGZsYWcuXG4gXHQgKi9cbi1cdHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlID0gZmFsc2U7XG4tXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbi1cdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7XG4mIzQzO1x0V1JJVEVfT05DRShwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSwgZmFsc2UpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbiYjNDM7XHRtYm94X2NoYW5fdHhkb25lKGNoYW4sIHJjKTtcbiBcbiBcdHBjY19jaGFuX2Fja25vd2xlZGdlKHBjaGFuKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbFxuJiM0MzsgKiAgICAgICAgICAgICAgd2l0aG91dCBhY3RpdmF0aW5nIHRoZSBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogICAgICAgICAgICAgIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgY2hhbm5lbCBkYXRhLlxuJiM0MzsgKiBAc3Vic3BhY2VfaWQ6IFRoZSBQQ0MgU3Vic3BhY2UgaW5kZXggYXMgcGFyc2VkIGluIHRoZSBQQ0MgY2xpZW50XG4mIzQzOyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0NcbiYjNDM7ICogICAgICBzdWJzcGFjZXMgYXMgcGFyc2VkIGJ5IHRoZSBQQ0MgTWFpbGJveCBjb250cm9sbGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7cGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuJiM0MztcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFfY2hhbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoc3Vic3BhY2VfaWQgXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXHUwMDNlPSBwY2NfY2hhbl9jb3VudClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdHBjaGFuID0gY2hhbl9pbmZvICYjNDM7IHN1YnNwYWNlX2lkO1xuJiM0MztcdGNoYW4gPSBwY2hhbi1cdTAwM2VjaGFuLm1jaGFuO1xuJiM0MztcdGlmIChJU19FUlIoY2hhbikpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtDaGFubmVsIG5vdCBmb3VuZCBmb3IgaWR4OiAlZFxcblwmIzM0Oywgc3Vic3BhY2VfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0cGNjX21jaGFuID0gXHUwMDI2cGNoYW4tXHUwMDNlY2hhbjtcbiYjNDM7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkciA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHI7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiYjNDM7XHRxX2NoYW4tXHUwMDNlc2htZW1fc2l6ZSA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplO1xuJiM0MztcdHFfY2hhbi1cdTAwM2VsYXRlbmN5ID0gcGNjX21jaGFuLVx1MDAzZWxhdGVuY3k7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZSA9IHBjY19tY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWUgPSBwY2NfbWNoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRxX2NoYW4tXHUwMDNldHlwZSA9IHBjY19tY2hhbi1cdTAwM2V0eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTtcbiYjNDM7XG4gLyoqXG4gICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG4gICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbkBAIC0zNjAsNyAmIzQzOzQwOCw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbiB7XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbjtcbiBcdGludCByYztcbkBAIC0zNzUsMjAgJiM0Mzs0MjIsMTAgQEAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcbiBcdH1cbiBcbi1cdHBjY19tY2hhbiA9IFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4tXHRwY2NfbWNoYW4tXHUwMDNlc2htZW0gPSBhY3BpX29zX2lvcmVtYXAocGNjX21jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkcixcbi1cdFx0XHRcdFx0ICAgcGNjX21jaGFuLVx1MDAzZXNobWVtX3NpemUpO1xuLVx0aWYgKCFwY2NfbWNoYW4tXHUwMDNlc2htZW0pXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4tXG4gXHRyYyA9IG1ib3hfYmluZF9jbGllbnQoY2hhbiwgY2wpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGlvdW5tYXAocGNjX21jaGFuLVx1MDAzZXNobWVtKTtcbi1cdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbi1cdFx0cmV0dXJuIEVSUl9QVFIocmMpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHBjY19tY2hhbjtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuJiM0MztcdHJldHVybiAgXHUwMDI2cGNoYW4tXHUwMDNlY2hhbjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiBcbkBAIC00MDAsMTkgJiM0Mzs0MzcsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiAgKi9cbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXG4ge1xuLVx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuLVx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuIFxuJiM0MztcdGlmICghcGNoYW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuIFx0aWYgKCFjaGFuIHx8ICFjaGFuLVx1MDAzZWNsKVxuIFx0XHRyZXR1cm47XG4tXHRwY2hhbl9pbmZvID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbi1cdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbl9pbmZvLVx1MDAzZWNoYW47XG4tXHRpZiAocGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSkge1xuLVx0XHRpb3VubWFwKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pO1xuLVx0XHRwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbi1cdH1cbi1cbiBcdG1ib3hfZnJlZV9jaGFubmVsKGNoYW4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9mcmVlX2NoYW5uZWwpO1xuQEAgLTQ0MCw3ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBwY2Nfc2VuZF9kYXRhKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpXG4gXG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZF9tb2RpZnlfd3JpdGUoXHUwMDI2cGNoYW4tXHUwMDNlZGIpO1xuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBjaGFuLVx1MDAzZXBsYXRfaXJxIFx1MDAzZSAwKVxuLVx0XHRwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSA9IHRydWU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCB0cnVlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ2Miw5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBib29sIHBjY19sYXN0X3R4X2RvbmUoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4ge1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuIFx0dW5zaWduZWQgbG9uZyBpcnFmbGFncztcbiBcdGludCByYztcbiBcbiYjNDM7XHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdHBjY19tY2hhbi1cdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXHUwMDNlc2htZW1fYmFzZV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgcGNjX21jaGFuLVx1MDAzZXNobWVtX3NpemUpO1xuJiM0MztcdGlmIChwY2NfbWNoYW4tXHUwMDNlc2htZW0gID09IE5VTEwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdC8qXG4gXHQgKiBDbGVhciBhbmQgYWNrbm93bGVkZ2UgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBvbiByZXNwb25kZXIgY2hhbm5lbFxuIFx0ICogYmVmb3JlIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHRcbkBAIC00NzksNiAmIzQzOzUxNiw4IEBAIHN0YXRpYyBpbnQgcGNjX3N0YXJ0dXAoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiBcdFx0aWYgKHVubGlrZWx5KHJjKSkge1xuIFx0XHRcdGRldl9lcnIoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRwY2hhbi1cdTAwM2VwbGF0X2lycSk7XG4mIzQzO1x0XHRcdGlvdW5tYXAocGNjX21jaGFuLVx1MDAzZXNobWVtKTtcbiYjNDM7XHRcdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbkBAIC00ODgsMTUgJiM0Mzs1MjcsMjMgQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIFxuIC8qKlxuICAqIHBjY19zaHV0ZG93biAtIENhbGxlZCBmcm9tIE1haWxib3ggQ29udHJvbGxlciBjb2RlLiBVc2VkIGhlcmVcbi0gKlx0XHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQuXG4mIzQzOyAqXHRcdHRvIGZyZWUgdGhlIGludGVycnVwdCBhbmQgdW5tYXAgdGhlIHNoYXJlZCBtZW1vcnkuXG4gICogQGNoYW46IFBvaW50ZXIgdG8gTWFpbGJveCBjaGFubmVsIHRvIHNodXRkb3duLlxuICAqL1xuIHN0YXRpYyB2b2lkIHBjY19zaHV0ZG93bihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIHtcbiBcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tXHUwMDNlY29uX3ByaXY7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XG4gXG4gXHRpZiAocGNoYW4tXHUwMDNlcGxhdF9pcnEgXHUwMDNlIDApXG4gXHRcdGRldm1fZnJlZV9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIGNoYW4pO1xuJiM0MztcdHN5bmNocm9uaXplX2lycShwY2hhbi1cdTAwM2VwbGF0X2lycSk7XG4mIzQzO1xuJiM0MztcdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdGlmIChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKSB7XG4mIzQzO1x0XHRpb3VubWFwKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pO1xuJiM0MztcdFx0cGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1ib3hfY2hhbl9vcHMgcGNjX2NoYW5fb3BzID0ge1xuQEAgLTgzMSw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBwY2NfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRwY2NfcGFyc2Vfc3Vic3BhY2Vfc2htZW0ocGNoYW4sIHBjY3RfZW50cnkpO1xuIFxuIFx0XHRwY2hhbi1cdTAwM2V0eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuJiM0MztcdFx0cGNoYW4tXHUwMDNlY2hhbi50eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuIFx0XHRwY2N0X2VudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKVxuIFx0XHRcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSAmIzQzOyBwY2N0X2VudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzliOGYzOGZmMGZiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuQEAgLTQ3LDYgJiM0Mzs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG4gXHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcbiBcdCAgaGF2aW5nIGEgXCYjMzQ7bWN0cC1jb250cm9sbGVyXCYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuXG4gXG4mIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9QQ0NcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFBDQyB0cmFuc3BvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElcbiYjNDM7XHRkZXBlbmRzIG9uIFBDQ1xuJiM0MztcdGRlcGVuZHMgb24gQ1BVX0xJVFRMRV9FTkRJQU5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgUENDIHRyYW5zcG9ydCxcbiYjNDM7XHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIHZpYSBBQ1BJIGZvciBlYWNoXG4mIzQzO1x0ICBlbnRyeSBpbiB0aGUgRFNEVC9TU0RUIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci4gVGhlIFBsYXRmb3JtXG4mIzQzO1x0ICBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZWxlY3RlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nXG4mIzQzO1x0ICBlbnRyaWVzIGluIHRoZSBQQ0NULlxuJiM0MztcbiYjNDM7XHQgIFNheSB5IGhlcmUgaWYgeW91IG5lZWQgdG8gY29ubmVjdCB0byBNQ1RQIGVuZHBvaW50cyBvdmVyIFBDQy4gVG9cbiYjNDM7XHQgIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHVzZSBtOyB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdHAtcGNjLlxuJiM0MztcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gVVNCXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICYjNDM7PSBtY3RwLXNlcmlhbC5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgJiM0Mzs9IG1jdHAtaTJjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mub1xuJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfUENDKSAmIzQzOz0gbWN0cC1wY2Mub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0IpICYjNDM7PSBtY3RwLXVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzRmM2IyMTUxMzcwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcbkBAIC0wLDAgJiM0MzsxLDQ2NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBtY3RwLXBjYy5jIC0gRHJpdmVyIGZvciBNQ1RQIG92ZXIgUENDLlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTENcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBJbXBsZW1lbnRhdGlvbiBvZlxuJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI5Mi5wZGZcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaHJ0aW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcGlfYnVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9hY3BpX2RyaXZlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcmVzdHlwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9hY3RibC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQ1RQX1NJR05BVFVSRSAgICAgICAgICBcJiMzNDtNQ1RQXCYjMzQ7XG4mIzQzOyNkZWZpbmUgTUNUUF9TSUdOQVRVUkVfTEVOR1RIICAgKHNpemVvZihNQ1RQX1NJR05BVFVSRSkgLSAxKVxuJiM0MzsjZGVmaW5lIE1DVFBfTUlOX01UVSAgICAgICAgICAgIDY4XG4mIzQzOyNkZWZpbmUgUENDX0hFQURFUl9TSVpFICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KVxuJiM0MzsjZGVmaW5lIE1DVFBfUENDX01JTl9TSVpFICAgICAgIChQQ0NfSEVBREVSX1NJWkUgJiM0MzsgTUNUUF9NSU5fTVRVKVxuJiM0MzsjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcbiYjNDM7c3RydWN0IG1jdHBfcGNjX21haWxib3gge1xuJiM0MztcdHUzMiBpbmRleDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jbGllbnQgY2xpZW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogVGhlIG5ldGRldiBzdHJ1Y3R1cmUuIE9uZSBvZiB0aGVzZSBwZXIgUENDIGFkYXB0ZXIuICovXG4mIzQzO3N0cnVjdCBtY3RwX3BjY19uZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2aWNlO1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94O1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IG91dGJveDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjayhzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgcGNjX2hlYWRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGludCBzaXplO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTtcbiYjNDM7XHRpbmJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3g7XG4mIzQzO1x0bWVtY3B5X2Zyb21pbyhcdTAwMjZwY2NfaGVhZGVyLCBpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtLCBzaXplb2YocGNjX2hlYWRlcikpO1xuJiM0MztcbiYjNDM7XHQvLyBUaGUgbWVzc2FnZSBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlIFBDQyBjb21tYW5kIGluZGljYXRpbmcgaXQgaXMgYW4gTUNUUFxuJiM0MztcdC8vIG1lc3NhZ2UgZm9sbG93ZWQgYnkgdGhlIE1DVFAgaGVhZGVyLCBvciB3ZSBoYXZlIGEgbWFsZm9ybWVkIG1lc3NhZ2UuXG4mIzQzO1x0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSlcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdC8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsXG4mIzQzO1x0Ly8gc29tZXRoaW5nIGlzIHdyb25nIGFuZCB0cmVhdCB0aGUgYnVmZmVyIGFzIGNvcnJ1cHRlZCBkYXRhLlxuJiM0MztcdGlmIChwY2NfaGVhZGVyLmxlbmd0aCBcdTAwM2UgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbV9zaXplIC0gUENDX0VYVFJBX0xFTilcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jbXAoXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICYjNDM7IFBDQ19FWFRSQV9MRU47XG4mIzQzO1x0c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNpemUpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0c2tiX3B1dChza2IsIHNpemUpO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuJiM0MztcdG1lbWNweV9mcm9taW8oc2tiLVx1MDAzZWRhdGEsIGluYm94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW0sIHNpemUpO1xuJiM0MztcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldiwgc2l6ZSk7XG4mIzQzO1x0c2tiX3B1bGwoc2tiLCBzaXplb2YocGNjX2hlYWRlcikpO1xuJiM0MztcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcbiYjNDM7XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4mIzQzO1x0bmV0aWZfcngoc2tiKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztlcnJvcjpcbiYjNDM7XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfcGNjX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1wbmQgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cGNjX2hlYWRlciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSk7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VzaWduYXR1cmUgPSBQQ0NfU0lHTkFUVVJFIHwgbXBuZC1cdTAwM2VvdXRib3guaW5kZXg7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnBjY19oZWFkZXItXHUwMDNlY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCk7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VsZW5ndGggPSBsZW4gJiM0MzsgTUNUUF9TSUdOQVRVUkVfTEVOR1RIO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgbXBuZC1cdTAwM2VvdXRib3guY2hhbi1cdTAwM2VzaG1lbV9zaXplKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb25cbiYjNDM7XHQgKiBhbm90aGVyIHRocmVhZC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgYW5kIHdlIGRvbiYjMzk7dCByZXN0YXJ0XG4mIzQzO1x0ICogdGhlIHF1ZXVlLCBpdCB3aWxsIHJlbWFpbiBwZXJtYW5lbnRseSBzdG9wcGVkLlxuJiM0MztcdCAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlXG4mIzQzO1x0ICogYWxsb3dzIHVzIHRvIGFsd2F5cyByZXN0YXJ0IGl0IGlmIG1ib3hfc2VuZF9tZXNzYWdlIHN1Y2NlZWRzLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XG4mIzQzO1x0aWYgKG1ib3hfc2VuZF9tZXNzYWdlKG1wbmQtXHUwMDNlb3V0Ym94LmNoYW4tXHUwMDNlbWNoYW4sIHNrYikgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvLyBSZW1vdmUgdGhlIGhlYWRlciBpbiBjYXNlIGl0IGdldHMgc2VudCBhZ2FpblxuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbiYjNDM7XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9wcmVwYXJlKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zc2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgb3V0Ym94LmNsaWVudCk7XG4mIzQzO1x0b3V0Ym94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3g7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQQ0MgTWFpbGJveCB0eXBpY2FsbHkgZG9lcyBub3QgbWFrZSB1c2Ugb2YgdGhlIG1zc2cgcG9pbnRlclxuJiM0MztcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxuJiM0MztcdCAqIFRoaXMgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBub24tbnVsbDsgaXQgaXMgcG9zc2libGVcbiYjNDM7XHQgKiB0aGF0IGEgY2hhbmdlIGluIHRoZSBNYWlsYm94IGxldmVsIHdpbGwgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2Fybl9vbmNlKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7JXMgY2FsbGVkIHdpdGggbnVsbCBtZXNzYWdlLlxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1jcHlfdG9pbyhvdXRib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbSwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9kb25lKHN0cnVjdCBtYm94X2NsaWVudCAqYywgdm9pZCAqbXNzZywgaW50IHJjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IG1zc2c7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGVyZSBpcyBhIHBhY2tldCBpbiBmbGlnaHQgZHVyaW5nIGRyaXZlciBjbGVhbnVwXG4mIzQzO1x0ICogSXQgbWF5IGhhdmUgYmVlbiBmcmVlZCBhbHJlYWR5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbXNzZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBvdXRib3guY2xpZW50KTtcbiYjNDM7XG4mIzQzO1x0LyogVXNlIGFuIElSUSBzYWZlIHVwZGF0ZSBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIEhBUkQgSVJRIGluc3RlYWQgb2ZcbiYjNDM7XHQgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdCAqL1xuJiM0MztcdGRzdGF0cyA9IHRoaXNfY3B1X3B0cihtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0fVxuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuJiM0MztcdG5ldGlmX3dha2VfcXVldWUobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3BjY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94LCAqaW5ib3g7XG4mIzQzO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbiYjNDM7XG4mIzQzO1x0b3V0Ym94LVx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2b3V0Ym94LVx1MDAzZWNsaWVudCwgb3V0Ym94LVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoSVNfRVJSKG91dGJveC1cdTAwM2VjaGFuKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKG91dGJveC1cdTAwM2VjaGFuKTtcbiYjNDM7XHRpZiAob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluYm94LVx1MDAzZWNsaWVudC5yeF9jYWxsYmFjayA9IG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjaztcbiYjNDM7XHRpbmJveC1cdTAwM2VjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmluYm94LVx1MDAzZWNsaWVudCwgaW5ib3gtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChJU19FUlIoaW5ib3gtXHUwMDNlY2hhbikpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihpbmJveC1cdTAwM2VjaGFuKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGluYm94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoaW5ib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF9wY2Nfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCwgaWR4O1xuJiM0MztcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmNoYW4pO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2hhbiA9IE5VTEw7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmNoYW4tXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKGNoYW4tXHUwMDNlYWN0aXZlX3JlcSAhPSAgTUJPWF9OT19NU0cpIHtcbiYjNDM7XHRcdFx0c2tiID0gY2hhbi1cdTAwM2VhY3RpdmVfcmVxO1xuJiM0MztcdFx0XHRjaGFuLVx1MDAzZWFjdGl2ZV9yZXEgPSBNQk9YX05PX01TRztcbiYjNDM7XHRcdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5kZXYpO1xuJiM0MztcdFx0XHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR3aGlsZSAoY2hhbi1cdTAwM2Vtc2dfY291bnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0Y291bnQgPSBjaGFuLVx1MDAzZW1zZ19jb3VudDtcbiYjNDM7XHRcdFx0aWR4ID0gY2hhbi1cdTAwM2Vtc2dfZnJlZTtcbiYjNDM7XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRcdGlkeCAtPSBjb3VudDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGlkeCAmIzQzOz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDtcbiYjNDM7XHRcdFx0c2tiID0gY2hhbi1cdTAwM2Vtc2dfZGF0YVtpZHhdO1xuJiM0MztcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XG4mIzQzO1x0XHRcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdFx0Y2hhbi1cdTAwM2Vtc2dfY291bnQtLTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4pO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4gPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGJlY2F1c2UgdGhlIHJpbmcgYnVmZmVyIHdhcyBmdWxsXG4mIzQzO1x0ICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzXG4mIzQzO1x0ICogYmVlbiBlbXB0aWVkIGFuZCB0aGUgcXVldWUgY2FuIGJlIHVzZWQgYWdhaW4gaWYgdGhlXG4mIzQzO1x0ICogbmV0ZGV2IGlzIHJlLW9wZW5lZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmRvX29wZW4gPSBtY3RwX3BjY19vcGVuLFxuJiM0MztcdC5uZG9fc3RvcCA9IG1jdHBfcGNjX3N0b3AsXG4mIzQzO1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuJiM0MztcdG5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTtcbiYjNDM7XHRuZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuJiM0MztcdG5kZXYtXHUwMDNlZmxhZ3MgPSBJRkZfTk9BUlA7XG4mIzQzO1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bWN0cF9wY2NfbmV0ZGV2X29wcztcbiYjNDM7XHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiYjNDM7XHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7XG4mIzQzO1x0aW50IGluZGV4O1xuJiM0MztcdHUzMiBpbmJveF9pbmRleDtcbiYjNDM7XHR1MzIgb3V0Ym94X2luZGV4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZvaWQgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbG9va3VwX2NvbnRleHQgKmx1YyA9IGNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJlcy1cdTAwM2V0eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMzIpXG4mIzQzO1x0XHRyZXR1cm4gQUVfT0s7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMiwgXHUwMDI2YXJlcy1cdTAwM2VkYXRhKTtcbiYjNDM7XHRzd2l0Y2ggKGx1Yy1cdTAwM2VpbmRleCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRcdGx1Yy1cdTAwM2VvdXRib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdGx1Yy1cdTAwM2VpbmJveF9pbmRleCA9IGFkZHJbMF0uYWRkcmVzcy5taW5pbXVtO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBRV9FUlJPUjtcbiYjNDM7XHR9XG4mIzQzO1x0bHVjLVx1MDAzZWluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gQUVfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfY2xlYW51cF9uZXRkZXYodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19jaGFubmVsX3R5cGVzKHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gY2hhbjtcbiYjNDM7XHRpbnQgYWN0dWFsX3R5cGU7XG4mIzQzO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFx1MDAyNmNoYW4sIG91dGJveC1cdTAwM2VpbmRleCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRhY3R1YWxfdHlwZSA9IGNoYW4udHlwZTtcbiYjNDM7XHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwmIzM0OywgYWN0dWFsX3R5cGUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3g7XG4mIzQzO1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0YWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7XG4mIzQzO1x0aWYgKGFjdHVhbF90eXBlICE9IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtNQ1RQLVBDQyBpbmJveCBjaGFubmVsIHdyb25nIHR5cGU6ICVkXCYjMzQ7LCBhY3R1YWxfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGluaXRpYWxpemVfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gaW5fY2hhbjtcbiYjNDM7XHRpbnQgbWN0cF9wY2NfbWF4X210dTtcbiYjNDM7XHRpbnQgaW5ib3hfbWF4X210dTtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFx1MDAyNm91dF9jaGFuLCBvdXRib3gtXHUwMDNlaW5kZXgpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSAmIzQzOyBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuJiM0MztcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbiYjNDM7XHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcdTAwMjZpbl9jaGFuLCBpbmJveC1cdTAwM2VpbmRleCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoaW5fY2hhbi5zaG1lbV9zaXplIFx1MDAzYyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGluYm94X21heF9tdHUgPSBpbl9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5ib3hfbWF4X210dSBcdTAwM2MgbWN0cF9wY2NfbWF4X210dSlcbiYjNDM7XHRcdG1jdHBfcGNjX21heF9tdHUgPSBpbmJveF9tYXhfbXR1O1xuJiM0MztcbiYjNDM7XHRuZGV2LVx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcbiYjNDM7XHRuZGV2LVx1MDAzZW1heF9tdHUgPSBtY3RwX3BjY19tYXhfbXR1O1xuJiM0MztcdG5kZXYtXHUwMDNlbWluX210dSA9IE1DVFBfTUlOX01UVTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF9wY2NfZHJpdmVyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2YWNwaV9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdGFjcGlfaGFuZGxlIGRldl9oYW5kbGU7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGNoYXIgbmFtZVszMl07XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKGRldiwgXCYjMzQ7QWRkaW5nIG1jdHBfcGNjIGRldmljZSBmb3IgSElEICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7XG4mIzQzO1x0ZGV2X2hhbmRsZSA9IGFjcGlfZGV2aWNlX2hhbmRsZShhY3BpX2Rldik7XG4mIzQzO1x0c3RhdHVzID0gYWNwaV93YWxrX3Jlc291cmNlcyhkZXZfaGFuZGxlLCBcJiMzNDtfQ1JTXCYjMzQ7LCBsb29rdXBfcGNjdF9pbmRpY2VzLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2Y29udGV4dCk7XG4mIzQzO1x0aWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZBSUxFRCB0byBsb29rdXAgUENDIGluZGV4ZXMgZnJvbSBDUlNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB3ZSBoYXZlIGV4YWN0bHkgMiBjaGFubmVsczogYW4gb3V0Ym94IGFuZCBhbiBpbmJveC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY29udGV4dC5pbmRleCAhPSAyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7bWN0cHBjYyVkXCYjMzQ7LCBjb250ZXh0LmluYm94X2luZGV4KTtcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLFxuJiM0MztcdFx0XHQgICAgbWN0cF9wY2Nfc2V0dXApO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveC5pbmRleCA9IGNvbnRleHQuaW5ib3hfaW5kZXg7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveC5jbGllbnQuZGV2ID0gZGV2O1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LmRldiA9IGRldjtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNsaWVudC50eF9kb25lID0gbWN0cF9wY2NfdHhfZG9uZTtcbiYjNDM7XHRtY3RwX3BjY19uZGV2LVx1MDAzZWFjcGlfZGV2aWNlID0gYWNwaV9kZXY7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2ID0gbmRldjtcbiYjNDM7XHRhY3BpX2Rldi1cdTAwM2Vkcml2ZXJfZGF0YSA9IG1jdHBfcGNjX25kZXY7XG4mIzQzO1x0cmMgPSBjaGVja19jaGFubmVsX3R5cGVzKG1jdHBfcGNjX25kZXYpO1xuJiM0MztcdGlmIChyYyAhPSAwKVxuJiM0MztcdFx0Z290byBmcmVlX25ldGRldjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGZyZWVfbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5kZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1BDQyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBmcmVlX25ldGRldjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIG1jdHBfY2xlYW51cF9uZXRkZXYsIG5kZXYpO1xuJiM0MztmcmVlX25ldGRldjpcbiYjNDM7XHRmcmVlX25ldGRldihuZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgbWN0cF9wY2NfZGV2aWNlX2lkc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7RE1UMDAwMVwmIzM0OyB9LFxuJiM0MztcdHt9XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIG1jdHBfcGNjX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O21jdHBfcGNjXCYjMzQ7LFxuJiM0MztcdC5jbGFzcyA9IFwmIzM0O1Vua25vd25cJiMzNDssXG4mIzQzO1x0LmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsXG4mIzQzO1x0Lm9wcyA9IHtcbiYjNDM7XHRcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfYWNwaV9kcml2ZXIobWN0cF9wY2NfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBQQ0MgQUNQSSBkZXZpY2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0FkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wY2MuaCBiL2luY2x1ZGUvYWNwaS9wY2MuaFxuaW5kZXggODQwYmZjOTViYWUzMzIuLmJmOTdmNDA3NjgzZGUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hY3BpL3BjYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcGNjLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqbWNoYW47XG5AQCAtMTcsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0dTMyIGxhdGVuY3k7XG4gXHR1MzIgbWF4X2FjY2Vzc19yYXRlO1xuIFx0dTE2IG1pbl90dXJuYXJvdW5kX3RpbWU7XG4mIzQzO1x0ZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlO1xuIH07XG4gXG4gLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovXG5AQCAtMzcsNiAmIzQzOzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIGV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7XG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcbiYjNDM7ZXh0ZXJuIGludFxuJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuQEAgLTQ0LDYgJiM0Mzs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9QQ0NfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmNzhiZDgyYjAxMGUyZmZlMDA4NTVkZDhjNWI1ZjUyMTYwY2UwODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNDowMDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNjk0MGFhM2Q0OThiOTkuLjlmNDhkZWUwZjRjNmRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTU1ODIsNiAmIzQzOzE1NTgyLDExIEBAIEY6CWluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaAogRjoJaW5jbHVkZS9uZXQvbmV0bnMvbWN0cC5oCiBGOgluZXQvbWN0cC8KIAomIzQzO01BTkFHRU1FTlQgQ09NUE9ORU5UIFRSQU5TUE9SVCBQUk9UT0NPTCAoTUNUUCkgb3ZlciBQQ0MgKE1DVFAtUENDKSBEcml2ZXIKJiM0MztNOglBZGFtIFlvdW5nICZsdDthZG1peW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbSZndDsKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jCiYjNDM7CiBNQVBMRSBUUkVFCiBNOglMaWFtIFIuIEhvd2xldHQgJmx0O2xpYW1AaW5mcmFkZWFkLm9yZyZndDsKIFI6CUFsaWNlIFJ5aGwgJmx0O2FsaWNlcnlobEBnb29nbGUuY29tJmd0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L3BjYy5jIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jCmluZGV4IDYzNjg3OWFlMWRiNzZiLi5kYmZlOGRkOTJkZGQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWlsYm94L3BjYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuYwpAQCAtMjcwLDYgJiM0MzsyNzAsOSBAQCBzdGF0aWMgaW50IHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4pCiAJdTY0IHZhbDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwY2hhbi0mZ3Q7dHlwZSA9PSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0ID0gcGNjX2NoYW5fcmVnX3JlYWQoJmFtcDtwY2hhbi0mZ3Q7ZXJyb3IsICZhbXA7dmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzE0LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApCiB7CiAJc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuOwogCXN0cnVjdCBtYm94X2NoYW4gKmNoYW4gPSBwOwomIzQzOwlpbnQgcmM7CiAKIAlwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwogCkBAIC0zMjEsMTQgJiM0MzszMjUsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAocGNoYW4tJmd0O3R5cGUgPT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UgJmFtcDsmYW1wOwotCSAgICAhcGNoYW4tJmd0O2NoYW5faW5fdXNlKQomIzQzOwkgICAgIVJFQURfT05DRShwY2hhbi0mZ3Q7Y2hhbl9pbl91c2UpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoIXBjY19tYm94X2NtZF9jb21wbGV0ZV9jaGVjayhwY2hhbikpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pKQotCQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CXJjID0gcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKTsKIAogCS8qCiAJICogQ2xlYXIgdGhpcyBmbGFnIGFmdGVyIHVwZGF0aW5nIGludGVycnVwdCBhY2sgcmVnaXN0ZXIgYW5kIGp1c3QKQEAgLTMzNiwxNSAmIzQzOzMzOSw2MCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApCiAJICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpcwogCSAqIHJlcXVpcmVkIHRvIGF2b2lkIGFueSBwb3NzaWJsZSByYWNlIGluIHVwZGF0YXRpb24gb2YgdGhpcyBmbGFnLgogCSAqLwotCXBjaGFuLSZndDtjaGFuX2luX3VzZSA9IGZhbHNlOwotCW1ib3hfY2hhbl9yZWNlaXZlZF9kYXRhKGNoYW4sIE5VTEwpOwotCW1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7CiYjNDM7CVdSSVRFX09OQ0UocGNoYW4tJmd0O2NoYW5faW5fdXNlLCBmYWxzZSk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQltYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTsKJiM0MzsJbWJveF9jaGFuX3R4ZG9uZShjaGFuLCByYyk7CiAKIAlwY2NfY2hhbl9hY2tub3dsZWRnZShwY2hhbik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbAomIzQzOyAqICAgICAgICAgICAgICB3aXRob3V0IGFjdGl2YXRpbmcgdGhlIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW4KJiM0MzsgKiAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjaGFubmVsIGRhdGEuCiYjNDM7ICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudAomIzQzOyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0MKJiM0MzsgKiAgICAgIHN1YnNwYWNlcyBhcyBwYXJzZWQgYnkgdGhlIFBDQyBNYWlsYm94IGNvbnRyb2xsZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50CiYjNDM7cGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwomIzQzOwlzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47CiYjNDM7CXN0cnVjdCBtYm94X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghcV9jaGFuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChzdWJzcGFjZV9pZCAmbHQ7IDAgfHwgc3Vic3BhY2VfaWQgJmd0Oz0gcGNjX2NoYW5fY291bnQpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJcGNoYW4gPSBjaGFuX2luZm8gJiM0Mzsgc3Vic3BhY2VfaWQ7CiYjNDM7CWNoYW4gPSBwY2hhbi0mZ3Q7Y2hhbi5tY2hhbjsKJiM0MzsJaWYgKElTX0VSUihjaGFuKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7Q2hhbm5lbCBub3QgZm91bmQgZm9yIGlkeDogJWRcbiYjMzQ7LCBzdWJzcGFjZV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47CiYjNDM7CiYjNDM7CXFfY2hhbi0mZ3Q7c2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLSZndDtzaG1lbV9iYXNlX2FkZHI7CiYjNDM7CXFfY2hhbi0mZ3Q7c2htZW0gPSBOVUxMOwomIzQzOwlxX2NoYW4tJmd0O3NobWVtX3NpemUgPSBwY2NfbWNoYW4tJmd0O3NobWVtX3NpemU7CiYjNDM7CXFfY2hhbi0mZ3Q7bGF0ZW5jeSA9IHBjY19tY2hhbi0mZ3Q7bGF0ZW5jeTsKJiM0MzsJcV9jaGFuLSZndDttYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tJmd0O21heF9hY2Nlc3NfcmF0ZTsKJiM0MzsJcV9jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lID0gcGNjX21jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lOwomIzQzOwlxX2NoYW4tJmd0O3R5cGUgPSBwY2NfbWNoYW4tJmd0O3R5cGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTsKJiM0MzsKIC8qKgogICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvCiAgKgkJcmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXkKQEAgLTM2MCw3ICYjNDM7NDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKQogc3RydWN0IHBjY19tYm94X2NoYW4gKgogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCkKIHsKLQlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjsKIAlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuOwogCWludCByYzsKQEAgLTM3NSwyMCAmIzQzOzQyMiwxMCBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKQogCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwogCX0KIAotCXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47Ci0JcGNjX21jaGFuLSZndDtzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tJmd0O3NobWVtX2Jhc2VfYWRkciwKLQkJCQkJICAgcGNjX21jaGFuLSZndDtzaG1lbV9zaXplKTsKLQlpZiAoIXBjY19tY2hhbi0mZ3Q7c2htZW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7Ci0KIAlyYyA9IG1ib3hfYmluZF9jbGllbnQoY2hhbiwgY2wpOwotCWlmIChyYykgewotCQlpb3VubWFwKHBjY19tY2hhbi0mZ3Q7c2htZW0pOwotCQlwY2NfbWNoYW4tJmd0O3NobWVtID0gTlVMTDsKLQkJcmV0dXJuIEVSUl9QVFIocmMpOwotCX0KLQotCXJldHVybiBwY2NfbWNoYW47CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiYjNDM7CXJldHVybiAgJmFtcDtwY2hhbi0mZ3Q7Y2hhbjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7CiAKQEAgLTQwMCwxOSAmIzQzOzQzNywxMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpOwogICovCiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pCiB7Ci0Jc3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLSZndDttY2hhbjsKLQlzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW5faW5mbzsKLQlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjsKJiM0MzsJc3RydWN0IG1ib3hfY2hhbiAqY2hhbjsKIAomIzQzOwlpZiAoIXBjaGFuKQomIzQzOwkJcmV0dXJuOwomIzQzOwljaGFuID0gcGNoYW4tJmd0O21jaGFuOwogCWlmICghY2hhbiB8fCAhY2hhbi0mZ3Q7Y2wpCiAJCXJldHVybjsKLQlwY2hhbl9pbmZvID0gY2hhbi0mZ3Q7Y29uX3ByaXY7Ci0JcGNjX21ib3hfY2hhbiA9ICZhbXA7cGNoYW5faW5mby0mZ3Q7Y2hhbjsKLQlpZiAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pIHsKLQkJaW91bm1hcChwY2NfbWJveF9jaGFuLSZndDtzaG1lbSk7Ci0JCXBjY19tYm94X2NoYW4tJmd0O3NobWVtID0gTlVMTDsKLQl9Ci0KIAltYm94X2ZyZWVfY2hhbm5lbChjaGFuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X2ZyZWVfY2hhbm5lbCk7CkBAIC00NDAsNyAmIzQzOzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQogCiAJcmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKCZhbXA7cGNoYW4tJmd0O2RiKTsKIAlpZiAoIXJldCAmYW1wOyZhbXA7IHBjaGFuLSZndDtwbGF0X2lycSAmZ3Q7IDApCi0JCXBjaGFuLSZndDtjaGFuX2luX3VzZSA9IHRydWU7CiYjNDM7CQlXUklURV9PTkNFKHBjaGFuLSZndDtjaGFuX2luX3VzZSwgdHJ1ZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDYyLDkgJiM0Mzs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogewogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJjOwogCiYjNDM7CXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47CiYjNDM7CXBjY19tY2hhbi0mZ3Q7c2htZW0gPSBhY3BpX29zX2lvcmVtYXAocGNjX21jaGFuLSZndDtzaG1lbV9iYXNlX2FkZHIsCiYjNDM7CQkJCQkgICBwY2NfbWNoYW4tJmd0O3NobWVtX3NpemUpOwomIzQzOwlpZiAocGNjX21jaGFuLSZndDtzaG1lbSAgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCS8qCiAJICogQ2xlYXIgYW5kIGFja25vd2xlZGdlIGFueSBwZW5kaW5nIGludGVycnVwdHMgb24gcmVzcG9uZGVyIGNoYW5uZWwKIAkgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdApAQCAtNDc5LDYgJiM0Mzs1MTYsOCBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pCiAJCWlmICh1bmxpa2VseShyYykpIHsKIAkJCWRldl9lcnIoY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBQQ0MgaW50ZXJydXB0ICVkXG4mIzM0OywKIAkJCQlwY2hhbi0mZ3Q7cGxhdF9pcnEpOwomIzQzOwkJCWlvdW5tYXAocGNjX21jaGFuLSZndDtzaG1lbSk7CiYjNDM7CQkJcGNjX21jaGFuLSZndDtzaG1lbSA9IE5VTEw7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CkBAIC00ODgsMTUgJiM0Mzs1MjcsMjMgQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogCiAvKioKICAqIHBjY19zaHV0ZG93biAtIENhbGxlZCBmcm9tIE1haWxib3ggQ29udHJvbGxlciBjb2RlLiBVc2VkIGhlcmUKLSAqCQl0byBmcmVlIHRoZSBpbnRlcnJ1cHQuCiYjNDM7ICoJCXRvIGZyZWUgdGhlIGludGVycnVwdCBhbmQgdW5tYXAgdGhlIHNoYXJlZCBtZW1vcnkuCiAgKiBAY2hhbjogUG9pbnRlciB0byBNYWlsYm94IGNoYW5uZWwgdG8gc2h1dGRvd24uCiAgKi8KIHN0YXRpYyB2b2lkIHBjY19zaHV0ZG93bihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogewogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjsKIAogCWlmIChwY2hhbi0mZ3Q7cGxhdF9pcnEgJmd0OyAwKQogCQlkZXZtX2ZyZWVfaXJxKGNoYW4tJmd0O21ib3gtJmd0O2RldiwgcGNoYW4tJmd0O3BsYXRfaXJxLCBjaGFuKTsKJiM0MzsJc3luY2hyb25pemVfaXJxKHBjaGFuLSZndDtwbGF0X2lycSk7CiYjNDM7CiYjNDM7CXBjY19tYm94X2NoYW4gPSAmYW1wO3BjaGFuLSZndDtjaGFuOwomIzQzOwlpZiAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pIHsKJiM0MzsJCWlvdW5tYXAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pOwomIzQzOwkJcGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0gPSBOVUxMOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWJveF9jaGFuX29wcyBwY2NfY2hhbl9vcHMgPSB7CkBAIC04MzEsNiAmIzQzOzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJcGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTsKIAogCQlwY2hhbi0mZ3Q7dHlwZSA9IHBjY3RfZW50cnktJmd0O3R5cGU7CiYjNDM7CQlwY2hhbi0mZ3Q7Y2hhbi50eXBlID0gcGNjdF9lbnRyeS0mZ3Q7dHlwZTsKIAkJcGNjdF9lbnRyeSA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKikKIAkJCSgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSAmIzQzOyBwY2N0X2VudHJ5LSZndDtsZW5ndGgpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwppbmRleCBjZjMyNWFiMGIxZWY1NS4uYzliOGYzOGZmMGZiOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcKQEAgLTQ3LDYgJiM0Mzs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDCiAJICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzCiAJICBoYXZpbmcgYSAmIzM0O21jdHAtY29udHJvbGxlciYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuCiAKJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDCiYjNDM7CXRyaXN0YXRlICYjMzQ7TUNUUCBQQ0MgdHJhbnNwb3J0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJCiYjNDM7CWRlcGVuZHMgb24gUENDCiYjNDM7CWRlcGVuZHMgb24gQ1BVX0xJVFRMRV9FTkRJQU4KJiM0MzsJaGVscAomIzQzOwkgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBQQ0MgdHJhbnNwb3J0LAomIzQzOwkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIHZpYSBBQ1BJIGZvciBlYWNoCiYjNDM7CSAgZW50cnkgaW4gdGhlIERTRFQvU1NEVCB0aGF0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIuIFRoZSBQbGF0Zm9ybQomIzQzOwkgIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKJiM0MzsJICBlbnRyaWVzIGluIHRoZSBQQ0NULgomIzQzOwomIzQzOwkgIFNheSB5IGhlcmUgaWYgeW91IG5lZWQgdG8gY29ubmVjdCB0byBNQ1RQIGVuZHBvaW50cyBvdmVyIFBDQy4gVG8KJiM0MzsJICBjb21waWxlIGFzIGEgbW9kdWxlLCB1c2UgbTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RwLXBjYy4KJiM0MzsKIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0IKIAl0cmlzdGF0ZSAmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCYjMzQ7CiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlCmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDUgQEAKIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2MubwomIzQzO29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICYjNDM7PSBtY3RwLXBjYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSAmIzQzOz0gbWN0cC11c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2M0ZjNiMjE1MTM3MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYwpAQCAtMCwwICYjNDM7MSw0NjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC1wY2MuYyAtIERyaXZlciBmb3IgTUNUUCBvdmVyIFBDQy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTEMKJiM0MzsgKgomIzQzOyAqLwomIzQzOwomIzQzOy8qIEltcGxlbWVudGF0aW9uIG9mCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyOTIucGRmCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHJ0aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthY3BpL2FjcGlfYnVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvYWNwaV9kcml2ZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvYWNyZXN0eXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9hY3RibC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3BjYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbWN0cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbWN0cGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBNQ1RQX1NJR05BVFVSRSAgICAgICAgICAmIzM0O01DVFAmIzM0OwomIzQzOyNkZWZpbmUgTUNUUF9TSUdOQVRVUkVfTEVOR1RIICAgKHNpemVvZihNQ1RQX1NJR05BVFVSRSkgLSAxKQomIzQzOyNkZWZpbmUgTUNUUF9NSU5fTVRVICAgICAgICAgICAgNjgKJiM0MzsjZGVmaW5lIFBDQ19IRUFERVJfU0laRSAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkKJiM0MzsjZGVmaW5lIE1DVFBfUENDX01JTl9TSVpFICAgICAgIChQQ0NfSEVBREVSX1NJWkUgJiM0MzsgTUNUUF9NSU5fTVRVKQomIzQzOyNkZWZpbmUgUENDX0VYVFJBX0xFTiAgICAgICAgICAgKFBDQ19IRUFERVJfU0laRSAtIHNpemVvZihwY2NfaGVhZGVyLmNvbW1hbmQpKQomIzQzO3N0cnVjdCBtY3RwX3BjY19tYWlsYm94IHsKJiM0MzsJdTMyIGluZGV4OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IG1ib3hfY2xpZW50IGNsaWVudDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFRoZSBuZXRkZXYgc3RydWN0dXJlLiBPbmUgb2YgdGhlc2UgcGVyIFBDQyBhZGFwdGVyLiAqLwomIzQzO3N0cnVjdCBtY3RwX3BjY19uZGV2IHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBvdXRib3g7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2soc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5IHBjY19oZWFkZXI7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7CiYjNDM7CXN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCBzaXplOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTsKJiM0MzsJaW5ib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O2luYm94OwomIzQzOwltZW1jcHlfZnJvbWlvKCZhbXA7cGNjX2hlYWRlciwgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtLCBzaXplb2YocGNjX2hlYWRlcikpOwomIzQzOwomIzQzOwkvLyBUaGUgbWVzc2FnZSBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlIFBDQyBjb21tYW5kIGluZGljYXRpbmcgaXQgaXMgYW4gTUNUUAomIzQzOwkvLyBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSBNQ1RQIGhlYWRlciwgb3Igd2UgaGF2ZSBhIG1hbGZvcm1lZCBtZXNzYWdlLgomIzQzOwlpZiAocGNjX2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSkKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CS8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsCiYjNDM7CS8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS4KJiM0MzsJaWYgKHBjY19oZWFkZXIubGVuZ3RoICZndDsgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtX3NpemUgLSBQQ0NfRVhUUkFfTEVOKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKG1lbWNtcCgmYW1wO3BjY19oZWFkZXIuY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCkgIT0gMCkKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CXNpemUgPSBwY2NfaGVhZGVyLmxlbmd0aCAmIzQzOyBQQ0NfRVhUUkFfTEVOOwomIzQzOwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG1jdHBfcGNjX25kZXYtJmd0O25kZXYsIHNpemUpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CXNrYl9wdXQoc2tiLCBzaXplKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApOwomIzQzOwltZW1jcHlfZnJvbWlvKHNrYi0mZ3Q7ZGF0YSwgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtLCBzaXplKTsKJiM0MzsJZGV2X2RzdGF0c19yeF9hZGQobWN0cF9wY2NfbmRldi0mZ3Q7bmRldiwgc2l6ZSk7CiYjNDM7CXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHBjY19oZWFkZXIpKTsKJiM0MzsJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CWNiID0gX19tY3RwX2NiKHNrYik7CiYjNDM7CWNiLSZndDtoYWxlbiA9IDA7CiYjNDM7CW5ldGlmX3J4KHNrYik7CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MztlcnJvcjoKJiM0MzsJZGV2X2RzdGF0c19yeF9kcm9wcGVkKG1jdHBfcGNjX25kZXYtJmd0O25kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSAqcGNjX2hlYWRlcjsKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1wbmQgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IGxlbiA9IHNrYi0mZ3Q7bGVuOwomIzQzOwomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSkpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwlwY2NfaGVhZGVyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7c2lnbmF0dXJlID0gUENDX1NJR05BVFVSRSB8IG1wbmQtJmd0O291dGJveC5pbmRleDsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7ZmxhZ3MgPSBQQ0NfQ01EX0NPTVBMRVRJT05fTk9USUZZOwomIzQzOwltZW1jcHkoJmFtcDtwY2NfaGVhZGVyLSZndDtjb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKTsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7bGVuZ3RoID0gbGVuICYjNDM7IE1DVFBfU0lHTkFUVVJFX0xFTkdUSDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZndDsgbXBuZC0mZ3Q7b3V0Ym94LmNoYW4tJmd0O3NobWVtX3NpemUpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb24KJiM0MzsJICogYW5vdGhlciB0aHJlYWQuIElmIHRoYXQgaXMgdGhlIGNhc2UsIGFuZCB3ZSBkb24mIzM5O3QgcmVzdGFydAomIzQzOwkgKiB0aGUgcXVldWUsIGl0IHdpbGwgcmVtYWluIHBlcm1hbmVudGx5IHN0b3BwZWQuCiYjNDM7CSAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlCiYjNDM7CSAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy4KJiM0MzsJICovCiYjNDM7CW5ldGlmX3N0b3BfcXVldWUobmRldik7CiYjNDM7CWlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLSZndDtvdXRib3guY2hhbi0mZ3Q7bWNoYW4sIHNrYikgJmd0Oz0gMCkgewomIzQzOwkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8vIFJlbW92ZSB0aGUgaGVhZGVyIGluIGNhc2UgaXQgZ2V0cyBzZW50IGFnYWluCiYjNDM7CQlza2JfcHVsbChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwl9CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CiYjNDM7ZXJyb3I6CiYjNDM7CWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfcGNjX3R4X3ByZXBhcmUoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZzsKJiM0MzsKJiM0MzsJbWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpOwomIzQzOwlvdXRib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O291dGJveDsKJiM0MzsKJiM0MzsJLyogVGhlIFBDQyBNYWlsYm94IHR5cGljYWxseSBkb2VzIG5vdCBtYWtlIHVzZSBvZiB0aGUgbXNzZyBwb2ludGVyCiYjNDM7CSAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LgomIzQzOwkgKiBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgbm9uLW51bGw7IGl0IGlzIHBvc3NpYmxlCiYjNDM7CSAqIHRoYXQgYSBjaGFuZ2UgaW4gdGhlIE1haWxib3ggbGV2ZWwgd2lsbCBicmVhayB0aGF0IGFzc3VtcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJbmV0ZGV2X3dhcm5fb25jZShtY3RwX3BjY19uZGV2LSZndDtuZGV2LAomIzQzOwkJCQkgJiMzNDslcyBjYWxsZWQgd2l0aCBudWxsIG1lc3NhZ2UuXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW1lbWNweV90b2lvKG91dGJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW0sIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9kb25lKHN0cnVjdCBtYm94X2NsaWVudCAqYywgdm9pZCAqbXNzZywgaW50IHJjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlcmUgaXMgYSBwYWNrZXQgaW4gZmxpZ2h0IGR1cmluZyBkcml2ZXIgY2xlYW51cAomIzQzOwkgKiBJdCBtYXkgaGF2ZSBiZWVuIGZyZWVkIGFscmVhZHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1zc2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoYywgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpOwomIzQzOwomIzQzOwkvKiBVc2UgYW4gSVJRIHNhZmUgdXBkYXRlIGFzIHRoaXMgaXMgY2FsbGVkIGZyb20gSEFSRCBJUlEgaW5zdGVhZCBvZgomIzQzOwkgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LSZndDtuZGV2LCBza2ItJmd0O2xlbik7CiYjNDM7CSAqLwomIzQzOwlkc3RhdHMgPSB0aGlzX2NwdV9wdHIobWN0cF9wY2NfbmRldi0mZ3Q7bmRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDt0eF9kcm9wcyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBza2ItJmd0O2xlbik7CiYjNDM7CX0KJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwomIzQzOwluZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtJmd0O25kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94LCAqaW5ib3g7CiYjNDM7CiYjNDM7CW91dGJveCA9ICZhbXA7bWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94OwomIzQzOwlpbmJveCA9ICZhbXA7bWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3g7CiYjNDM7CiYjNDM7CW91dGJveC0mZ3Q7Y2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgmYW1wO291dGJveC0mZ3Q7Y2xpZW50LCBvdXRib3gtJmd0O2luZGV4KTsKJiM0MzsJaWYgKElTX0VSUihvdXRib3gtJmd0O2NoYW4pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJaWYgKG91dGJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW1fc2l6ZSAmbHQ7IE1DVFBfUENDX01JTl9TSVpFKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWluYm94LSZndDtjbGllbnQucnhfY2FsbGJhY2sgPSBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2s7CiYjNDM7CWluYm94LSZndDtjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7aW5ib3gtJmd0O2NsaWVudCwgaW5ib3gtJmd0O2luZGV4KTsKJiM0MzsJaWYgKElTX0VSUihpbmJveC0mZ3Q7Y2hhbikpIHsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtJmd0O2NoYW4pOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoaW5ib3gtJmd0O2NoYW4pOwomIzQzOwl9CiYjNDM7CWlmIChpbmJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW1fc2l6ZSAmbHQ7IE1DVFBfUENDX01JTl9TSVpFKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChpbmJveC0mZ3Q7Y2hhbik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtY3RwX3BjY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudCwgaWR4OwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CWNoYW4gPSBtY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2hhbi0mZ3Q7bWNoYW47CiYjNDM7CXBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LSZndDtpbmJveC5jaGFuKTsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3guY2hhbiA9IE5VTEw7CiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2NoYW4tJmd0O2xvY2spIHsKJiM0MzsJCWlmIChjaGFuLSZndDthY3RpdmVfcmVxICE9ICBNQk9YX05PX01TRykgewomIzQzOwkJCXNrYiA9IGNoYW4tJmd0O2FjdGl2ZV9yZXE7CiYjNDM7CQkJY2hhbi0mZ3Q7YWN0aXZlX3JlcSA9IE1CT1hfTk9fTVNHOwomIzQzOwkJCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJCQlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiYjNDM7CQl9CiYjNDM7CQl3aGlsZSAoY2hhbi0mZ3Q7bXNnX2NvdW50ICZndDsgMCkgewomIzQzOwkJCWNvdW50ID0gY2hhbi0mZ3Q7bXNnX2NvdW50OwomIzQzOwkJCWlkeCA9IGNoYW4tJmd0O21zZ19mcmVlOwomIzQzOwkJCWlmIChpZHggJmd0Oz0gY291bnQpCiYjNDM7CQkJCWlkeCAtPSBjb3VudDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWlkeCAmIzQzOz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDsKJiM0MzsJCQlza2IgPSBjaGFuLSZndDttc2dfZGF0YVtpZHhdOwomIzQzOwkJCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJCQlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiYjNDM7CQkJY2hhbi0mZ3Q7bXNnX2NvdW50LS07CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtJmd0O291dGJveC5jaGFuKTsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94LmNoYW4gPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgYmVjYXVzZSB0aGUgcmluZyBidWZmZXIgd2FzIGZ1bGwKJiM0MzsJICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzCiYjNDM7CSAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZQomIzQzOwkgKiBuZXRkZXYgaXMgcmUtb3BlbmVkLgomIzQzOwkgKi8KJiM0MzsJbmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LSZndDtuZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5kb19vcGVuID0gbWN0cF9wY2Nfb3BlbiwKJiM0MzsJLm5kb19zdG9wID0gbWN0cF9wY2Nfc3RvcCwKJiM0MzsJLm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O3R5cGUgPSBBUlBIUkRfTUNUUDsKJiM0MzsJbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTsKJiM0MzsJbmRldi0mZ3Q7dHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47CiYjNDM7CW5kZXYtJmd0O2ZsYWdzID0gSUZGX05PQVJQOwomIzQzOwluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDttY3RwX3BjY19uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7CiYjNDM7CWludCBpbmRleDsKJiM0MzsJdTMyIGluYm94X2luZGV4OwomIzQzOwl1MzIgb3V0Ym94X2luZGV4OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCiYjNDM7CQkJCSAgICAgICB2b2lkICpjb250ZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0ICpsdWMgPSBjb250ZXh0OwomIzQzOwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgKmFkZHI7CiYjNDM7CiYjNDM7CWlmIChhcmVzLSZndDt0eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMzIpCiYjNDM7CQlyZXR1cm4gQUVfT0s7CiYjNDM7CiYjNDM7CWFkZHIgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMiwgJmFtcDthcmVzLSZndDtkYXRhKTsKJiM0MzsJc3dpdGNoIChsdWMtJmd0O2luZGV4KSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCWx1Yy0mZ3Q7b3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAxOgomIzQzOwkJbHVjLSZndDtpbmJveF9pbmRleCA9IGFkZHJbMF0uYWRkcmVzcy5taW5pbXVtOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gQUVfRVJST1I7CiYjNDM7CX0KJiM0MzsJbHVjLSZndDtpbmRleCYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBBRV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkYXRhOwomIzQzOwomIzQzOwltY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfdHlwZXMoc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuIGNoYW47CiYjNDM7CWludCBhY3R1YWxfdHlwZTsKJiM0MzsKJiM0MzsJb3V0Ym94ID0gJmFtcDttY3RwX3BjY19uZGV2LSZndDtvdXRib3g7CiYjNDM7CWlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKCZhbXA7Y2hhbiwgb3V0Ym94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJYWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7CiYjNDM7CWlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX01BU1RFUl9TVUJTUEFDRSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7TUNUUC1QQ0Mgb3V0Ym94IGNoYW5uZWwgd3JvbmcgdHlwZTogJWQmIzM0OywgYWN0dWFsX3R5cGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5ib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O2luYm94OwomIzQzOwlpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbCgmYW1wO2NoYW4sIGluYm94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJYWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7CiYjNDM7CWlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtNQ1RQLVBDQyBpbmJveCBjaGFubmVsIHdyb25nIHR5cGU6ICVkJiMzNDssIGFjdHVhbF90eXBlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGluaXRpYWxpemVfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3g7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICppbmJveDsKJiM0MzsJc3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuIGluX2NoYW47CiYjNDM7CWludCBtY3RwX3BjY19tYXhfbXR1OwomIzQzOwlpbnQgaW5ib3hfbWF4X210dTsKJiM0MzsKJiM0MzsJbWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlvdXRib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O291dGJveDsKJiM0MzsJaWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoJmFtcDtvdXRfY2hhbiwgb3V0Ym94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKG91dF9jaGFuLnNobWVtX3NpemUgJmx0OyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwltY3RwX3BjY19tYXhfbXR1ID0gb3V0X2NoYW4uc2htZW1fc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7CiYjNDM7CWluYm94ID0gJmFtcDttY3RwX3BjY19uZGV2LSZndDtpbmJveDsKJiM0MzsJaWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoJmFtcDtpbl9jaGFuLCBpbmJveC0mZ3Q7aW5kZXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChpbl9jaGFuLnNobWVtX3NpemUgJmx0OyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpbmJveF9tYXhfbXR1ID0gaW5fY2hhbi5zaG1lbV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTsKJiM0MzsKJiM0MzsJaWYgKGluYm94X21heF9tdHUgJmx0OyBtY3RwX3BjY19tYXhfbXR1KQomIzQzOwkJbWN0cF9wY2NfbWF4X210dSA9IGluYm94X21heF9tdHU7CiYjNDM7CiYjNDM7CW5kZXYtJmd0O210dSA9IE1DVFBfTUlOX01UVTsKJiM0MzsJbmRldi0mZ3Q7bWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7CiYjNDM7CW5kZXYtJmd0O21pbl9tdHUgPSBNQ1RQX01JTl9NVFU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCBjb250ZXh0ID0gezB9OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDthY3BpX2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwljaGFyIG5hbWVbMzJdOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O0FkZGluZyBtY3RwX3BjYyBkZXZpY2UgZm9yIEhJRCAlc1xuJiMzNDssCiYjNDM7CQlhY3BpX2RldmljZV9oaWQoYWNwaV9kZXYpKTsKJiM0MzsJZGV2X2hhbmRsZSA9IGFjcGlfZGV2aWNlX2hhbmRsZShhY3BpX2Rldik7CiYjNDM7CXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2X2hhbmRsZSwgJiMzNDtfQ1JTJiMzNDssIGxvb2t1cF9wY2N0X2luZGljZXMsCiYjNDM7CQkJCSAgICAgJmFtcDtjb250ZXh0KTsKJiM0MzsJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RkFJTEVEIHRvIGxvb2t1cCBQQ0MgaW5kZXhlcyBmcm9tIENSU1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHdlIGhhdmUgZXhhY3RseSAyIGNoYW5uZWxzOiBhbiBvdXRib3ggYW5kIGFuIGluYm94LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNvbnRleHQuaW5kZXggIT0gMikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7bWN0cHBjYyVkJiMzNDssIGNvbnRleHQuaW5ib3hfaW5kZXgpOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLAomIzQzOwkJCSAgICBtY3RwX3BjY19zZXR1cCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CW1jdHBfcGNjX25kZXYtJmd0O2luYm94LmluZGV4ID0gY29udGV4dC5pbmJveF9pbmRleDsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3guY2xpZW50LmRldiA9IGRldjsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7CiYjNDM7CW1jdHBfcGNjX25kZXYtJmd0O291dGJveC5jbGllbnQuZGV2ID0gZGV2OwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2xpZW50LnR4X2RvbmUgPSBtY3RwX3BjY190eF9kb25lOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDthY3BpX2RldmljZSA9IGFjcGlfZGV2OwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJYWNwaV9kZXYtJmd0O2RyaXZlcl9kYXRhID0gbWN0cF9wY2NfbmRldjsKJiM0MzsJcmMgPSBjaGVja19jaGFubmVsX3R5cGVzKG1jdHBfcGNjX25kZXYpOwomIzQzOwlpZiAocmMgIT0gMCkKJiM0MzsJCWdvdG8gZnJlZV9uZXRkZXY7CiYjNDM7CiYjNDM7CXJjID0gaW5pdGlhbGl6ZV9tdHUobmRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZnJlZV9uZXRkZXY7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfUENDKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBmcmVlX25ldGRldjsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIG1jdHBfY2xlYW51cF9uZXRkZXYsIG5kZXYpOwomIzQzO2ZyZWVfbmV0ZGV2OgomIzQzOwlmcmVlX25ldGRldihuZGV2KTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHsKJiM0MzsJeyAmIzM0O0RNVDAwMDEmIzM0OyB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDttY3RwX3BjYyYjMzQ7LAomIzQzOwkuY2xhc3MgPSAmIzM0O1Vua25vd24mIzM0OywKJiM0MzsJLmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsCiYjNDM7CS5vcHMgPSB7CiYjNDM7CQkuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9hY3BpX2RyaXZlcihtY3RwX3BjY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TUNUUCBQQ0MgQUNQSSBkZXZpY2UmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0FkYW0gWW91bmcgJmx0O2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tJmd0OyYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wY2MuaCBiL2luY2x1ZGUvYWNwaS9wY2MuaAppbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wY2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcGNjLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jb250cm9sbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwogCiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiAJc3RydWN0IG1ib3hfY2hhbiAqbWNoYW47CkBAIC0xNyw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiAJdTMyIGxhdGVuY3k7CiAJdTMyIG1heF9hY2Nlc3NfcmF0ZTsKIAl1MTYgbWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlOwogfTsKIAogLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovCkBAIC0zNyw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiBleHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKgogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7CiBleHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pOwomIzQzO2V4dGVybiBpbnQKJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqCiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKQpAQCAtNDQsNiAmIzQzOzQ4LDExIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpCiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3BjY19tYm94X3F1ZXJ5X2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKnFfY2hhbiwgaW50IHN1YnNwYWNlX2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZiAvKiBfUENDX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUNUUC9QQ0MgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBkcml2ZXIsIGBtY3RwLXBjYy5jYCwgaW1wbGVtZW50aW5nIE1DVFAgb3ZlciBQQ0MuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGEgbmV3IG5ldHdvcmsgZHJpdmVyLCBhbmQgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBuZXcgbmV0d29yayBkcml2ZXJzIGFyZSBhbHdheXMgd29ydGggYSBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgaW50cm9kdWNlcyBhIGBNQ1RQX1RSQU5TUE9SVF9QQ0NgIEtjb25maWcgb3B0aW9uIGFuZCB0b3VjaGVzIGBwY2MuY2Agd2l0aCB0aGUgYWRkaXRpb24gb2YgYHBjY19tYm94X3F1ZXJ5X2NoYW5uZWxgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBpbnRlcnJ1cHQgYW5kIGNoYW5uZWwgcmVxdWVzdCBsb2dpYy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENDLCBiZWluZyBBQ1BJLWJhc2VkLCBtYWtlcyB0aGlzIGEga2V5IHF1ZXN0aW9uLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdXNlcyB0aGUgQUNQSSBkZXZpY2UgSUQgYERNVDAwMDFgLiBDYW4gd2UgdHJpY2sgUUVNVSBpbnRvIGVtdWxhdGluZyB0aGlzPyBTeXprYWxsZXImIzM5O3MgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIGNvbWUgdG8gbWluZC4gQnV0LCB3YWl0Li4uIFN5emthbGxlciYjMzk7cyBBQ1BJIHRhYmxlIGluamVjdGlvbiBmb3IgUENDIGlzbiYjMzk7dCBleGFjdGx5IHN0cmFpZ2h0Zm9yd2FyZCBvciBnZW5lcmljLiBUaGlzIGlzbiYjMzk7dCBhICpkaXJlY3QqIEFDUEkgZHJpdmVyLiBpdCYjMzk7cyBhICpuZXR3b3JrKiBkcml2ZXIuCgpPa2F5LCBsZXQmIzM5O3MgcmVmb2N1cy4gSWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgYG1jdHBfcGNjX2RyaXZlcl9hZGRgIHdvbiYjMzk7dCBldmVuIGJlIGNhbGxlZC4gV2UgbmVlZCB0byBmaW5kIGEgdHJpZ2dlci4gQ2FuIHN5emthbGxlciBkbyAqYW55dGhpbmcqIHdpdGggQUNQSSBkZXZpY2UgaW5zdGFudGlhdGlvbiBoZXJlPyBOb3BlLCB0aGUgZ2VuZXJpYyBgc3l6X2FjcGlfLi4uYCB3b24mIzM5O3QgaGVscC4gV2UgY2FuIGZ1enogbmV0ZGV2IG9wcywgYnV0IHdlIG5lZWQgdGhlIGRldmljZSB0byBiZSBjcmVhdGVkIHNvbWVob3cuIE5vLCBpdCYjMzk7cyBhbiBBQ1BJIGRyaXZlci4KClRoaW5raW5nIGFib3V0IGl0IG1vcmUsIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdG91Y2ggQUNQSSBkcml2ZXJzIHVubGVzcyB0aGV5IGNhbiBiZSBpbnN0YW50aWF0ZWQuIEJ1dCBoZXksIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGluIGBwY2MuY2AuIEdpdmVuIHRoYXQgYHBjY19tYm94X3F1ZXJ5X2NoYW5uZWxgIGlzIGFkZGVkLCBJcyBgTUNUUF9UUkFOU1BPUlRfUENDYCBzdGlsbCB3b3J0aCBmdXp6aW5nPyBZZXMsIGEgbmV3IG5ldHdvcmsgZHJpdmVyLgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbWN0cF9wY2MuY2AuIEl0IHJlZ2lzdGVycyBhIG5ldGRldiB1c2luZyBgbWN0cF9yZWdpc3Rlcl9uZXRkZXZgLCB3aXRoIGBtY3RwX3BjY19uZXRkZXZfb3BzYCBjb250YWluaW5nIGBuZG9fc3RhcnRfeG1pdCA9IG1jdHBfcGNjX3R4YC4gT2theSwgc28gaWYgdGhlIGRldmljZSAqY2FuKiBiZSBjcmVhdGVkLCB3ZSYjMzk7cmUgZ29sZGVuLiBGdXp6aW5nIHRoZSBuZXRkZXYgb3BlcmF0aW9ucyBiZWNvbWVzIGZlYXNpYmxlLgoKQ2FuIHN5emthbGxlciBjcmVhdGUgQUNQSSBkZXZpY2VzPyBBZ2FpbiwgdGhlIGFuc3dlciBpcyBuby4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIEFDUEkgZGV2aWNlIGluc3RhbnRpYXRvci4KCkxldCYjMzk7cyBjaGVjayB0aGUgcHJvbXB0ISBJdCBzYXlzIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsuIElzIFBDQyBlbXVsYXRlZCBpbiBRRU1VPyBRRU1VIGhhcyBBQ1BJIHN1cHBvcnQsIGJ1dCBQQ0MsIHNwZWNpZmljYWxseT8gUHJvYmFibHkgbm90LiBJdCYjMzk7cyBhbiBBQ1BJIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gdGhlIGZpcm13YXJlIHByb3ZpZGluZyBBQ1BJIHRhYmxlcy4gSWYgdGhlIGZpcm13YXJlIGRvZXNuJiMzOTt0IHByb3ZpZGUgaXQsIHRoZSBkcml2ZXIgd29uJiMzOTt0IHByb2JlLgoKU28sIGRvIHdlIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgc2VlIHdoYXQgaGFwcGVucywgb3IgaXMgdGhpcyBkZWFkIGVuZD8KCkhvd2V2ZXIsIHRoZSBwcm9tcHQgYWxzbyBzYXlzLCAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNvIGxldCYjMzk7cyBmaW5kIGlmIHdlIGNhbiBleGVjdXRlIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3BjY19kcml2ZXJfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz0zNTA9c3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtMzgzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjM4NDpzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldilcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy0zODUte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz00NTE9c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jLTQ1NS1cdC5vcHMgPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmM6NDU2Olx0XHQuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy00NTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhbiBBQ1BJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGRldmljZXMgZGVzY3JpYmVkIGluIHRoZSBEU0RUL1NTRFQgdGFibGVzLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlIG9yLCBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGUgZW11bGF0b3IgaXRzZWxmLiBJIGtub3cgdGhhdCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgaW50byBMaW51eCBpcyBwb3NzaWJsZSDigJMgd2UgY2FuIGRvIGl0IHRocm91Z2ggY29uZmlnZnMgKGBDT05GSUdfQUNQSV9DT05GSUdGU2ApIG9yIHZpYSBpbml0cmQuIEkmIzM5O20gcHJldHR5IHN1cmUgU3l6a2FsbGVyIGlzbiYjMzk7dCBzZXQgdXAgdG8gZG8gdGhhdCBkeW5hbWljYWxseSBmb3IganVzdCBhbnkgYXJiaXRyYXJ5IGRldmljZSByaWdodCBub3csIHRob3VnaC4KCkhtbSwgd2FpdC4uLiBpcyB0aGVyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIE1DVFA/IEFoLCB5ZXMhIEkmIzM5O20gc2VlaW5nIGl0IG5vdzogTUNUUCBvdmVyIHNlcmlhbCAoYG1jdHAtc2VyaWFsYCksIEkyQyAoYG1jdHAtaTJjYCksIEkzQyAoYG1jdHAtaTNjYCksIGFuZCBVU0IgKGBtY3RwLXVzYmApLiBUaGlzIGlzIHNwZWNpZmljYWxseSBNQ1RQIG92ZXIgUENDLiBUaGUgY2hhbGxlbmdlIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBgbWN0cF9wY2NfZHJpdmVyX2FkZGA/IEl0IGxvb2tzIGxpa2UgaXQgd291bGQgYmUgdG91Z2ggd2l0aG91dCBjcmFmdGluZyBjdXN0b20gQUNQSSB0YWJsZXMuCgpCdXQgd2FpdCwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9tYWlsYm94L3BjYy5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IG1vZGlmaWNhdGlvbnMgdGhleSYjMzk7dmUgbWFkZSB0byBgcGNjLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBwcm9iYWJseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfaXJxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYz0yODk9c3RhdGljIHZvaWQgcGNjX2NoYW5fYWNrbm93bGVkZ2Uoc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zMDktLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzEwOiAqIHBjY19tYm94X2lycSAtIFBDQyBtYWlsYm94IGludGVycnVwdCBoYW5kbGVyXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzExLSAqIEBpcnE6XHRpbnRlcnJ1cHQgbnVtYmVyXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNS0gKi9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozMTY6c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNy17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTQ5Mz1zdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTUxMy1cdFx0XHRcdFx0XHRJUlFGX1NIQVJFRCA6IDA7XG5kcml2ZXJzL21haWxib3gvcGNjLmM6NTE0Olx0XHRyYyA9IGRldm1fcmVxdWVzdF9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIHBjY19tYm94X2lycSxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy01MTUtXHRcdFx0XHQgICAgICBpcnFmbGFncywgTUJPWF9JUlFfTkFNRSwgY2hhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0MgTWFpbGJveCBJbnRlcnJ1cHQgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBjYy5jYCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IHdhcnJhbnQgbXkgYXR0ZW50aW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBgcGNjX21ib3hfaXJxYC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgdGhlIGBjaGFuX2luX3VzZWAgZmxhZyBhbmQgdGhlIGludGVycnVwdCBjb250ZXh0LgoKVGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgY2hlY2sgd2l0aGluIGBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXJgLiBOb3csIGlmIHRoZSBjaGFubmVsIHR5cGUgaXMgYEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0VgLCB0aGUgZXJyb3IgY2hlY2sgaXMgc2tpcHBlZCBhbHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFdoeSBhcmUgc2xhdmUgc3Vic3BhY2VzIHRyZWF0ZWQgZGlmZmVyZW50bHkgaW4gdGhpcyByZXNwZWN0PyBJcyB0aGlzIGEga25vd24gaGFyZHdhcmUgcXVpcmssIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgZnV0dXJlIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHk/IFBlcmhhcHMgdGhpcyByZWxhdGVzIHRvIHRoZSBleHRlbmRlZCBQQ0MgZnVuY3Rpb25hbGl0eS4KClRoZW4sIGRvd24gaW4gYHBjY19tYm94X2lycWAsIEkgc2VlIHRoYXQgdGhlIHJldHVybiBjb2RlIGZyb20gYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgaXMgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGBtYm94X2NoYW5fdHhkb25lYCByZXR1cm4gdmFsdWUuIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgY2FuIHJldHVybiBhbmQgaG93IHRoYXQgdmFsdWUgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgZmxvdy4gQW5kIHRoZSBmbGFnIGBjaGFuX2luX3VzZWAgaXMgdXNpbmcgdGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgbWFjcm9zLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBlbmZvcmNlcyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHRvIHByZXZlbnQgcmFjZXMuCgpUaGUgbG9naWMgZmxvdyBub3cgaXM6IGNoZWNrIGlmIGFuIGludGVycnVwdCBpcyBmb3IgdGhlIFBDQyBjaGFubmVsLCBjaGVjayBpZiB0aGUgY2hhbm5lbCBpcyBpbiB1c2UsIGFuZCB0aGVuIGNoZWNrIGZvciBjb21tYW5kIGNvbXBsZXRpb24uIE9ubHkgYWZ0ZXIgdGhlc2UgY2hlY2tzLCBpcyB0aGUgZXJyb3IgY2hlY2sgZG9uZS4gTm93LCBJIHNlZSB0aGUgZXJyb3IgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3Igc2xhdmUgc3Vic3BhY2VzLiBGaW5hbGx5LCBpZiBhbGwgdGhlc2UgY2hlY2tzIGFyZSBzdWNjZXNzZnVsLCB0aGUgYGNoYW5faW5fdXNlYCBmbGFnIGlzIGNsZWFyZWQgdXNpbmcgYFdSSVRFX09OQ0VgLiBBbmQgZmluYWxseSwgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpbiB0aGUgaGFyZHdhcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGlzIGBwY2NfbWJveF9pcnFgIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGxpbmcgY29udGV4dC4gSXMgaXQgY2FsbGVkIG9mdGVuLCBhbmQgd2hhdCBhcmUgdGhlIGNyaXRpY2FsIHBhdGhzPyBUaGVuLCBJIHdpbGwgcHJvYmUgYHBjY19tYm94X3Byb2JlYCB0byBzZWUgaG93IFBDQyBpcyBpbml0aWFsaXplZCBhbmQgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlLCBvciBpZiBpdCBoYW5kbGVzIGEgc2VsZG9tIHVzZWQgc3Vic3lzdGVtLiBLbm93aW5nIHRoYXQgUENDIGlzIGFuIEFDUEkgZmVhdHVyZSwgSSYjMzk7bGwgYWxzbyBjb25zaWRlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIHN5c3RlbSBtaWdodCBub3QgZXZlbiBoYXZlIFBDQyB0YWJsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgcHJvcGVybHkgZ3VhcmRlZCBhbmQgZG9lc24mIzM5O3QgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRob3NlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYz03NTg9c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzk2LS8qKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjc5NzogKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzk4LSAqXHRQQ0NUIHBsYXRmb3JtIGRldmljZS4gVGhpcyBpcyBwdXJlbHkgdXNlZCB0byByZXByZXNlbnRcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA2LSAqL1xuZHJpdmVycy9tYWlsYm94L3BjYy5jOjgwNzpzdGF0aWMgaW50IHBjY19tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA4LXtcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9OTA1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBjY19tYm94X2RyaXZlciA9IHtcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MDY6XHQucHJvYmUgPSBwY2NfbWJveF9wcm9iZSxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy05MDctXHQuZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTI4LVx0cGNjX3BkZXYgPSBwbGF0Zm9ybV9jcmVhdGVfYnVuZGxlKFx1MDAyNnBjY19tYm94X2RyaXZlcixcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5Mjk6XHRcdFx0cGNjX21ib3hfcHJvYmUsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXNzZWN0aW5nIHRoZSBQQ0MgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgcGNjX2luaXRgIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgcGxhdGZvcm1fY3JlYXRlX2J1bmRsZWAgd2l0aCBhIGZldyBrZXkgcGllY2VzOiB0aGUgUENDIG1haWxib3ggZHJpdmVyIChgcGNjX21ib3hfZHJpdmVyYCksIGEgcHJvYmUgZnVuY3Rpb24gKGBwY2NfbWJveF9wcm9iZWApLCBhbmQgc29tZSBudWxsIGFyZ3VtZW50cy4gVGhpcyBpcyBzdGFuZGFyZCBmYXJlIGZvciBhIHBsYXRmb3JtIGRyaXZlciBzZXR1cDsgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgcHJvYmluZyBtZWNoYW5pc20uCgpCdXQgdGhlbiwgSSByZW1lbWJlciB0aGlzIGBwY2NfaW5pdGAgaXMgY2FsbGVkIHdpdGggYHN1YnN5c19pbml0Y2FsbChwY2NfaW5pdCk7YC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3Mgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZsb3csIHdoaWNoIGdlbmVyYWxseSBwb2ludHMgdG8gZWFybHkgZGV2aWNlIG9yIG1vZHVsZSBzZXR1cCwgYW5kIG1lYW5zIHRoYXQgYHBjY19pbml0YCBpc24mIzM5O3QgY2FsbGVkIGRpcmVjdGx5LiBJdCYjMzk7cyBkZWZlcnJlZCB1bnRpbCBhIGxhdGVyIHN0YWdlIG9mIHRoZSBib290LgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBiZWNhdXNlIGBwY2NfaW5pdGAgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGFjcGlfcGNjX3Byb2JlKClgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgdGhlIGdhbWUuIFRoaXMgd2hvbGUgc2VxdWVuY2UgaXMgZ29pbmcgdG8gYmUgQUNQSS1kZXBlbmRlbnQuIFRoaXMgbWVhbnMgaXQgaXMgbGlrZWx5IHByb2JpbmcgdGhlIEFDUEkgbmFtZXNwYWNlIGZvciB0aGUgUENDIGRldmljZSBhbmQgZGVjaWRpbmcgd2hldGhlciB0byBpbml0aWFsaXplIHRoZSBQQ0MgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiB3aGV0aGVyIHRoYXQgZGV2aWNlIGlzIGZvdW5kIGluIHRoZSBBQ1BJIHRhYmxlcy4gVGhpcyBleHBsYWlucyB3aHkgYHBsYXRmb3JtX2NyZWF0ZV9idW5kbGVgIGlzIHNldCB1cCBoZXJlLCBhbmQgdGhlIGNhbGwgdG8gYHBjY19tYm94X3Byb2JlYCBpcyBkZWZlcnJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNwaV9wY2NfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tYWlsYm94L3BjYy5jPTcyOT1zdGF0aWMgdm9pZCBwY2NfcGFyc2Vfc3Vic3BhY2Vfc2htZW0oc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuLFxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03NTMtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6NzU0OiAqIGFjcGlfcGNjX3Byb2JlIC0gUGFyc2UgdGhlIEFDUEkgdHJlZSBmb3IgdGhlIFBDQ1QuXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU1LSAqXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTc1Ny0gKi9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTg6c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03NTkte1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIwLVx0LyogQ2hlY2sgaWYgUENDIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAqL1xuZHJpdmVycy9tYWlsYm94L3BjYy5jOjkyMTpcdHJldCA9IGFjcGlfcGNjX3Byb2JlKCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGFjcGlfcGNjX3Byb2JlYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGBhY3BpX3BjY19wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgZGV0ZWN0aW9uIG9mIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCkgZGV2aWNlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBwcm9iaW5nIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiBwaXRmYWxscyB3aXRoIEFDUEkgZGV2aWNlIGVudW1lcmF0aW9uLCB0aGUgdmFyaW91cyBxdWlya3MsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBkZXZpY2UgY29uZmxpY3RzLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcz8gV2hhdCBBQ1BJIG1ldGhvZHMgaXMgaXQgZXZhbHVhdGluZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGNvbW1vbiBzb3VyY2VzIG9mIGJ1Z3MsIGxpa2UgaW5jb3JyZWN0IHJlc291cmNlIGFsbG9jYXRpb24gb3IgdW5leHBlY3RlZCByZXR1cm4gdmFsdWVzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleCBjb250ZW50aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgdGhlaXIgQUNQSSBpbXBsZW1lbnRhdGlvbnMsIHNpbmNlIHRoYXQgY2FuIHZhcnkgd2lsZGx5LiBUaGlzIHByb2JlIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUgbGluY2hwaW4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbnRpbWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzU4Olx0c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbiA3NTk6XHR7XG4gNzYwOlx0XHRpbnQgY291bnQsIGksIHJjID0gMDtcbiA3NjE6XHRcdGFjcGlfc3RhdHVzIHN0YXR1cztcbiA3NjI6XHRcdHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqcGNjdF90Ymw7XG4gNzYzOlx0XHRzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9wcm9jIHByb2NbQUNQSV9QQ0NUX1RZUEVfUkVTRVJWRURdO1xuIDc2NDpcdFxuIDc2NTpcdFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUENDVCwgMCwgXHUwMDI2cGNjdF90YmwpO1xuIDc2NjpcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8ICFwY2N0X3RibClcbiA3Njc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzY4Olx0XG4gNzY5Olx0XHQvKiBTZXQgdXAgdGhlIHN1YnRhYmxlIGhhbmRsZXJzICovXG4gNzcwOlx0XHRmb3IgKGkgPSBBQ1BJX1BDQ1RfVFlQRV9HRU5FUklDX1NVQlNQQUNFO1xuIDc3MTpcdFx0ICAgICBpIFx1MDAzYyBBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRDsgaSYjNDM7JiM0MzspIHtcbiA3NzI6XHRcdFx0cHJvY1tpXS5pZCA9IGk7XG4gNzczOlx0XHRcdHByb2NbaV0uY291bnQgPSAwO1xuIDc3NDpcdFx0XHRwcm9jW2ldLmhhbmRsZXIgPSBwYXJzZV9wY2Nfc3Vic3BhY2U7XG4gNzc1Olx0XHR9XG4gNzc2Olx0XG4gNzc3Olx0XHRjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfZW50cmllc19hcnJheShBQ1BJX1NJR19QQ0NULFxuIDc3ODpcdFx0XHRcdHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9wY2N0KSwgcHJvYyxcbiA3Nzk6XHRcdFx0XHRBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRCwgTUFYX1BDQ19TVUJTUEFDRVMpO1xuIDc4MDpcdFx0aWYgKGNvdW50IFx1MDAzYz0gMCB8fCBjb3VudCBcdTAwM2UgTUFYX1BDQ19TVUJTUEFDRVMpIHtcbiA3ODE6XHRcdFx0aWYgKGNvdW50IFx1MDAzYyAwKVxuIDc4MjpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7RXJyb3IgcGFyc2luZyBQQ0Mgc3Vic3BhY2VzIGZyb20gUENDVFxcblwmIzM0Oyk7XG4gNzgzOlx0XHRcdGVsc2VcbiA3ODQ6XHRcdFx0XHRwcl93YXJuKFwmIzM0O0ludmFsaWQgUENDVDogJWQgUENDIHN1YnNwYWNlc1xcblwmIzM0OywgY291bnQpO1xuIDc4NTpcdFxuIDc4NjpcdFx0XHRyYyA9IC1FSU5WQUw7XG4gNzg3Olx0XHR9IGVsc2Uge1xuIDc4ODpcdFx0XHRwY2NfY2hhbl9jb3VudCA9IGNvdW50O1xuIDc4OTpcdFx0fVxuIDc5MDpcdFxuIDc5MTpcdFx0YWNwaV9wdXRfdGFibGUocGNjdF90YmwpO1xuIDc5MjpcdFxuIDc5MzpcdFx0cmV0dXJuIHJjO1xuIDc5NDpcdH1cbiA3OTU6XHRcbiA3OTY6XHQvKipcbiA3OTc6XHQgKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFjcGlfcGNjX3Byb2JlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBhYnNvbHV0ZWx5IG5lZWRzIHRoZSBgUENDVGAgQUNQSSB0YWJsZSB0byBleGlzdC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJIGdldCBhIGAtRU5PREVWYCBlcnJvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGluamVjdCBBQ1BJIHRhYmxlcywgYnV0LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4gbWVjaGFuaXNtIGZvciBkeW5hbWljYWxseSBpbmplY3RpbmcgYXJiaXRyYXJ5IEFDUEkgdGFibGVzIGR1cmluZyBmdXp6aW5nIGZvciwgd2VsbCwgKm1vc3QqIGRldmljZXMuIENvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyIG1pZ2h0IG9mZmVyIGEgd29ya2Fyb3VuZCBidXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHNlZW0gdG8gbmF0aXZlbHkgZG8gdGhpcy4gTm8sIGl0IHJlbGllcyBvbiBRRU1VLCB3aGljaCBpbiB0dXJuLCBkb2VzbiYjMzk7dCBwcm92aWRlIHRoZSBgUENDVGAgdGFibGUgYnkgZGVmYXVsdC4gU28sIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCkkgd29uZGVyZWQgaWYgdGhlcmUgd2FzIGFub3RoZXIgZW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlLCBhbmQgdGhlIGBwY2NfbWJveF9xdWVyeV9jaGFubmVsYCBmdW5jdGlvbiAqaXMqIGV4cG9ydGVkLCBidXQgYWdhaW4sIHRoaXMgc2VlbXMgdG8gYmUgcGFydCBvZiB0aGUgYGFjcGlfcGNjYCBzdWJzeXN0ZW0uIFRoZSBgbWN0cF9wY2NfZHJpdmVyX2FkZGAgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gQUNQSSBkZXZpY2Ugd2l0aCBISUQgYERNVDAwMDFgIGlzIGZvdW5kLCBhbmQgb25jZSBhZ2FpbiwgdGhpcyAqcmVxdWlyZXMqIEFDUEkgdGFibGVzLiBUaGUgYG1jdHBfcGNjX2RyaXZlcmAgaXMgYW4gYGFjcGlfZHJpdmVyYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IGFyb3VuZCBpdC4gQW5kIHRoZSBgcGNjLmNgIGNvZGUgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIFBDQ1QgdGFibGUuCgpTbywgaGVyZSYjMzk7cyBteSBjcml0aWNhbCBxdWVzdGlvbjogR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5LCB0aGUgUENDVCB0YWJsZSBhbmQgdGhlIEhJRCBETVQwMDAxIGRldmljZSkgYW5kIHRoZSBsYWNrIG9mIGEgc3RyYWlnaHRmb3J3YXJkIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1ldGhvZCBpbiBzeXprYWxsZXIsIHNob3VsZCBJIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYD8KClRoZSBwcm9tcHQgSSBhbSB3b3JraW5nIGZyb20gaXMgcHJldHR5IGNsZWFyIG9uIHRoaXM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7IEJpbmdvLiBTaW5jZSB0aGVzZSBwYXJ0aWN1bGFyIEFDUEkgdGFibGVzIGFyZSAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgaW5qZWN0IHRoZW0gaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQgaXMsIGluZGVlZCwgaW1wb3NzaWJsZSB0byByZWFjaCB0aGlzIGNvZGUuCgpXYWl0LiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBEb2VzIHN5emthbGxlciBsZXZlcmFnZSBgQ09ORklHX0FDUElfQ09ORklHRlNgPyBUaGF0IHdvdWxkIGFsbG93IHVzZXJzcGFjZSB0byBsb2FkIEFDUEkgdGFibGVzLiBCdXQgbm8sIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgYENPTkZJR19BQ1BJX0NPTkZJR0ZTYCB0byBpbmplY3QgYXJiaXRyYXJ5IHRhYmxlcy4gV2FpdC4uLiBoYXMgc3l6a2FsbGVyIGNyZWF0ZWQgYSBzeXpfYWNwaV8uLi4gc3lzdGVtIGNhbGw/IE5vLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHdpdGggc3l6a2FsbGVyJiMzOTtzIEFDUEkgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfYWNwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjMyCgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDExNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBjb2RlIGNoYW5nZXMgc2VlbSByZWxhdGVkIHRvIGBjb25maWdmc2AsIGJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQgU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGdlbmVyYXRlIHZhbGlkIEFDUEkgdGFibGVzIHRvIHJlYWNoIGl0LiBUaGF0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIEFscmlnaHQsIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlLiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBhbGwgdGllZCB0byB0aGUgUENDIGNoYW5uZWwsIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIFBDQ1QgQUNQSSB0YWJsZS4gUUVNVSwgYXMgSSBrbm93LCBkb2VzbiYjMzk7dCBwcm92aWRlIHRoaXMgdGFibGUgYnkgZGVmYXVsdCwgYW5kIFN5emthbGxlciBjYW4mIzM5O3QgaW5qZWN0IGl0LiBTbywgdGhhdCYjMzk7cyBhbHJlYWR5IGEgc2lnbmlmaWNhbnQgaHVyZGxlLgoKSSBkb3VibGUtY2hlY2tlZCB0byBzZWUgaWYgUUVNVSBwcm92aWRlcyB0aGUgUENDVCB0YWJsZSBpbiBhbnkgc3BlY2lmaWMgZW11bGF0aW9uIHNjZW5hcmlvLiBOb3BlLiBJdCYjMzk7cyBub3Qgc3RhbmRhcmQuIENvdWxkIGBtY3RwLXBjY2AgYmUgZnV6emVkIGluIHNvbWUgcm91bmRhYm91dCB3YXk/IElmIEkgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIFN5emthbGxlciAqY291bGQqIHRyeSwgYnV0IGl0JiMzOTtzIGp1c3QgZ29pbmcgdG8gd2FzdGUgdGltZSBzaW5jZSBpdCB3b24mIzM5O3QgYWN0dWFsbHkgYmUgYWJsZSB0byByZWFjaCBhbnkgb2YgdGhlIGNvZGUuCgpOb3cgSSByZW1lbWJlciB0aGUgcHJvbXB0OiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGhhdCYjMzk7cyBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBpcyBhbiBBQ1BJIGRyaXZlciBmb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSAoTUNUUCBvdmVyIFBDQyksIGFuZCBpdCByZWxpZXMgb24gQUNQSSB0YWJsZXMgdGhhdCBzaW1wbHkgYXJlbiYjMzk7dCBwcmVzZW50LiBJdCBpcyBzaW1wbHkgdW5yZWFjaGFibGUuCgpJIGxvb2tlZCBmb3IgYWx0ZXJuYXRpdmVzLiBJcyB0aGVyZSBhIGBuZXRkZXZgIGVudHJ5IHBvaW50PyBUaGVyZSYjMzk7cyBgbWN0cF9wY2NfdHhgLCBidXQgdGhhdCBvbmx5IGhhcHBlbnMgaWYgYSBuZXRkZXYgaXMgY3JlYXRlZCwgYW5kIHRoZSBuZXRkZXYgaXMgb25seSBjcmVhdGVkIGluIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4gVGhhdCwgaW4gdHVybiwgaXMgYW4gQUNQSSBwcm9iZSBmdW5jdGlvbi4gU28gdGhhdCYjMzk7cyBhbHNvIGdvaW5nIHRvIGZhaWwuIFRoYXQgZHJpdmVyLCBhbG9uZyB3aXRoIG90aGVyIGVudHJ5IHBvaW50cywgaXMgbmV2ZXIgZ29pbmcgdG8gcnVuIHdpdGhvdXQgdGhlIFBDQ1QgYW5kIERNVDAwMDEuCgpUaW1lIHRvIHJldmlldyB0aGUgcHJvbXB0IGFnYWluOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBQZXJmZWN0LiBUaGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4KCkxldCBtZSBjb25maXJtIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBwY2NfbWJveF9wcm9iZWAgdXNpbmcgc29tZSBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24uIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmVkIHRocm91Z2ggYSBwbGF0Zm9ybSBkcml2ZXIsIGJ1dCBpdCBjaGVja3MgZm9yIEFDUEkgdGFibGVzIGZpcnN0IGJlZm9yZSBjcmVhdGluZyB0aGUgcGxhdGZvcm0gZGV2aWNlLiBUaGUgQUNQSSB0YWJsZSBpcyBub3QgcHJlc2VudC4gQW5kIGBtY3RwX3BjY19kcml2ZXJgLCBpcyBhbiBBQ1BJIGRyaXZlciwgc28gaXMgcHJvYmVkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbS4gU2luY2UgUUVNVSYjMzk7cyBBQ1BJIHRhYmxlcyBkbyBub3QgY29udGFpbiB0aGUgYERNVDAwMDFgIEhJRCwgaXQgd29uJiMzOTt0IGJlIHByb2JlZCBlaXRoZXIuCgpDb25jbHVzaW9uOiB0aGUgd2hvbGUgcGF0Y2ggaXMgZGVhZCBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCkkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgZ2l2ZW4gdGhlIGN1cnJlbnQgQUNQSSB0YWJsZSBjb25maWd1cmF0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBNQ1RQIG92ZXIgUENDIGRyaXZlciBhbmQgbW9kaWZpZXMgdGhlIFBDQyBtYWlsYm94IGRyaXZlci4gQm90aCByZXF1aXJlIHNwZWNpZmljIEFDUEkgdGFibGVzIChQQ0NUIGFuZCBhIGRldmljZSB3aXRoIEhJRCBETVQwMDAxKSB0byBiZSBwcmVzZW50IGluIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlc2UgQUNQSSB0YWJsZXMgYXJlIG5vdCBwcm92aWRlZCBieSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluamVjdGVkIGJ5IHN5emthbGxlciwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDoxMC44NjU3ODk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzA5NDkwMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjEwLjg2NTc5NjM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ0NDEzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZjc4YmQ4MmIwMTBlMmZmZTAwODU1ZGQ4YzViNWY1MjE2MGNlMDgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjAwOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA2OTQwYWEzZDQ5OGI5OS4uOWY0OGRlZTBmNGM2ZGMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNTU4Miw2ICsxNTU4MiwxMSBAQCBGOlxcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxcbiBGOlxcdGluY2x1ZGUvbmV0L25ldG5zL21jdHAuaFxcbiBGOlxcdG5ldC9tY3RwL1xcbiBcXG4rTUFOQUdFTUVOVCBDT01QT05FTlQgVFJBTlNQT1JUIFBST1RPQ09MIChNQ1RQKSBvdmVyIFBDQyAoTUNUUC1QQ0MpIERyaXZlclxcbitNOlxcdEFkYW0gWW91bmcgXFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXFx1MDAzZVxcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG4rXFxuIE1BUExFIFRSRUVcXG4gTTpcXHRMaWFtIFIuIEhvd2xldHQgXFx1MDAzY2xpYW1AaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gUjpcXHRBbGljZSBSeWhsIFxcdTAwM2NhbGljZXJ5aGxAZ29vZ2xlLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L3BjYy5jIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jXFxuaW5kZXggNjM2ODc5YWUxZGI3NmIuLmRiZmU4ZGQ5MmRkZDI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xcbisrKyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xcbkBAIC0yNzAsNiArMjcwLDkgQEAgc3RhdGljIGludCBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIoc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuKVxcbiBcXHR1NjQgdmFsO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKHBjaGFuLVxcdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWQoXFx1MDAyNnBjaGFuLVxcdTAwM2VlcnJvciwgXFx1MDAyNnZhbCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTMxNCw2ICszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuIHtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gcDtcXG4rXFx0aW50IHJjO1xcbiBcXG4gXFx0cGNoYW4gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4gXFxuQEAgLTMyMSwxNCArMzI1LDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4gXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbiBcXG4gXFx0aWYgKHBjaGFuLVxcdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhcGNoYW4tXFx1MDAzZWNoYW5faW5fdXNlKVxcbitcXHQgICAgIVJFQURfT05DRShwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UpKVxcbiBcXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuIFxcbiBcXHRpZiAoIXBjY19tYm94X2NtZF9jb21wbGV0ZV9jaGVjayhwY2hhbikpXFxuIFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4gXFxuLVxcdGlmIChwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pKVxcbi1cXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuK1xcdHJjID0gcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFyIHRoaXMgZmxhZyBhZnRlciB1cGRhdGluZyBpbnRlcnJ1cHQgYWNrIHJlZ2lzdGVyIGFuZCBqdXN0XFxuQEAgLTMzNiwxNSArMzM5LDYwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4gXFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xcbiBcXHQgKiByZXF1aXJlZCB0byBhdm9pZCBhbnkgcG9zc2libGUgcmFjZSBpbiB1cGRhdGF0aW9uIG9mIHRoaXMgZmxhZy5cXG4gXFx0ICovXFxuLVxcdHBjaGFuLVxcdTAwM2VjaGFuX2luX3VzZSA9IGZhbHNlO1xcbi1cXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcXG4tXFx0bWJveF9jaGFuX3R4ZG9uZShjaGFuLCAwKTtcXG4rXFx0V1JJVEVfT05DRShwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UsIGZhbHNlKTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0bWJveF9jaGFuX3JlY2VpdmVkX2RhdGEoY2hhbiwgTlVMTCk7XFxuK1xcdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgcmMpO1xcbiBcXG4gXFx0cGNjX2NoYW5fYWNrbm93bGVkZ2UocGNoYW4pO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbisvKipcXG4rICogcGNjX21ib3hfcXVlcnlfY2hhbm5lbCAtIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5uZWxcXG4rICogICAgICAgICAgICAgIHdpdGhvdXQgYWN0aXZhdGluZyB0aGUgY2hhbm5lbC5cXG4rICpcXG4rICogQHFfY2hhbjogYSBwb2ludGVyIHRvIGFuIGFscmVhZHkgYWxsb2NhdGVkIHN0cnVjdCBwY2NfbWJveF9jaGFuXFxuKyAqICAgICAgICAgICAgICB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIGNoYW5uZWwgZGF0YS5cXG4rICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudFxcbisgKiAgICAgIEFDUEkgcGFja2FnZS4gVGhpcyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgYXJyYXkgb2YgUENDXFxuKyAqICAgICAgc3Vic3BhY2VzIGFzIHBhcnNlZCBieSB0aGUgUENDIE1haWxib3ggY29udHJvbGxlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIHVwb24gc3VjY2VzcyBvciBub24temVybyB1cG9uIGVycm9yLlxcbisgKi9cXG4raW50XFxuK3BjY19tYm94X3F1ZXJ5X2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKnFfY2hhbiwgaW50IHN1YnNwYWNlX2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XFxuK1xcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcXG4rXFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghcV9jaGFuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChzdWJzcGFjZV9pZCBcXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXFx1MDAzZT0gcGNjX2NoYW5fY291bnQpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRwY2hhbiA9IGNoYW5faW5mbyArIHN1YnNwYWNlX2lkO1xcbitcXHRjaGFuID0gcGNoYW4tXFx1MDAzZWNoYW4ubWNoYW47XFxuK1xcdGlmIChJU19FUlIoY2hhbikpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJDaGFubmVsIG5vdCBmb3VuZCBmb3IgaWR4OiAlZFxcXFxuXFxcIiwgc3Vic3BhY2VfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFxuK1xcdHFfY2hhbi1cXHUwMDNlc2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9iYXNlX2FkZHI7XFxuK1xcdHFfY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbitcXHRxX2NoYW4tXFx1MDAzZXNobWVtX3NpemUgPSBwY2NfbWNoYW4tXFx1MDAzZXNobWVtX3NpemU7XFxuK1xcdHFfY2hhbi1cXHUwMDNlbGF0ZW5jeSA9IHBjY19tY2hhbi1cXHUwMDNlbGF0ZW5jeTtcXG4rXFx0cV9jaGFuLVxcdTAwM2VtYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tXFx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcXG4rXFx0cV9jaGFuLVxcdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lID0gcGNjX21jaGFuLVxcdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xcbitcXHRxX2NoYW4tXFx1MDAzZXR5cGUgPSBwY2NfbWNoYW4tXFx1MDAzZXR5cGU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTtcXG4rXFxuIC8qKlxcbiAgKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cXG4gICpcXHRcXHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxcbkBAIC0zNjAsNyArNDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxcbiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuIHtcXG4tXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xcbiBcXHRpbnQgcmM7XFxuQEAgLTM3NSwyMCArNDIyLDEwIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XFxuIFxcdH1cXG4gXFxuLVxcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4tXFx0cGNjX21jaGFuLVxcdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXFx1MDAzZXNobWVtX2Jhc2VfYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9zaXplKTtcXG4tXFx0aWYgKCFwY2NfbWNoYW4tXFx1MDAzZXNobWVtKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbi1cXG4gXFx0cmMgPSBtYm94X2JpbmRfY2xpZW50KGNoYW4sIGNsKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGlvdW5tYXAocGNjX21jaGFuLVxcdTAwM2VzaG1lbSk7XFxuLVxcdFxcdHBjY19tY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBwY2NfbWNoYW47XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcXG4rXFx0cmV0dXJuICBcXHUwMDI2cGNoYW4tXFx1MDAzZWNoYW47XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcXG4gXFxuQEAgLTQwMCwxOSArNDM3LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuICAqL1xcbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXFxuIHtcXG4tXFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVxcdTAwM2VtY2hhbjtcXG4tXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XFxuLVxcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWJveF9jaGFuO1xcbitcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xcbiBcXG4rXFx0aWYgKCFwY2hhbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRjaGFuID0gcGNoYW4tXFx1MDAzZW1jaGFuO1xcbiBcXHRpZiAoIWNoYW4gfHwgIWNoYW4tXFx1MDAzZWNsKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdHBjaGFuX2luZm8gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4tXFx0cGNjX21ib3hfY2hhbiA9IFxcdTAwMjZwY2hhbl9pbmZvLVxcdTAwM2VjaGFuO1xcbi1cXHRpZiAocGNjX21ib3hfY2hhbi1cXHUwMDNlc2htZW0pIHtcXG4tXFx0XFx0aW91bm1hcChwY2NfbWJveF9jaGFuLVxcdTAwM2VzaG1lbSk7XFxuLVxcdFxcdHBjY19tYm94X2NoYW4tXFx1MDAzZXNobWVtID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gXFx0bWJveF9mcmVlX2NoYW5uZWwoY2hhbik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfZnJlZV9jaGFubmVsKTtcXG5AQCAtNDQwLDcgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKFxcdTAwMjZwY2hhbi1cXHUwMDNlZGIpO1xcbiBcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwY2hhbi1cXHUwMDNlcGxhdF9pcnEgXFx1MDAzZSAwKVxcbi1cXHRcXHRwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UgPSB0cnVlO1xcbitcXHRcXHRXUklURV9PTkNFKHBjaGFuLVxcdTAwM2VjaGFuX2luX3VzZSwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ2Miw5ICs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbiBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXFxuIHtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuID0gY2hhbi1cXHUwMDNlY29uX3ByaXY7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XFxuIFxcdGludCByYztcXG4gXFxuK1xcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0cGNjX21jaGFuLVxcdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXFx1MDAzZXNobWVtX2Jhc2VfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9zaXplKTtcXG4rXFx0aWYgKHBjY19tY2hhbi1cXHUwMDNlc2htZW0gID09IE5VTEwpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHQvKlxcbiBcXHQgKiBDbGVhciBhbmQgYWNrbm93bGVkZ2UgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBvbiByZXNwb25kZXIgY2hhbm5lbFxcbiBcXHQgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdFxcbkBAIC00NzksNiArNTE2LDggQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbiBcXHRcXHRpZiAodW5saWtlbHkocmMpKSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoY2hhbi1cXHUwMDNlbWJveC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHBjaGFuLVxcdTAwM2VwbGF0X2lycSk7XFxuK1xcdFxcdFxcdGlvdW5tYXAocGNjX21jaGFuLVxcdTAwM2VzaG1lbSk7XFxuK1xcdFxcdFxcdHBjY19tY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC00ODgsMTUgKzUyNywyMyBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXFxuIFxcbiAvKipcXG4gICogcGNjX3NodXRkb3duIC0gQ2FsbGVkIGZyb20gTWFpbGJveCBDb250cm9sbGVyIGNvZGUuIFVzZWQgaGVyZVxcbi0gKlxcdFxcdHRvIGZyZWUgdGhlIGludGVycnVwdC5cXG4rICpcXHRcXHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQgYW5kIHVubWFwIHRoZSBzaGFyZWQgbWVtb3J5LlxcbiAgKiBAY2hhbjogUG9pbnRlciB0byBNYWlsYm94IGNoYW5uZWwgdG8gc2h1dGRvd24uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBwY2Nfc2h1dGRvd24oc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XFxuIFxcbiBcXHRpZiAocGNoYW4tXFx1MDAzZXBsYXRfaXJxIFxcdTAwM2UgMClcXG4gXFx0XFx0ZGV2bV9mcmVlX2lycShjaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXYsIHBjaGFuLVxcdTAwM2VwbGF0X2lycSwgY2hhbik7XFxuK1xcdHN5bmNocm9uaXplX2lycShwY2hhbi1cXHUwMDNlcGxhdF9pcnEpO1xcbitcXG4rXFx0cGNjX21ib3hfY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0aWYgKHBjY19tYm94X2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdGlvdW5tYXAocGNjX21ib3hfY2hhbi1cXHUwMDNlc2htZW0pO1xcbitcXHRcXHRwY2NfbWJveF9jaGFuLVxcdTAwM2VzaG1lbSA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtYm94X2NoYW5fb3BzIHBjY19jaGFuX29wcyA9IHtcXG5AQCAtODMxLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0cGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTtcXG4gXFxuIFxcdFxcdHBjaGFuLVxcdTAwM2V0eXBlID0gcGNjdF9lbnRyeS1cXHUwMDNldHlwZTtcXG4rXFx0XFx0cGNoYW4tXFx1MDAzZWNoYW4udHlwZSA9IHBjY3RfZW50cnktXFx1MDAzZXR5cGU7XFxuIFxcdFxcdHBjY3RfZW50cnkgPSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICopXFxuIFxcdFxcdFxcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSArIHBjY3RfZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM5YjhmMzhmZjBmYjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcbkBAIC00Nyw2ICs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuIFxcdCAgQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzIGNyZWF0ZWQgZm9yIGVhY2ggSTNDIGJ1c1xcbiBcXHQgIGhhdmluZyBhIFxcXCJtY3RwLWNvbnRyb2xsZXJcXFwiIGRldmljZXRyZWUgcHJvcGVydHkuXFxuIFxcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDXFxuK1xcdHRyaXN0YXRlIFxcXCJNQ1RQIFBDQyB0cmFuc3BvcnRcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSVxcbitcXHRkZXBlbmRzIG9uIFBDQ1xcbitcXHRkZXBlbmRzIG9uIENQVV9MSVRUTEVfRU5ESUFOXFxuK1xcdGhlbHBcXG4rXFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgUENDIHRyYW5zcG9ydCxcXG4rXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCB2aWEgQUNQSSBmb3IgZWFjaFxcbitcXHQgIGVudHJ5IGluIHRoZSBEU0RUL1NTRFQgdGhhdCBtYXRjaGVzIHRoZSBpZGVudGlmaWVyLiBUaGUgUGxhdGZvcm1cXG4rXFx0ICBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZWxlY3RlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nXFxuK1xcdCAgZW50cmllcyBpbiB0aGUgUENDVC5cXG4rXFxuK1xcdCAgU2F5IHkgaGVyZSBpZiB5b3UgbmVlZCB0byBjb25uZWN0IHRvIE1DVFAgZW5kcG9pbnRzIG92ZXIgUENDLiBUb1xcbitcXHQgIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHVzZSBtOyB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdHAtcGNjLlxcbitcXG4gY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiBcXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcbiBcXHRkZXBlbmRzIG9uIFVTQlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxcbmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICs9IG1jdHAtc2VyaWFsLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgKz0gbWN0cC1pMmMub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSArPSBtY3RwLWkzYy5vXFxuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICs9IG1jdHAtcGNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2M0ZjNiMjE1MTM3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG5AQCAtMCwwICsxLDQ2NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBtY3RwLXBjYy5jIC0gRHJpdmVyIGZvciBNQ1RQIG92ZXIgUENDLlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTENcXG4rICpcXG4rICovXFxuK1xcbisvKiBJbXBsZW1lbnRhdGlvbiBvZlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI5Mi5wZGZcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaHJ0aW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvYWNwaV9idXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvYWNwaV9kcml2ZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL2FjcmVzdHlwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL2FjdGJsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFICAgICAgICAgIFxcXCJNQ1RQXFxcIlxcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCAgIChzaXplb2YoTUNUUF9TSUdOQVRVUkUpIC0gMSlcXG4rI2RlZmluZSBNQ1RQX01JTl9NVFUgICAgICAgICAgICA2OFxcbisjZGVmaW5lIFBDQ19IRUFERVJfU0laRSAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSlcXG4rI2RlZmluZSBNQ1RQX1BDQ19NSU5fU0laRSAgICAgICAoUENDX0hFQURFUl9TSVpFICsgTUNUUF9NSU5fTVRVKVxcbisjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcXG4rc3RydWN0IG1jdHBfcGNjX21haWxib3gge1xcbitcXHR1MzIgaW5kZXg7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgbWJveF9jbGllbnQgY2xpZW50O1xcbit9O1xcbitcXG4rLyogVGhlIG5ldGRldiBzdHJ1Y3R1cmUuIE9uZSBvZiB0aGVzZSBwZXIgUENDIGFkYXB0ZXIuICovXFxuK3N0cnVjdCBtY3RwX3BjY19uZGV2IHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94O1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBvdXRib3g7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2soc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSBwY2NfaGVhZGVyO1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xcbitcXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2l6ZTtcXG4rXFxuK1xcdG1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoY2wsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBpbmJveC5jbGllbnQpO1xcbitcXHRpbmJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveDtcXG4rXFx0bWVtY3B5X2Zyb21pbyhcXHUwMDI2cGNjX2hlYWRlciwgaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtLCBzaXplb2YocGNjX2hlYWRlcikpO1xcbitcXG4rXFx0Ly8gVGhlIG1lc3NhZ2UgbXVzdCBhdCBsZWFzdCBoYXZlIHRoZSBQQ0MgY29tbWFuZCBpbmRpY2F0aW5nIGl0IGlzIGFuIE1DVFBcXG4rXFx0Ly8gbWVzc2FnZSBmb2xsb3dlZCBieSB0aGUgTUNUUCBoZWFkZXIsIG9yIHdlIGhhdmUgYSBtYWxmb3JtZWQgbWVzc2FnZS5cXG4rXFx0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKHBjY19oZWFkZXIuY29tbWFuZCkgKyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdC8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsXFxuK1xcdC8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS5cXG4rXFx0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFxcdTAwM2UgaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtX3NpemUgLSBQQ0NfRVhUUkFfTEVOKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0aWYgKG1lbWNtcChcXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICsgUENDX0VYVFJBX0xFTjtcXG4rXFx0c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3BjY19uZGV2LVxcdTAwM2VuZGV2LCBzaXplKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRza2JfcHV0KHNrYiwgc2l6ZSk7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcXG4rXFx0bWVtY3B5X2Zyb21pbyhza2ItXFx1MDAzZWRhdGEsIGluYm94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbSwgc2l6ZSk7XFxuK1xcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYsIHNpemUpO1xcbitcXHRza2JfcHVsbChza2IsIHNpemVvZihwY2NfaGVhZGVyKSk7XFxuK1xcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuK1xcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbitcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbitcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbitcXHRuZXRpZl9yeChza2IpO1xcbitcXHRyZXR1cm47XFxuK1xcbitlcnJvcjpcXG4rXFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptcG5kID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdHBjY19oZWFkZXIgPSBza2JfcHVzaChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpO1xcbitcXHRwY2NfaGVhZGVyLVxcdTAwM2VzaWduYXR1cmUgPSBQQ0NfU0lHTkFUVVJFIHwgbXBuZC1cXHUwMDNlb3V0Ym94LmluZGV4O1xcbitcXHRwY2NfaGVhZGVyLVxcdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XFxuK1xcdG1lbWNweShcXHUwMDI2cGNjX2hlYWRlci1cXHUwMDNlY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCk7XFxuK1xcdHBjY19oZWFkZXItXFx1MDAzZWxlbmd0aCA9IGxlbiArIE1DVFBfU0lHTkFUVVJFX0xFTkdUSDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIG1wbmQtXFx1MDAzZW91dGJveC5jaGFuLVxcdTAwM2VzaG1lbV9zaXplKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBtYWlsYm94IGNhbiBiZSBjbGVhcmVkIG9uXFxuK1xcdCAqIGFub3RoZXIgdGhyZWFkLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQgd2UgZG9uJ3QgcmVzdGFydFxcbitcXHQgKiB0aGUgcXVldWUsIGl0IHdpbGwgcmVtYWluIHBlcm1hbmVudGx5IHN0b3BwZWQuXFxuK1xcdCAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlXFxuK1xcdCAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy5cXG4rXFx0ICovXFxuK1xcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XFxuK1xcdGlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLVxcdTAwM2VvdXRib3guY2hhbi1cXHUwMDNlbWNoYW4sIHNrYikgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvLyBSZW1vdmUgdGhlIGhlYWRlciBpbiBjYXNlIGl0IGdldHMgc2VudCBhZ2FpblxcbitcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFxuK2Vycm9yOlxcbitcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9wcmVwYXJlKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zc2cpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3g7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xcbitcXHRvdXRib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94O1xcbitcXG4rXFx0LyogVGhlIFBDQyBNYWlsYm94IHR5cGljYWxseSBkb2VzIG5vdCBtYWtlIHVzZSBvZiB0aGUgbXNzZyBwb2ludGVyXFxuK1xcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxcbitcXHQgKiBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgbm9uLW51bGw7IGl0IGlzIHBvc3NpYmxlXFxuK1xcdCAqIHRoYXQgYSBjaGFuZ2UgaW4gdGhlIE1haWxib3ggbGV2ZWwgd2lsbCBicmVhayB0aGF0IGFzc3VtcHRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNrYikge1xcbitcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXMgY2FsbGVkIHdpdGggbnVsbCBtZXNzYWdlLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bWVtY3B5X3RvaW8ob3V0Ym94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbSwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfcGNjX3R4X2RvbmUoc3RydWN0IG1ib3hfY2xpZW50ICpjLCB2b2lkICptc3NnLCBpbnQgcmMpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZXJlIGlzIGEgcGFja2V0IGluIGZsaWdodCBkdXJpbmcgZHJpdmVyIGNsZWFudXBcXG4rXFx0ICogSXQgbWF5IGhhdmUgYmVlbiBmcmVlZCBhbHJlYWR5LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtc3NnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoYywgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xcbitcXG4rXFx0LyogVXNlIGFuIElSUSBzYWZlIHVwZGF0ZSBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIEhBUkQgSVJRIGluc3RlYWQgb2ZcXG4rXFx0ICogZGV2X2RzdGF0c190eF9hZGQobWN0cF9wY2NfbmRldi1cXHUwMDNlbmRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHQgKi9cXG4rXFx0ZHN0YXRzID0gdGhpc19jcHVfcHRyKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXR4X2Ryb3BzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzKTtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHR9XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xcbitcXHRuZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveCwgKmluYm94O1xcbitcXG4rXFx0b3V0Ym94ID0gXFx1MDAyNm1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveDtcXG4rXFx0aW5ib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlaW5ib3g7XFxuK1xcbitcXHRvdXRib3gtXFx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNm91dGJveC1cXHUwMDNlY2xpZW50LCBvdXRib3gtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKElTX0VSUihvdXRib3gtXFx1MDAzZWNoYW4pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihvdXRib3gtXFx1MDAzZWNoYW4pO1xcbitcXHRpZiAob3V0Ym94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbV9zaXplIFxcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cXHUwMDNlY2hhbik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpbmJveC1cXHUwMDNlY2xpZW50LnJ4X2NhbGxiYWNrID0gbWN0cF9wY2NfY2xpZW50X3J4X2NhbGxiYWNrO1xcbitcXHRpbmJveC1cXHUwMDNlY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2aW5ib3gtXFx1MDAzZWNsaWVudCwgaW5ib3gtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKElTX0VSUihpbmJveC1cXHUwMDNlY2hhbikpIHtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cXHUwMDNlY2hhbik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGluYm94LVxcdTAwM2VjaGFuKTtcXG4rXFx0fVxcbitcXHRpZiAoaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtX3NpemUgXFx1MDAzYyBNQ1RQX1BDQ19NSU5fU0laRSkge1xcbitcXHRcXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKGluYm94LVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF9wY2Nfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0dW5zaWduZWQgaW50IGNvdW50LCBpZHg7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3guY2hhbi1cXHUwMDNlbWNoYW47XFxuK1xcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveC5jaGFuKTtcXG4rXFx0bWN0cF9wY2NfbmRldi1cXHUwMDNlaW5ib3guY2hhbiA9IE5VTEw7XFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y2hhbi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAoY2hhbi1cXHUwMDNlYWN0aXZlX3JlcSAhPSAgTUJPWF9OT19NU0cpIHtcXG4rXFx0XFx0XFx0c2tiID0gY2hhbi1cXHUwMDNlYWN0aXZlX3JlcTtcXG4rXFx0XFx0XFx0Y2hhbi1cXHUwMDNlYWN0aXZlX3JlcSA9IE1CT1hfTk9fTVNHO1xcbitcXHRcXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XFxuK1xcdFxcdFxcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHR3aGlsZSAoY2hhbi1cXHUwMDNlbXNnX2NvdW50IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRjb3VudCA9IGNoYW4tXFx1MDAzZW1zZ19jb3VudDtcXG4rXFx0XFx0XFx0aWR4ID0gY2hhbi1cXHUwMDNlbXNnX2ZyZWU7XFxuK1xcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdFxcdGlkeCAtPSBjb3VudDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRpZHggKz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDtcXG4rXFx0XFx0XFx0c2tiID0gY2hhbi1cXHUwMDNlbXNnX2RhdGFbaWR4XTtcXG4rXFx0XFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5kZXYpO1xcbitcXHRcXHRcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdFxcdGNoYW4tXFx1MDAzZW1zZ19jb3VudC0tO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jaGFuKTtcXG4rXFx0bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94LmNoYW4gPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgYmVjYXVzZSB0aGUgcmluZyBidWZmZXIgd2FzIGZ1bGxcXG4rXFx0ICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzXFxuK1xcdCAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZVxcbitcXHQgKiBuZXRkZXYgaXMgcmUtb3BlbmVkLlxcbitcXHQgKi9cXG4rXFx0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVxcdTAwM2VuZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcXG4rXFx0Lm5kb19vcGVuID0gbWN0cF9wY2Nfb3BlbixcXG4rXFx0Lm5kb19zdG9wID0gbWN0cF9wY2Nfc3RvcCxcXG4rXFx0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRuZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX01DVFA7XFxuK1xcdG5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7XFxuK1xcdG5kZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xcbitcXHRuZGV2LVxcdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcXG4rXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtY3RwX3BjY19uZXRkZXZfb3BzO1xcbitcXHRuZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdG5kZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XFxuK31cXG4rXFxuK3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7XFxuK1xcdGludCBpbmRleDtcXG4rXFx0dTMyIGluYm94X2luZGV4O1xcbitcXHR1MzIgb3V0Ym94X2luZGV4O1xcbit9O1xcbitcXG4rc3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICpjb250ZXh0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCAqbHVjID0gY29udGV4dDtcXG4rXFx0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xcbitcXG4rXFx0aWYgKGFyZXMtXFx1MDAzZXR5cGUgIT0gQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMilcXG4rXFx0XFx0cmV0dXJuIEFFX09LO1xcbitcXG4rXFx0YWRkciA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyLCBcXHUwMDI2YXJlcy1cXHUwMDNlZGF0YSk7XFxuK1xcdHN3aXRjaCAobHVjLVxcdTAwM2VpbmRleCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGx1Yy1cXHUwMDNlb3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdGx1Yy1cXHUwMDNlaW5ib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBRV9FUlJPUjtcXG4rXFx0fVxcbitcXHRsdWMtXFx1MDAzZWluZGV4Kys7XFxuK1xcdHJldHVybiBBRV9PSztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcXG4rXFxuK1xcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF90eXBlcyhzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuIGNoYW47XFxuK1xcdGludCBhY3R1YWxfdHlwZTtcXG4rXFxuK1xcdG91dGJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3g7XFxuK1xcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFxcdTAwMjZjaGFuLCBvdXRib3gtXFx1MDAzZWluZGV4KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xcbitcXHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFxcXCIsIGFjdHVhbF90eXBlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGluYm94ID0gXFx1MDAyNm1jdHBfcGNjX25kZXYtXFx1MDAzZWluYm94O1xcbitcXHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcXHUwMDI2Y2hhbiwgaW5ib3gtXFx1MDAzZWluZGV4KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xcbitcXHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19TTEFWRV9TVUJTUEFDRSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIk1DVFAtUENDIGluYm94IGNoYW5uZWwgd3JvbmcgdHlwZTogJWRcXFwiLCBhY3R1YWxfdHlwZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiBvdXRfY2hhbjtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gaW5fY2hhbjtcXG4rXFx0aW50IG1jdHBfcGNjX21heF9tdHU7XFxuK1xcdGludCBpbmJveF9tYXhfbXR1O1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRvdXRib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94O1xcbitcXHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcXHUwMDI2b3V0X2NoYW4sIG91dGJveC1cXHUwMDNlaW5kZXgpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXFx1MDAzYyBNQ1RQX01JTl9NVFUgKyBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xcbitcXHRpbmJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveDtcXG4rXFx0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXFx1MDAyNmluX2NoYW4sIGluYm94LVxcdTAwM2VpbmRleCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoaW5fY2hhbi5zaG1lbV9zaXplIFxcdTAwM2MgTUNUUF9NSU5fTVRVICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGluYm94X21heF9tdHUgPSBpbl9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xcbitcXG4rXFx0aWYgKGluYm94X21heF9tdHUgXFx1MDAzYyBtY3RwX3BjY19tYXhfbXR1KVxcbitcXHRcXHRtY3RwX3BjY19tYXhfbXR1ID0gaW5ib3hfbWF4X210dTtcXG4rXFxuK1xcdG5kZXYtXFx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcXG4rXFx0bmRldi1cXHUwMDNlbWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7XFxuK1xcdG5kZXYtXFx1MDAzZW1pbl9tdHUgPSBNQ1RQX01JTl9NVFU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3BjY19kcml2ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2YWNwaV9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdGFjcGlfaGFuZGxlIGRldl9oYW5kbGU7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFx0Y2hhciBuYW1lWzMyXTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0ZGV2X2RiZyhkZXYsIFxcXCJBZGRpbmcgbWN0cF9wY2MgZGV2aWNlIGZvciBISUQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdGFjcGlfZGV2aWNlX2hpZChhY3BpX2RldikpO1xcbitcXHRkZXZfaGFuZGxlID0gYWNwaV9kZXZpY2VfaGFuZGxlKGFjcGlfZGV2KTtcXG4rXFx0c3RhdHVzID0gYWNwaV93YWxrX3Jlc291cmNlcyhkZXZfaGFuZGxlLCBcXFwiX0NSU1xcXCIsIGxvb2t1cF9wY2N0X2luZGljZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNvbnRleHQpO1xcbitcXHRpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRkFJTEVEIHRvIGxvb2t1cCBQQ0MgaW5kZXhlcyBmcm9tIENSU1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgd2UgaGF2ZSBleGFjdGx5IDIgY2hhbm5lbHM6IGFuIG91dGJveCBhbmQgYW4gaW5ib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoY29udGV4dC5pbmRleCAhPSAyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIm1jdHBwY2MlZFxcXCIsIGNvbnRleHQuaW5ib3hfaW5kZXgpO1xcbitcXHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLFxcbitcXHRcXHRcXHQgICAgbWN0cF9wY2Nfc2V0dXApO1xcbitcXHRpZiAoIW5kZXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveC5pbmRleCA9IGNvbnRleHQuaW5ib3hfaW5kZXg7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZWluYm94LmNsaWVudC5kZXYgPSBkZXY7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5pbmRleCA9IGNvbnRleHQub3V0Ym94X2luZGV4O1xcbitcXHRtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3guY2xpZW50LmRldiA9IGRldjtcXG4rXFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jbGllbnQudHhfcHJlcGFyZSA9IG1jdHBfcGNjX3R4X3ByZXBhcmU7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jbGllbnQudHhfZG9uZSA9IG1jdHBfcGNjX3R4X2RvbmU7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZWFjcGlfZGV2aWNlID0gYWNwaV9kZXY7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbitcXHRhY3BpX2Rldi1cXHUwMDNlZHJpdmVyX2RhdGEgPSBtY3RwX3BjY19uZGV2O1xcbitcXHRyYyA9IGNoZWNrX2NoYW5uZWxfdHlwZXMobWN0cF9wY2NfbmRldik7XFxuK1xcdGlmIChyYyAhPSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfbmV0ZGV2O1xcbitcXG4rXFx0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGZyZWVfbmV0ZGV2O1xcbitcXG4rXFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19QQ0MpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gZnJlZV9uZXRkZXY7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgbWN0cF9jbGVhbnVwX25ldGRldiwgbmRldik7XFxuK2ZyZWVfbmV0ZGV2OlxcbitcXHRmcmVlX25ldGRldihuZGV2KTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHtcXG4rXFx0eyBcXFwiRE1UMDAwMVxcXCIgfSxcXG4rXFx0e31cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgbWN0cF9wY2NfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJtY3RwX3BjY1xcXCIsXFxuK1xcdC5jbGFzcyA9IFxcXCJVbmtub3duXFxcIixcXG4rXFx0LmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsXFxuK1xcdC5vcHMgPSB7XFxuK1xcdFxcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxcbitcXHR9LFxcbit9O1xcbitcXG4rbW9kdWxlX2FjcGlfZHJpdmVyKG1jdHBfcGNjX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIG1jdHBfcGNjX2RldmljZV9pZHMpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFBDQyBBQ1BJIGRldmljZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkFkYW0gWW91bmcgXFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXFx1MDAzZVxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGNjLmggYi9pbmNsdWRlL2FjcGkvcGNjLmhcXG5pbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hY3BpL3BjYy5oXFxuKysrIGIvaW5jbHVkZS9hY3BpL3BjYy5oXFxuQEAgLTgsNiArOCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFpbGJveF9jb250cm9sbGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICptY2hhbjtcXG5AQCAtMTcsNiArMTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XFxuIFxcdHUzMiBsYXRlbmN5O1xcbiBcXHR1MzIgbWF4X2FjY2Vzc19yYXRlO1xcbiBcXHR1MTYgbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0ZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlO1xcbiB9O1xcbiBcXG4gLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovXFxuQEAgLTM3LDYgKzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xcbiBleHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcXG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcXG4rZXh0ZXJuIGludFxcbitwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbkBAIC00NCw2ICs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbiBcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnRcXG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX1BDQ19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjExLjY4MDgxOTU4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0ODk0NDUyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmY3OGJkODJiMDEwZTJmZmUwMDg1NWRkOGM1YjVmNTIxNjBjZTA4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjAwOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjk0MGFhM2Q0OThiOTkuLjlmNDhkZWUwZjRjNmRjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTU1ODIsNiArMTU1ODIsMTEgQEAgRjpcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxuIEY6XHRpbmNsdWRlL25ldC9uZXRucy9tY3RwLmhcbiBGOlx0bmV0L21jdHAvXG4gXG4rTUFOQUdFTUVOVCBDT01QT05FTlQgVFJBTlNQT1JUIFBST1RPQ09MIChNQ1RQKSBvdmVyIFBDQyAoTUNUUC1QQ0MpIERyaXZlclxuK006XHRBZGFtIFlvdW5nIFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXHUwMDNlXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG4rXG4gTUFQTEUgVFJFRVxuIE06XHRMaWFtIFIuIEhvd2xldHQgXHUwMDNjbGlhbUBpbmZyYWRlYWQub3JnXHUwMDNlXG4gUjpcdEFsaWNlIFJ5aGwgXHUwMDNjYWxpY2VyeWhsQGdvb2dsZS5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21haWxib3gvcGNjLmMgYi9kcml2ZXJzL21haWxib3gvcGNjLmNcbmluZGV4IDYzNjg3OWFlMWRiNzZiLi5kYmZlOGRkOTJkZGQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xuKysrIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jXG5AQCAtMjcwLDYgKzI3MCw5IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbilcbiBcdHU2NCB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHBjaGFuLVx1MDAzZXR5cGUgPT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19TTEFWRV9TVUJTUEFDRSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZChcdTAwMjZwY2hhbi1cdTAwM2VlcnJvciwgXHUwMDI2dmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzE0LDYgKzMxNyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47XG4gXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gcDtcbitcdGludCByYztcbiBcbiBcdHBjaGFuID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbiBcbkBAIC0zMjEsMTQgKzMyNSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSlcbitcdCAgICAhUkVBRF9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuIFxuIFx0aWYgKCFwY2NfbWJveF9jbWRfY29tcGxldGVfY2hlY2socGNoYW4pKVxuIFx0XHRyZXR1cm4gSVJRX05PTkU7XG4gXG4tXHRpZiAocGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmMgPSBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pO1xuIFxuIFx0LypcbiBcdCAqIENsZWFyIHRoaXMgZmxhZyBhZnRlciB1cGRhdGluZyBpbnRlcnJ1cHQgYWNrIHJlZ2lzdGVyIGFuZCBqdXN0XG5AQCAtMzM2LDE1ICszMzksNjAgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xuIFx0ICogcmVxdWlyZWQgdG8gYXZvaWQgYW55IHBvc3NpYmxlIHJhY2UgaW4gdXBkYXRhdGlvbiBvZiB0aGlzIGZsYWcuXG4gXHQgKi9cbi1cdHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlID0gZmFsc2U7XG4tXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbi1cdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7XG4rXHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCBmYWxzZSk7XG4rXHRpZiAoIXJjKVxuK1x0XHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbitcdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgcmMpO1xuIFxuIFx0cGNjX2NoYW5fYWNrbm93bGVkZ2UocGNoYW4pO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbisvKipcbisgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbFxuKyAqICAgICAgICAgICAgICB3aXRob3V0IGFjdGl2YXRpbmcgdGhlIGNoYW5uZWwuXG4rICpcbisgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW5cbisgKiAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjaGFubmVsIGRhdGEuXG4rICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudFxuKyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0NcbisgKiAgICAgIHN1YnNwYWNlcyBhcyBwYXJzZWQgYnkgdGhlIFBDQyBNYWlsYm94IGNvbnRyb2xsZXIuXG4rICpcbisgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuXG4rICovXG4raW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4re1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcbitcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcbitcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIXFfY2hhbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoc3Vic3BhY2VfaWQgXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXHUwMDNlPSBwY2NfY2hhbl9jb3VudClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRwY2hhbiA9IGNoYW5faW5mbyArIHN1YnNwYWNlX2lkO1xuK1x0Y2hhbiA9IHBjaGFuLVx1MDAzZWNoYW4ubWNoYW47XG4rXHRpZiAoSVNfRVJSKGNoYW4pKSB7XG4rXHRcdHByX2VycihcIkNoYW5uZWwgbm90IGZvdW5kIGZvciBpZHg6ICVkXFxuXCIsIHN1YnNwYWNlX2lkKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcdHBjY19tY2hhbiA9IFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4rXG4rXHRxX2NoYW4tXHUwMDNlc2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkcjtcbitcdHFfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4rXHRxX2NoYW4tXHUwMDNlc2htZW1fc2l6ZSA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplO1xuK1x0cV9jaGFuLVx1MDAzZWxhdGVuY3kgPSBwY2NfbWNoYW4tXHUwMDNlbGF0ZW5jeTtcbitcdHFfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xuK1x0cV9jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWUgPSBwY2NfbWNoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbitcdHFfY2hhbi1cdTAwM2V0eXBlID0gcGNjX21jaGFuLVx1MDAzZXR5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcXVlcnlfY2hhbm5lbCk7XG4rXG4gLyoqXG4gICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG4gICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbkBAIC0zNjAsNyArNDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIHtcbi1cdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47XG4gXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuIFx0aW50IHJjO1xuQEAgLTM3NSwyMCArNDIyLDEwIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4gXHR9XG4gXG4tXHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuLVx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gYWNwaV9vc19pb3JlbWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHIsXG4tXHRcdFx0XHRcdCAgIHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplKTtcbi1cdGlmICghcGNjX21jaGFuLVx1MDAzZXNobWVtKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuLVxuIFx0cmMgPSBtYm94X2JpbmRfY2xpZW50KGNoYW4sIGNsKTtcbi1cdGlmIChyYykge1xuLVx0XHRpb3VubWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbSk7XG4tXHRcdHBjY19tY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4tXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbi1cdH1cbi1cbi1cdHJldHVybiBwY2NfbWNoYW47XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHRyZXR1cm4gIFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG4gXG5AQCAtNDAwLDE5ICs0MzcsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiAgKi9cbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXG4ge1xuLVx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuLVx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjtcbitcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4gXG4rXHRpZiAoIXBjaGFuKVxuK1x0XHRyZXR1cm47XG4rXHRjaGFuID0gcGNoYW4tXHUwMDNlbWNoYW47XG4gXHRpZiAoIWNoYW4gfHwgIWNoYW4tXHUwMDNlY2wpXG4gXHRcdHJldHVybjtcbi1cdHBjaGFuX2luZm8gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuLVx0cGNjX21ib3hfY2hhbiA9IFx1MDAyNnBjaGFuX2luZm8tXHUwMDNlY2hhbjtcbi1cdGlmIChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKSB7XG4tXHRcdGlvdW5tYXAocGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSk7XG4tXHRcdHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0gPSBOVUxMO1xuLVx0fVxuLVxuIFx0bWJveF9mcmVlX2NoYW5uZWwoY2hhbik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X2ZyZWVfY2hhbm5lbCk7XG5AQCAtNDQwLDcgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKVxuIFxuIFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKFx1MDAyNnBjaGFuLVx1MDAzZWRiKTtcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwY2hhbi1cdTAwM2VwbGF0X2lycSBcdTAwM2UgMClcbi1cdFx0cGNoYW4tXHUwMDNlY2hhbl9pbl91c2UgPSB0cnVlO1xuK1x0XHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCB0cnVlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ2Miw5ICs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIHN0YXRpYyBpbnQgcGNjX3N0YXJ0dXAoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcbiBcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmM7XG4gXG4rXHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuK1x0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gYWNwaV9vc19pb3JlbWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHIsXG4rXHRcdFx0XHRcdCAgIHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplKTtcbitcdGlmIChwY2NfbWNoYW4tXHUwMDNlc2htZW0gID09IE5VTEwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0LypcbiBcdCAqIENsZWFyIGFuZCBhY2tub3dsZWRnZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIG9uIHJlc3BvbmRlciBjaGFubmVsXG4gXHQgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdFxuQEAgLTQ3OSw2ICs1MTYsOCBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4gXHRcdGlmICh1bmxpa2VseShyYykpIHtcbiBcdFx0XHRkZXZfZXJyKGNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXG5cIixcbiBcdFx0XHRcdHBjaGFuLVx1MDAzZXBsYXRfaXJxKTtcbitcdFx0XHRpb3VubWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbSk7XG4rXHRcdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbkBAIC00ODgsMTUgKzUyNywyMyBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4gXG4gLyoqXG4gICogcGNjX3NodXRkb3duIC0gQ2FsbGVkIGZyb20gTWFpbGJveCBDb250cm9sbGVyIGNvZGUuIFVzZWQgaGVyZVxuLSAqXHRcdHRvIGZyZWUgdGhlIGludGVycnVwdC5cbisgKlx0XHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQgYW5kIHVubWFwIHRoZSBzaGFyZWQgbWVtb3J5LlxuICAqIEBjaGFuOiBQb2ludGVyIHRvIE1haWxib3ggY2hhbm5lbCB0byBzaHV0ZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwY2Nfc2h1dGRvd24oc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XG4gXG4gXHRpZiAocGNoYW4tXHUwMDNlcGxhdF9pcnEgXHUwMDNlIDApXG4gXHRcdGRldm1fZnJlZV9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIGNoYW4pO1xuK1x0c3luY2hyb25pemVfaXJxKHBjaGFuLVx1MDAzZXBsYXRfaXJxKTtcbitcbitcdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuK1x0aWYgKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pIHtcbitcdFx0aW91bm1hcChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKTtcbitcdFx0cGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWJveF9jaGFuX29wcyBwY2NfY2hhbl9vcHMgPSB7XG5AQCAtODMxLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0cGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTtcbiBcbiBcdFx0cGNoYW4tXHUwMDNldHlwZSA9IHBjY3RfZW50cnktXHUwMDNldHlwZTtcbitcdFx0cGNoYW4tXHUwMDNlY2hhbi50eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuIFx0XHRwY2N0X2VudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKVxuIFx0XHRcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSArIHBjY3RfZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jOWI4ZjM4ZmYwZmI5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5AQCAtNDcsNiArNDcsMjEgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwibWN0cC1jb250cm9sbGVyXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cbiBcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDXG4rXHR0cmlzdGF0ZSBcIk1DVFAgUENDIHRyYW5zcG9ydFwiXG4rXHRkZXBlbmRzIG9uIEFDUElcbitcdGRlcGVuZHMgb24gUENDXG4rXHRkZXBlbmRzIG9uIENQVV9MSVRUTEVfRU5ESUFOXG4rXHRoZWxwXG4rXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBQQ0MgdHJhbnNwb3J0LFxuK1x0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCB2aWEgQUNQSSBmb3IgZWFjaFxuK1x0ICBlbnRyeSBpbiB0aGUgRFNEVC9TU0RUIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci4gVGhlIFBsYXRmb3JtXG4rXHQgIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmdcbitcdCAgZW50cmllcyBpbiB0aGUgUENDVC5cbitcbitcdCAgU2F5IHkgaGVyZSBpZiB5b3UgbmVlZCB0byBjb25uZWN0IHRvIE1DVFAgZW5kcG9pbnRzIG92ZXIgUENDLiBUb1xuK1x0ICBjb21waWxlIGFzIGEgbW9kdWxlLCB1c2UgbTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RwLXBjYy5cbitcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcIk1DVFAgVVNCIHRyYW5zcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFVTQlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uMGE1OTEyOTlmZmE5MmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kzQykgKz0gbWN0cC1pM2Mub1xuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICs9IG1jdHAtcGNjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSArPSBtY3RwLXVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzRmM2IyMTUxMzcwXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcbkBAIC0wLDAgKzEsNDY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtcGNjLmMgLSBEcml2ZXIgZm9yIE1DVFAgb3ZlciBQQ0MuXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYsIEFtcGVyZSBDb21wdXRpbmcgTExDXG4rICpcbisgKi9cbitcbisvKiBJbXBsZW1lbnRhdGlvbiBvZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjkyLnBkZlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hydGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FjcGkvYWNwaV9idXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvYWNwaV9kcml2ZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcmVzdHlwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL2FjdGJsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbitcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFICAgICAgICAgIFwiTUNUUFwiXG4rI2RlZmluZSBNQ1RQX1NJR05BVFVSRV9MRU5HVEggICAoc2l6ZW9mKE1DVFBfU0lHTkFUVVJFKSAtIDEpXG4rI2RlZmluZSBNQ1RQX01JTl9NVFUgICAgICAgICAgICA2OFxuKyNkZWZpbmUgUENDX0hFQURFUl9TSVpFICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KVxuKyNkZWZpbmUgTUNUUF9QQ0NfTUlOX1NJWkUgICAgICAgKFBDQ19IRUFERVJfU0laRSArIE1DVFBfTUlOX01UVSlcbisjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcbitzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCB7XG4rXHR1MzIgaW5kZXg7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjtcbitcdHN0cnVjdCBtYm94X2NsaWVudCBjbGllbnQ7XG4rfTtcbitcbisvKiBUaGUgbmV0ZGV2IHN0cnVjdHVyZS4gT25lIG9mIHRoZXNlIHBlciBQQ0MgYWRhcHRlci4gKi9cbitzdHJ1Y3QgbWN0cF9wY2NfbmRldiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBpbmJveDtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IG91dGJveDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjayhzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuK3tcbitcdHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5IHBjY19oZWFkZXI7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICppbmJveDtcbitcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0aW50IHNpemU7XG4rXG4rXHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTtcbitcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbitcdG1lbWNweV9mcm9taW8oXHUwMDI2cGNjX2hlYWRlciwgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbSwgc2l6ZW9mKHBjY19oZWFkZXIpKTtcbitcbitcdC8vIFRoZSBtZXNzYWdlIG11c3QgYXQgbGVhc3QgaGF2ZSB0aGUgUENDIGNvbW1hbmQgaW5kaWNhdGluZyBpdCBpcyBhbiBNQ1RQXG4rXHQvLyBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSBNQ1RQIGhlYWRlciwgb3Igd2UgaGF2ZSBhIG1hbGZvcm1lZCBtZXNzYWdlLlxuK1x0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0Ly8gSWYgdGhlIHJlcG9ydGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIHNoYXJlZCBtZW1vcnkgbWludXMgaGVhZGVycyxcbitcdC8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS5cbitcdGlmIChwY2NfaGVhZGVyLmxlbmd0aCBcdTAwM2UgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbV9zaXplIC0gUENDX0VYVFJBX0xFTilcbitcdFx0Z290byBlcnJvcjtcbitcbitcdGlmIChtZW1jbXAoXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICsgUENDX0VYVFJBX0xFTjtcbitcdHNrYiA9IG5ldGRldl9hbGxvY19za2IobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2LCBzaXplKTtcbitcdGlmICghc2tiKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0c2tiX3B1dChza2IsIHNpemUpO1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4rXHRtZW1jcHlfZnJvbWlvKHNrYi1cdTAwM2VkYXRhLCBpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtLCBzaXplKTtcbitcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldiwgc2l6ZSk7XG4rXHRza2JfcHVsbChza2IsIHNpemVvZihwY2NfaGVhZGVyKSk7XG4rXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRjYiA9IF9fbWN0cF9jYihza2IpO1xuK1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuK1x0bmV0aWZfcngoc2tiKTtcbitcdHJldHVybjtcbitcbitlcnJvcjpcbitcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbXBuZCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSkpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRwY2NfaGVhZGVyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbitcdHBjY19oZWFkZXItXHUwMDNlc2lnbmF0dXJlID0gUENDX1NJR05BVFVSRSB8IG1wbmQtXHUwMDNlb3V0Ym94LmluZGV4O1xuK1x0cGNjX2hlYWRlci1cdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XG4rXHRtZW1jcHkoXHUwMDI2cGNjX2hlYWRlci1cdTAwM2Vjb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKTtcbitcdHBjY19oZWFkZXItXHUwMDNlbGVuZ3RoID0gbGVuICsgTUNUUF9TSUdOQVRVUkVfTEVOR1RIO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIG1wbmQtXHUwMDNlb3V0Ym94LmNoYW4tXHUwMDNlc2htZW1fc2l6ZSlcbitcdFx0Z290byBlcnJvcjtcbitcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb25cbitcdCAqIGFub3RoZXIgdGhyZWFkLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQgd2UgZG9uJ3QgcmVzdGFydFxuK1x0ICogdGhlIHF1ZXVlLCBpdCB3aWxsIHJlbWFpbiBwZXJtYW5lbnRseSBzdG9wcGVkLlxuK1x0ICogU3RvcHBpbmcgdGhlIHF1ZXVlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHNlbmQgdGhlIG1lc3NhZ2VcbitcdCAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy5cbitcdCAqL1xuK1x0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbitcdGlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuLCBza2IpIFx1MDAzZT0gMCkge1xuK1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xuK1x0fSBlbHNlIHtcbitcdFx0Ly8gUmVtb3ZlIHRoZSBoZWFkZXIgaW4gY2FzZSBpdCBnZXRzIHNlbnQgYWdhaW5cbitcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0fVxuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcbitlcnJvcjpcbitcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9wY2NfdHhfcHJlcGFyZShzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuK3tcbitcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbitcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xuK1xuK1x0bWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xuK1x0b3V0Ym94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3g7XG4rXG4rXHQvKiBUaGUgUENDIE1haWxib3ggdHlwaWNhbGx5IGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZSBtc3NnIHBvaW50ZXJcbitcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxuK1x0ICogVGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIG5vbi1udWxsOyBpdCBpcyBwb3NzaWJsZVxuK1x0ICogdGhhdCBhIGNoYW5nZSBpbiB0aGUgTWFpbGJveCBsZXZlbCB3aWxsIGJyZWFrIHRoYXQgYXNzdW1wdGlvbi5cbitcdCAqL1xuK1x0aWYgKCFza2IpIHtcbitcdFx0bmV0ZGV2X3dhcm5fb25jZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsXG4rXHRcdFx0XHQgXCIlcyBjYWxsZWQgd2l0aCBudWxsIG1lc3NhZ2UuXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0bWVtY3B5X3RvaW8ob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW0sIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9wY2NfdHhfZG9uZShzdHJ1Y3QgbWJveF9jbGllbnQgKmMsIHZvaWQgKm1zc2csIGludCByYylcbit7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IG1zc2c7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIGEgcGFja2V0IGluIGZsaWdodCBkdXJpbmcgZHJpdmVyIGNsZWFudXBcbitcdCAqIEl0IG1heSBoYXZlIGJlZW4gZnJlZWQgYWxyZWFkeS5cbitcdCAqL1xuK1x0aWYgKCFtc3NnKVxuK1x0XHRyZXR1cm47XG4rXHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBvdXRib3guY2xpZW50KTtcbitcbitcdC8qIFVzZSBhbiBJUlEgc2FmZSB1cGRhdGUgYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSBIQVJEIElSUSBpbnN0ZWFkIG9mXG4rXHQgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNrYi1cdTAwM2VsZW4pO1xuK1x0ICovXG4rXHRkc3RhdHMgPSB0aGlzX2NwdV9wdHIobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1xuK1x0aWYgKHJjKSB7XG4rXHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbitcdH0gZWxzZSB7XG4rXHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X3BhY2tldHMpO1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHR9XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3gsICppbmJveDtcbitcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1xuK1x0b3V0Ym94LVx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2b3V0Ym94LVx1MDAzZWNsaWVudCwgb3V0Ym94LVx1MDAzZWluZGV4KTtcbitcdGlmIChJU19FUlIob3V0Ym94LVx1MDAzZWNoYW4pKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihvdXRib3gtXHUwMDNlY2hhbik7XG4rXHRpZiAob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbitcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cdTAwM2VjaGFuKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpbmJveC1cdTAwM2VjbGllbnQucnhfY2FsbGJhY2sgPSBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2s7XG4rXHRpbmJveC1cdTAwM2VjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmluYm94LVx1MDAzZWNsaWVudCwgaW5ib3gtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKElTX0VSUihpbmJveC1cdTAwM2VjaGFuKSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LVx1MDAzZWNoYW4pO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihpbmJveC1cdTAwM2VjaGFuKTtcbitcdH1cbitcdGlmIChpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtX3NpemUgXHUwMDNjIE1DVFBfUENDX01JTl9TSVpFKSB7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChpbmJveC1cdTAwM2VjaGFuKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3BjY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuK1x0dW5zaWduZWQgaW50IGNvdW50LCBpZHg7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdG1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2hhbik7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmNoYW4gPSBOVUxMO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmNoYW4tXHUwMDNlbG9jaykge1xuK1x0XHRpZiAoY2hhbi1cdTAwM2VhY3RpdmVfcmVxICE9ICBNQk9YX05PX01TRykge1xuK1x0XHRcdHNrYiA9IGNoYW4tXHUwMDNlYWN0aXZlX3JlcTtcbitcdFx0XHRjaGFuLVx1MDAzZWFjdGl2ZV9yZXEgPSBNQk9YX05PX01TRztcbitcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XG4rXHRcdFx0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0XHR9XG4rXHRcdHdoaWxlIChjaGFuLVx1MDAzZW1zZ19jb3VudCBcdTAwM2UgMCkge1xuK1x0XHRcdGNvdW50ID0gY2hhbi1cdTAwM2Vtc2dfY291bnQ7XG4rXHRcdFx0aWR4ID0gY2hhbi1cdTAwM2Vtc2dfZnJlZTtcbitcdFx0XHRpZiAoaWR4IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0XHRpZHggLT0gY291bnQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0aWR4ICs9IE1CT1hfVFhfUVVFVUVfTEVOIC0gY291bnQ7XG4rXHRcdFx0c2tiID0gY2hhbi1cdTAwM2Vtc2dfZGF0YVtpZHhdO1xuK1x0XHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbitcdFx0XHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4rXHRcdFx0Y2hhbi1cdTAwM2Vtc2dfY291bnQtLTtcbitcdFx0fVxuK1x0fVxuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4pO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2hhbiA9IE5VTEw7XG4rXHQvKlxuK1x0ICogSWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGJlY2F1c2UgdGhlIHJpbmcgYnVmZmVyIHdhcyBmdWxsXG4rXHQgKiB3ZSBjYW4gcmVzdGFydCBpdCBoZXJlIGFzIHdlIG5vdyBrbm93IHRoZSByaW5nIGJ1ZmZlciBoYXNcbitcdCAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZVxuK1x0ICogbmV0ZGV2IGlzIHJlLW9wZW5lZC5cbitcdCAqL1xuK1x0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fb3BlbiA9IG1jdHBfcGNjX29wZW4sXG4rXHQubmRvX3N0b3AgPSBtY3RwX3BjY19zdG9wLFxuK1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbitcdG5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTtcbitcdG5kZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4rXHRuZGV2LVx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xuK1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bWN0cF9wY2NfbmV0ZGV2X29wcztcbitcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuK1x0bmRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xuK31cbitcbitzdHJ1Y3QgbWN0cF9wY2NfbG9va3VwX2NvbnRleHQge1xuK1x0aW50IGluZGV4O1xuK1x0dTMyIGluYm94X2luZGV4O1xuK1x0dTMyIG91dGJveF9pbmRleDtcbit9O1xuK1xuK3N0YXRpYyBhY3BpX3N0YXR1cyBsb29rdXBfcGNjdF9pbmRpY2VzKHN0cnVjdCBhY3BpX3Jlc291cmNlICphcmVzLFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0ICpsdWMgPSBjb250ZXh0O1xuK1x0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xuK1xuK1x0aWYgKGFyZXMtXHUwMDNldHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzMyKVxuK1x0XHRyZXR1cm4gQUVfT0s7XG4rXG4rXHRhZGRyID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIsIFx1MDAyNmFyZXMtXHUwMDNlZGF0YSk7XG4rXHRzd2l0Y2ggKGx1Yy1cdTAwM2VpbmRleCkge1xuK1x0Y2FzZSAwOlxuK1x0XHRsdWMtXHUwMDNlb3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAxOlxuK1x0XHRsdWMtXHUwMDNlaW5ib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gQUVfRVJST1I7XG4rXHR9XG4rXHRsdWMtXHUwMDNlaW5kZXgrKztcbitcdHJldHVybiBBRV9PSztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcbitcbitcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF90eXBlcyhzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldilcbit7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gY2hhbjtcbitcdGludCBhY3R1YWxfdHlwZTtcbitcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgb3V0Ym94LVx1MDAzZWluZGV4KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRhY3R1YWxfdHlwZSA9IGNoYW4udHlwZTtcbitcdGlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX01BU1RFUl9TVUJTUEFDRSkge1xuK1x0XHRwcl9lcnIoXCJNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwiLCBhY3R1YWxfdHlwZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xuK1x0aWYgKGFjdHVhbF90eXBlICE9IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpIHtcbitcdFx0cHJfZXJyKFwiTUNUUC1QQ0MgaW5ib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwiLCBhY3R1YWxfdHlwZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiBpbl9jaGFuO1xuK1x0aW50IG1jdHBfcGNjX21heF9tdHU7XG4rXHRpbnQgaW5ib3hfbWF4X210dTtcbitcbitcdG1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2b3V0X2NoYW4sIG91dGJveC1cdTAwM2VpbmRleCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSArIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2aW5fY2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChpbl9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSArIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aW5ib3hfbWF4X210dSA9IGluX2NoYW4uc2htZW1fc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7XG4rXG4rXHRpZiAoaW5ib3hfbWF4X210dSBcdTAwM2MgbWN0cF9wY2NfbWF4X210dSlcbitcdFx0bWN0cF9wY2NfbWF4X210dSA9IGluYm94X21heF9tdHU7XG4rXG4rXHRuZGV2LVx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcbitcdG5kZXYtXHUwMDNlbWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7XG4rXHRuZGV2LVx1MDAzZW1pbl9tdHUgPSBNQ1RQX01JTl9NVFU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3BjY19kcml2ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmFjcGlfZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0YWNwaV9oYW5kbGUgZGV2X2hhbmRsZTtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcdGNoYXIgbmFtZVszMl07XG4rXHRpbnQgcmM7XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJBZGRpbmcgbWN0cF9wY2MgZGV2aWNlIGZvciBISUQgJXNcXG5cIixcbitcdFx0YWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7XG4rXHRkZXZfaGFuZGxlID0gYWNwaV9kZXZpY2VfaGFuZGxlKGFjcGlfZGV2KTtcbitcdHN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2X2hhbmRsZSwgXCJfQ1JTXCIsIGxvb2t1cF9wY2N0X2luZGljZXMsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmNvbnRleHQpO1xuK1x0aWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGQUlMRUQgdG8gbG9va3VwIFBDQyBpbmRleGVzIGZyb20gQ1JTXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBFbnN1cmUgd2UgaGF2ZSBleGFjdGx5IDIgY2hhbm5lbHM6IGFuIG91dGJveCBhbmQgYW4gaW5ib3guXG4rXHQgKi9cbitcdGlmIChjb250ZXh0LmluZGV4ICE9IDIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcIm1jdHBwY2MlZFwiLCBjb250ZXh0LmluYm94X2luZGV4KTtcbitcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCptY3RwX3BjY19uZGV2KSwgbmFtZSwgTkVUX05BTUVfUFJFRElDVEFCTEUsXG4rXHRcdFx0ICAgIG1jdHBfcGNjX3NldHVwKTtcbitcdGlmICghbmRldilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmluZGV4ID0gY29udGV4dC5pbmJveF9pbmRleDtcbitcdG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2xpZW50LmRldiA9IGRldjtcbitcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jbGllbnQuZGV2ID0gZGV2O1xuK1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X2RvbmUgPSBtY3RwX3BjY190eF9kb25lO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VhY3BpX2RldmljZSA9IGFjcGlfZGV2O1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2ID0gbmRldjtcbitcdGFjcGlfZGV2LVx1MDAzZWRyaXZlcl9kYXRhID0gbWN0cF9wY2NfbmRldjtcbitcdHJjID0gY2hlY2tfY2hhbm5lbF90eXBlcyhtY3RwX3BjY19uZGV2KTtcbitcdGlmIChyYyAhPSAwKVxuK1x0XHRnb3RvIGZyZWVfbmV0ZGV2O1xuK1xuK1x0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBmcmVlX25ldGRldjtcbitcbitcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfUENDKTtcbitcdGlmIChyYylcbitcdFx0Z290byBmcmVlX25ldGRldjtcbitcbitcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBtY3RwX2NsZWFudXBfbmV0ZGV2LCBuZGV2KTtcbitmcmVlX25ldGRldjpcbitcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHtcbitcdHsgXCJETVQwMDAxXCIgfSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIG1jdHBfcGNjX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJtY3RwX3BjY1wiLFxuK1x0LmNsYXNzID0gXCJVbmtub3duXCIsXG4rXHQuaWRzID0gbWN0cF9wY2NfZGV2aWNlX2lkcyxcbitcdC5vcHMgPSB7XG4rXHRcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxuK1x0fSxcbit9O1xuK1xuK21vZHVsZV9hY3BpX2RyaXZlcihtY3RwX3BjY19kcml2ZXIpO1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTUNUUCBQQ0MgQUNQSSBkZXZpY2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BjYy5oIGIvaW5jbHVkZS9hY3BpL3BjYy5oXG5pbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FjcGkvcGNjLmhcbisrKyBiL2luY2x1ZGUvYWNwaS9wY2MuaFxuQEAgLTgsNiArOCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFpbGJveF9jb250cm9sbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqbWNoYW47XG5AQCAtMTcsNiArMTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XG4gXHR1MzIgbGF0ZW5jeTtcbiBcdHUzMiBtYXhfYWNjZXNzX3JhdGU7XG4gXHR1MTYgbWluX3R1cm5hcm91bmRfdGltZTtcbitcdGVudW0gYWNwaV9wY2N0X3R5cGUgdHlwZTtcbiB9O1xuIFxuIC8qIEdlbmVyaWMgQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCBTaGFyZWQgTWVtb3J5IFJlZ2lvbiAqL1xuQEAgLTM3LDYgKzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIGV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7XG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcbitleHRlcm4gaW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbkBAIC00NCw2ICs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pIHsgfVxuK3N0YXRpYyBpbmxpbmUgaW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4re1xuK1x0cmV0dXJuIC1FTk9ERVY7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUENDX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjExLjY4MDgyMTAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODQzMTUxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1DVFAvUENDIERyaXZlciBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gd2UndmUgZ290IGEgbmV3IGRyaXZlciwgYG1jdHAtcGNjLmNgLCBpbXBsZW1lbnRpbmcgTUNUUCBvdmVyIFBDQy4gVGhhdCdzIGludGVyZXN0aW5nLCBhIG5ldyBuZXR3b3JrIGRyaXZlciwgYW5kIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgbmV3IG5ldHdvcmsgZHJpdmVycyBhcmUgYWx3YXlzIHdvcnRoIGEgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0IGludHJvZHVjZXMgYSBgTUNUUF9UUkFOU1BPUlRfUENDYCBLY29uZmlnIG9wdGlvbiBhbmQgdG91Y2hlcyBgcGNjLmNgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBwY2NfbWJveF9xdWVyeV9jaGFubmVsYCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaW50ZXJydXB0IGFuZCBjaGFubmVsIHJlcXVlc3QgbG9naWMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENDLCBiZWluZyBBQ1BJLWJhc2VkLCBtYWtlcyB0aGlzIGEga2V5IHF1ZXN0aW9uLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdXNlcyB0aGUgQUNQSSBkZXZpY2UgSUQgYERNVDAwMDFgLiBDYW4gd2UgdHJpY2sgUUVNVSBpbnRvIGVtdWxhdGluZyB0aGlzPyBTeXprYWxsZXIncyBBQ1BJIHRhYmxlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgY29tZSB0byBtaW5kLiBCdXQsIHdhaXQuLi4gU3l6a2FsbGVyJ3MgQUNQSSB0YWJsZSBpbmplY3Rpb24gZm9yIFBDQyBpc24ndCBleGFjdGx5IHN0cmFpZ2h0Zm9yd2FyZCBvciBnZW5lcmljLiBUaGlzIGlzbid0IGEgKmRpcmVjdCogQUNQSSBkcml2ZXIuIGl0J3MgYSAqbmV0d29yayogZHJpdmVyLlxuXG5Pa2F5LCBsZXQncyByZWZvY3VzLiBJZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIGBtY3RwX3BjY19kcml2ZXJfYWRkYCB3b24ndCBldmVuIGJlIGNhbGxlZC4gV2UgbmVlZCB0byBmaW5kIGEgdHJpZ2dlci4gQ2FuIHN5emthbGxlciBkbyAqYW55dGhpbmcqIHdpdGggQUNQSSBkZXZpY2UgaW5zdGFudGlhdGlvbiBoZXJlPyBOb3BlLCB0aGUgZ2VuZXJpYyBgc3l6X2FjcGlfLi4uYCB3b24ndCBoZWxwLiBXZSBjYW4gZnV6eiBuZXRkZXYgb3BzLCBidXQgd2UgbmVlZCB0aGUgZGV2aWNlIHRvIGJlIGNyZWF0ZWQgc29tZWhvdy4gTm8sIGl0J3MgYW4gQUNQSSBkcml2ZXIuXG5cblRoaW5raW5nIGFib3V0IGl0IG1vcmUsIHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB0b3VjaCBBQ1BJIGRyaXZlcnMgdW5sZXNzIHRoZXkgY2FuIGJlIGluc3RhbnRpYXRlZC4gQnV0IGhleSwgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgaW4gYHBjYy5jYC4gR2l2ZW4gdGhhdCBgcGNjX21ib3hfcXVlcnlfY2hhbm5lbGAgaXMgYWRkZWQsIElzIGBNQ1RQX1RSQU5TUE9SVF9QQ0NgIHN0aWxsIHdvcnRoIGZ1enppbmc/IFllcywgYSBuZXcgbmV0d29yayBkcml2ZXIuXG5cbkFscmlnaHQsIGxldCdzIGdldCBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbWN0cF9wY2MuY2AuIEl0IHJlZ2lzdGVycyBhIG5ldGRldiB1c2luZyBgbWN0cF9yZWdpc3Rlcl9uZXRkZXZgLCB3aXRoIGBtY3RwX3BjY19uZXRkZXZfb3BzYCBjb250YWluaW5nIGBuZG9fc3RhcnRfeG1pdCA9IG1jdHBfcGNjX3R4YC4gT2theSwgc28gaWYgdGhlIGRldmljZSAqY2FuKiBiZSBjcmVhdGVkLCB3ZSdyZSBnb2xkZW4uIEZ1enppbmcgdGhlIG5ldGRldiBvcGVyYXRpb25zIGJlY29tZXMgZmVhc2libGUuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIEFDUEkgZGV2aWNlcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIEFDUEkgZGV2aWNlIGluc3RhbnRpYXRvci5cblxuTGV0J3MgY2hlY2sgdGhlIHByb21wdCEgSXQgc2F5cyB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50c1wiLiBJcyBQQ0MgZW11bGF0ZWQgaW4gUUVNVT8gUUVNVSBoYXMgQUNQSSBzdXBwb3J0LCBidXQgUENDLCBzcGVjaWZpY2FsbHk/IFByb2JhYmx5IG5vdC4gSXQncyBhbiBBQ1BJIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gdGhlIGZpcm13YXJlIHByb3ZpZGluZyBBQ1BJIHRhYmxlcy4gSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3QgcHJvdmlkZSBpdCwgdGhlIGRyaXZlciB3b24ndCBwcm9iZS5cblxuU28sIGRvIHdlIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgc2VlIHdoYXQgaGFwcGVucywgb3IgaXMgdGhpcyBkZWFkIGVuZD9cblxuSG93ZXZlciwgdGhlIHByb21wdCBhbHNvIHNheXMsIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TbyBsZXQncyBmaW5kIGlmIHdlIGNhbiBleGVjdXRlIGBtY3RwX3BjY19kcml2ZXJfYWRkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDoyMy41MjM5NzUwODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTIxODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3BjY19kcml2ZXJfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz0zNTA9c3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy0zODMtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjM4NDpzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtMzg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz00NTE9c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtNDU1LVxcdC5vcHMgPSB7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjQ1NjpcXHRcXHQuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtNDU3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjI2LjE4NTE5ODMwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDIzMjUxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBQ1BJIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYW4gQUNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0J3MgZGVhbGluZyB3aXRoIGRldmljZXMgZGVzY3JpYmVkIGluIHRoZSBEU0RUL1NTRFQgdGFibGVzLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlIG9yLCBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGUgZW11bGF0b3IgaXRzZWxmLiBJIGtub3cgdGhhdCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgaW50byBMaW51eCBpcyBwb3NzaWJsZSDigJMgd2UgY2FuIGRvIGl0IHRocm91Z2ggY29uZmlnZnMgKGBDT05GSUdfQUNQSV9DT05GSUdGU2ApIG9yIHZpYSBpbml0cmQuIEknbSBwcmV0dHkgc3VyZSBTeXprYWxsZXIgaXNuJ3Qgc2V0IHVwIHRvIGRvIHRoYXQgZHluYW1pY2FsbHkgZm9yIGp1c3QgYW55IGFyYml0cmFyeSBkZXZpY2UgcmlnaHQgbm93LCB0aG91Z2guXG5cbkhtbSwgd2FpdC4uLiBpcyB0aGVyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIE1DVFA/IEFoLCB5ZXMhIEknbSBzZWVpbmcgaXQgbm93OiBNQ1RQIG92ZXIgc2VyaWFsIChgbWN0cC1zZXJpYWxgKSwgSTJDIChgbWN0cC1pMmNgKSwgSTNDIChgbWN0cC1pM2NgKSwgYW5kIFVTQiAoYG1jdHAtdXNiYCkuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IE1DVFAgb3ZlciBQQ0MuIFRoZSBjaGFsbGVuZ2UgaXMsIGhvdyBkbyB3ZSB0cmlnZ2VyIGBtY3RwX3BjY19kcml2ZXJfYWRkYD8gSXQgbG9va3MgbGlrZSBpdCB3b3VsZCBiZSB0b3VnaCB3aXRob3V0IGNyYWZ0aW5nIGN1c3RvbSBBQ1BJIHRhYmxlcy5cblxuQnV0IHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IG1vZGlmaWNhdGlvbnMgdGhleSd2ZSBtYWRlIHRvIGBwY2MuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgcHJvYmFibHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg3OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDozMS43Mjc1Mjg2NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MTUxNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9pcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tYWlsYm94L3BjYy5jPTI4OT1zdGF0aWMgdm9pZCBwY2NfY2hhbl9hY2tub3dsZWRnZShzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4pXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzA5LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozMTA6ICogcGNjX21ib3hfaXJxIC0gUENDIG1haWxib3ggaW50ZXJydXB0IGhhbmRsZXJcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzExLSAqIEBpcnE6XFx0aW50ZXJydXB0IG51bWJlclxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNS0gKi9cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzE2OnN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzE3LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz00OTM9c3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTUxMy1cXHRcXHRcXHRcXHRcXHRcXHRJUlFGX1NIQVJFRCA6IDA7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjUxNDpcXHRcXHRyYyA9IGRldm1fcmVxdWVzdF9pcnEoY2hhbi1cXHUwMDNlbWJveC1cXHUwMDNlZGV2LCBwY2hhbi1cXHUwMDNlcGxhdF9pcnEsIHBjY19tYm94X2lycSxcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNTE1LVxcdFxcdFxcdFxcdCAgICAgIGlycWZsYWdzLCBNQk9YX0lSUV9OQU1FLCBjaGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6MDA6MzQuMjg5MDUyMTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1MDM2MDUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBDQyBNYWlsYm94IEludGVycnVwdCBIYW5kbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBjYy5jYCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IHdhcnJhbnQgbXkgYXR0ZW50aW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBgcGNjX21ib3hfaXJxYC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiB0aGUgYGNoYW5faW5fdXNlYCBmbGFnIGFuZCB0aGUgaW50ZXJydXB0IGNvbnRleHQuXG5cblRoZSBtb3N0IG5vdGFibGUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIHdpdGhpbiBgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyYC4gTm93LCBpZiB0aGUgY2hhbm5lbCB0eXBlIGlzIGBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFYCwgdGhlIGVycm9yIGNoZWNrIGlzIHNraXBwZWQgYWx0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXaHkgYXJlIHNsYXZlIHN1YnNwYWNlcyB0cmVhdGVkIGRpZmZlcmVudGx5IGluIHRoaXMgcmVzcGVjdD8gSXMgdGhpcyBhIGtub3duIGhhcmR3YXJlIHF1aXJrLCBhIHNwZWNpZmljIG9wdGltaXphdGlvbiwgb3IgYSBwb3RlbnRpYWwgc291cmNlIG9mIGZ1dHVyZSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5PyBQZXJoYXBzIHRoaXMgcmVsYXRlcyB0byB0aGUgZXh0ZW5kZWQgUENDIGZ1bmN0aW9uYWxpdHkuXG5cblRoZW4sIGRvd24gaW4gYHBjY19tYm94X2lycWAsIEkgc2VlIHRoYXQgdGhlIHJldHVybiBjb2RlIGZyb20gYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgaXMgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGBtYm94X2NoYW5fdHhkb25lYCByZXR1cm4gdmFsdWUuIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgY2FuIHJldHVybiBhbmQgaG93IHRoYXQgdmFsdWUgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgZmxvdy4gQW5kIHRoZSBmbGFnIGBjaGFuX2luX3VzZWAgaXMgdXNpbmcgdGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgbWFjcm9zLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBlbmZvcmNlcyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHRvIHByZXZlbnQgcmFjZXMuXG5cblRoZSBsb2dpYyBmbG93IG5vdyBpczogY2hlY2sgaWYgYW4gaW50ZXJydXB0IGlzIGZvciB0aGUgUENDIGNoYW5uZWwsIGNoZWNrIGlmIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIHRoZW4gY2hlY2sgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4gT25seSBhZnRlciB0aGVzZSBjaGVja3MsIGlzIHRoZSBlcnJvciBjaGVjayBkb25lLiBOb3csIEkgc2VlIHRoZSBlcnJvciBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBzbGF2ZSBzdWJzcGFjZXMuIEZpbmFsbHksIGlmIGFsbCB0aGVzZSBjaGVja3MgYXJlIHN1Y2Nlc3NmdWwsIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgaXMgY2xlYXJlZCB1c2luZyBgV1JJVEVfT05DRWAuIEFuZCBmaW5hbGx5LCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGluIHRoZSBoYXJkd2FyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgcGNjX21ib3hfaXJxYCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsaW5nIGNvbnRleHQuIElzIGl0IGNhbGxlZCBvZnRlbiwgYW5kIHdoYXQgYXJlIHRoZSBjcml0aWNhbCBwYXRocz8gVGhlbiwgSSB3aWxsIHByb2JlIGBwY2NfbWJveF9wcm9iZWAgdG8gc2VlIGhvdyBQQ0MgaXMgaW5pdGlhbGl6ZWQgYW5kIGlmIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSwgb3IgaWYgaXQgaGFuZGxlcyBhIHNlbGRvbSB1c2VkIHN1YnN5c3RlbS4gS25vd2luZyB0aGF0IFBDQyBpcyBhbiBBQ1BJIGZlYXR1cmUsIEknbGwgYWxzbyBjb25zaWRlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIHN5c3RlbSBtaWdodCBub3QgZXZlbiBoYXZlIFBDQyB0YWJsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgcHJvcGVybHkgZ3VhcmRlZCBhbmQgZG9lc24ndCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhvc2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzExLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjQzLjkzOTQxNTI3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU5MDI4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWFpbGJveC9wY2MuYz03NTg9c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03OTYtLyoqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjc5NzogKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTc5OC0gKlxcdFBDQ1QgcGxhdGZvcm0gZGV2aWNlLiBUaGlzIGlzIHB1cmVseSB1c2VkIHRvIHJlcHJlc2VudFxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTgwNi0gKi9cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6ODA3OnN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA4LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MDU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX21ib3hfZHJpdmVyID0ge1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MDY6XFx0LnByb2JlID0gcGNjX21ib3hfcHJvYmUsXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkwNy1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTkxMj1zdGF0aWMgaW50IF9faW5pdCBwY2NfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkyOC1cXHRwY2NfcGRldiA9IHBsYXRmb3JtX2NyZWF0ZV9idW5kbGUoXFx1MDAyNnBjY19tYm94X2RyaXZlcixcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6OTI5OlxcdFxcdFxcdHBjY19tYm94X3Byb2JlLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTMwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo0Ni43OTg0NDgzMDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0MDEyOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgUENDIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGBwY2NfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGNhbGxpbmcgYHBsYXRmb3JtX2NyZWF0ZV9idW5kbGVgIHdpdGggYSBmZXcga2V5IHBpZWNlczogdGhlIFBDQyBtYWlsYm94IGRyaXZlciAoYHBjY19tYm94X2RyaXZlcmApLCBhIHByb2JlIGZ1bmN0aW9uIChgcGNjX21ib3hfcHJvYmVgKSwgYW5kIHNvbWUgbnVsbCBhcmd1bWVudHMuIFRoaXMgaXMgc3RhbmRhcmQgZmFyZSBmb3IgYSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXA7IGl0IGxvb2tzIGxpa2Ugd2UncmUgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgcHJvYmluZyBtZWNoYW5pc20uXG5cbkJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoaXMgYHBjY19pbml0YCBpcyBjYWxsZWQgd2l0aCBgc3Vic3lzX2luaXRjYWxsKHBjY19pbml0KTtgLiBUaGF0IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUga2VybmVsJ3Mgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZsb3csIHdoaWNoIGdlbmVyYWxseSBwb2ludHMgdG8gZWFybHkgZGV2aWNlIG9yIG1vZHVsZSBzZXR1cCwgYW5kIG1lYW5zIHRoYXQgYHBjY19pbml0YCBpc24ndCBjYWxsZWQgZGlyZWN0bHkuIEl0J3MgZGVmZXJyZWQgdW50aWwgYSBsYXRlciBzdGFnZSBvZiB0aGUgYm9vdC5cblxuSGFuZyBvbi4uLiBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGJlY2F1c2UgYHBjY19pbml0YCBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgYWNwaV9wY2NfcHJvYmUoKWAuIFRoYXQgaW1tZWRpYXRlbHkgY2hhbmdlcyB0aGUgZ2FtZS4gVGhpcyB3aG9sZSBzZXF1ZW5jZSBpcyBnb2luZyB0byBiZSBBQ1BJLWRlcGVuZGVudC4gVGhpcyBtZWFucyBpdCBpcyBsaWtlbHkgcHJvYmluZyB0aGUgQUNQSSBuYW1lc3BhY2UgZm9yIHRoZSBQQ0MgZGV2aWNlIGFuZCBkZWNpZGluZyB3aGV0aGVyIHRvIGluaXRpYWxpemUgdGhlIFBDQyBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHdoZXRoZXIgdGhhdCBkZXZpY2UgaXMgZm91bmQgaW4gdGhlIEFDUEkgdGFibGVzLiBUaGlzIGV4cGxhaW5zIHdoeSBgcGxhdGZvcm1fY3JlYXRlX2J1bmRsZWAgaXMgc2V0IHVwIGhlcmUsIGFuZCB0aGUgY2FsbCB0byBgcGNjX21ib3hfcHJvYmVgIGlzIGRlZmVycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjUxLjM0MjQ2NDA1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MjkwOTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3BpX3BjY19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21haWxib3gvcGNjLmM9NzI5PXN0YXRpYyB2b2lkIHBjY19wYXJzZV9zdWJzcGFjZV9zaG1lbShzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4sXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzUzLS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTQ6ICogYWNwaV9wY2NfcHJvYmUgLSBQYXJzZSB0aGUgQUNQSSB0cmVlIGZvciB0aGUgUENDVC5cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU1LSAqXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU3LSAqL1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTg6c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU5LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy05MjAtXFx0LyogQ2hlY2sgaWYgUENDIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAqL1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MjE6XFx0cmV0ID0gYWNwaV9wY2NfcHJvYmUoKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo1My45MDUzODI3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTg3NDEzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBhY3BpX3BjY19wcm9iZWAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgZG93biB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgYGFjcGlfcGNjX3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLCBob3cgaXQncyBoYW5kbGluZyB0aGUgZGV0ZWN0aW9uIG9mIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCkgZGV2aWNlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBwcm9iaW5nIHByb2Nlc3MuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHBpdGZhbGxzIHdpdGggQUNQSSBkZXZpY2UgZW51bWVyYXRpb24sIHRoZSB2YXJpb3VzIHF1aXJrcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGRldmljZSBjb25mbGljdHMuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzPyBXaGF0IEFDUEkgbWV0aG9kcyBpcyBpdCBldmFsdWF0aW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgY29tbW9uIHNvdXJjZXMgb2YgYnVncywgbGlrZSBpbmNvcnJlY3QgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXM/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbXV0ZXggY29udGVudGlvbiwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2Nrcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgdGhlaXIgQUNQSSBpbXBsZW1lbnRhdGlvbnMsIHNpbmNlIHRoYXQgY2FuIHZhcnkgd2lsZGx5LiBUaGlzIHByb2JlIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUgbGluY2hwaW4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGludGltYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6MDA6NTkuNDkyNzk5NDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWFpbGJveC9wY2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTg6XFx0c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG4gNzU5OlxcdHtcXG4gNzYwOlxcdFxcdGludCBjb3VudCwgaSwgcmMgPSAwO1xcbiA3NjE6XFx0XFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbiA3NjI6XFx0XFx0c3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpwY2N0X3RibDtcXG4gNzYzOlxcdFxcdHN0cnVjdCBhY3BpX3N1YnRhYmxlX3Byb2MgcHJvY1tBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRF07XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1BDQ1QsIDAsIFxcdTAwMjZwY2N0X3RibCk7XFxuIDc2NjpcXHRcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgIXBjY3RfdGJsKVxcbiA3Njc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdC8qIFNldCB1cCB0aGUgc3VidGFibGUgaGFuZGxlcnMgKi9cXG4gNzcwOlxcdFxcdGZvciAoaSA9IEFDUElfUENDVF9UWVBFX0dFTkVSSUNfU1VCU1BBQ0U7XFxuIDc3MTpcXHRcXHQgICAgIGkgXFx1MDAzYyBBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRDsgaSsrKSB7XFxuIDc3MjpcXHRcXHRcXHRwcm9jW2ldLmlkID0gaTtcXG4gNzczOlxcdFxcdFxcdHByb2NbaV0uY291bnQgPSAwO1xcbiA3NzQ6XFx0XFx0XFx0cHJvY1tpXS5oYW5kbGVyID0gcGFyc2VfcGNjX3N1YnNwYWNlO1xcbiA3NzU6XFx0XFx0fVxcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfZW50cmllc19hcnJheShBQ1BJX1NJR19QQ0NULFxcbiA3Nzg6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3BjY3QpLCBwcm9jLFxcbiA3Nzk6XFx0XFx0XFx0XFx0QUNQSV9QQ0NUX1RZUEVfUkVTRVJWRUQsIE1BWF9QQ0NfU1VCU1BBQ0VTKTtcXG4gNzgwOlxcdFxcdGlmIChjb3VudCBcXHUwMDNjPSAwIHx8IGNvdW50IFxcdTAwM2UgTUFYX1BDQ19TVUJTUEFDRVMpIHtcXG4gNzgxOlxcdFxcdFxcdGlmIChjb3VudCBcXHUwMDNjIDApXFxuIDc4MjpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJFcnJvciBwYXJzaW5nIFBDQyBzdWJzcGFjZXMgZnJvbSBQQ0NUXFxcXG5cXFwiKTtcXG4gNzgzOlxcdFxcdFxcdGVsc2VcXG4gNzg0OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIkludmFsaWQgUENDVDogJWQgUENDIHN1YnNwYWNlc1xcXFxuXFxcIiwgY291bnQpO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIDc4NzpcXHRcXHR9IGVsc2Uge1xcbiA3ODg6XFx0XFx0XFx0cGNjX2NoYW5fY291bnQgPSBjb3VudDtcXG4gNzg5OlxcdFxcdH1cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0YWNwaV9wdXRfdGFibGUocGNjdF90YmwpO1xcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHRyZXR1cm4gcmM7XFxuIDc5NDpcXHR9XFxuIDc5NTpcXHRcXG4gNzk2OlxcdC8qKlxcbiA3OTc6XFx0ICogcGNjX21ib3hfcHJvYmUgLSBDYWxsZWQgd2hlbiB3ZSBmaW5kIGEgbWF0Y2ggZm9yIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo1OS40OTI4OTI1MzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU0Mzk3NDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWNwaV9wY2NfcHJvYmVgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gYWJzb2x1dGVseSBuZWVkcyB0aGUgYFBDQ1RgIEFDUEkgdGFibGUgdG8gZXhpc3QuIElmIGl0J3Mgbm90IHRoZXJlLCBJIGdldCBhIGAtRU5PREVWYCBlcnJvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGluamVjdCBBQ1BJIHRhYmxlcywgYnV0LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBidWlsdC1pbiBtZWNoYW5pc20gZm9yIGR5bmFtaWNhbGx5IGluamVjdGluZyBhcmJpdHJhcnkgQUNQSSB0YWJsZXMgZHVyaW5nIGZ1enppbmcgZm9yLCB3ZWxsLCAqbW9zdCogZGV2aWNlcy4gQ29uZmlnZnMgb3Igc29tZXRoaW5nIHNpbWlsYXIgbWlnaHQgb2ZmZXIgYSB3b3JrYXJvdW5kIGJ1dCBzeXprYWxsZXIgZG9lc24ndCBzZWVtIHRvIG5hdGl2ZWx5IGRvIHRoaXMuIE5vLCBpdCByZWxpZXMgb24gUUVNVSwgd2hpY2ggaW4gdHVybiwgZG9lc24ndCBwcm92aWRlIHRoZSBgUENDVGAgdGFibGUgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5JIHdvbmRlcmVkIGlmIHRoZXJlIHdhcyBhbm90aGVyIGVudHJ5IHBvaW50IHRvIHRoaXMgY29kZSwgYW5kIHRoZSBgcGNjX21ib3hfcXVlcnlfY2hhbm5lbGAgZnVuY3Rpb24gKmlzKiBleHBvcnRlZCwgYnV0IGFnYWluLCB0aGlzIHNlZW1zIHRvIGJlIHBhcnQgb2YgdGhlIGBhY3BpX3BjY2Agc3Vic3lzdGVtLiBUaGUgYG1jdHBfcGNjX2RyaXZlcl9hZGRgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIEFDUEkgZGV2aWNlIHdpdGggSElEIGBETVQwMDAxYCBpcyBmb3VuZCwgYW5kIG9uY2UgYWdhaW4sIHRoaXMgKnJlcXVpcmVzKiBBQ1BJIHRhYmxlcy4gVGhlIGBtY3RwX3BjY19kcml2ZXJgIGlzIGFuIGBhY3BpX2RyaXZlcmAsIHRoZXJlJ3Mgbm8gd2F5IGFyb3VuZCBpdC4gQW5kIHRoZSBgcGNjLmNgIGNvZGUgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIFBDQ1QgdGFibGUuXG5cblNvLCBoZXJlJ3MgbXkgY3JpdGljYWwgcXVlc3Rpb246IEdpdmVuIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgQUNQSSB0YWJsZXMgKHNwZWNpZmljYWxseSwgdGhlIFBDQ1QgdGFibGUgYW5kIHRoZSBISUQgRE1UMDAwMSBkZXZpY2UpIGFuZCB0aGUgbGFjayBvZiBhIHN0cmFpZ2h0Zm9yd2FyZCBBQ1BJIHRhYmxlIGluamVjdGlvbiBtZXRob2QgaW4gc3l6a2FsbGVyLCBzaG91bGQgSSBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWA/XG5cblRoZSBwcm9tcHQgSSBhbSB3b3JraW5nIGZyb20gaXMgcHJldHR5IGNsZWFyIG9uIHRoaXM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIEJpbmdvLiBTaW5jZSB0aGVzZSBwYXJ0aWN1bGFyIEFDUEkgdGFibGVzIGFyZSAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgaW5qZWN0IHRoZW0gaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQgaXMsIGluZGVlZCwgaW1wb3NzaWJsZSB0byByZWFjaCB0aGlzIGNvZGUuXG5cbldhaXQuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgc3l6a2FsbGVyIGxldmVyYWdlIGBDT05GSUdfQUNQSV9DT05GSUdGU2A/IFRoYXQgd291bGQgYWxsb3cgdXNlcnNwYWNlIHRvIGxvYWQgQUNQSSB0YWJsZXMuIEJ1dCBubywgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGBDT05GSUdfQUNQSV9DT05GSUdGU2AgdG8gaW5qZWN0IGFyYml0cmFyeSB0YWJsZXMuIFdhaXQuLi4gaGFzIHN5emthbGxlciBjcmVhdGVkIGEgc3l6X2FjcGlfLi4uIHN5c3RlbSBjYWxsPyBOby5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyB3aXRoIHN5emthbGxlcidzIEFDUEkgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMTowOS4wMzY4Njk4NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzU3MTAzNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9hY3BpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMToxMS41MTI1OTAyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTA2MjYzMjk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgY29kZSBjaGFuZ2VzIHNlZW0gcmVsYXRlZCB0byBgY29uZmlnZnNgLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIFN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGdlbmVyYXRlIHZhbGlkIEFDUEkgdGFibGVzIHRvIHJlYWNoIGl0LiBUaGF0J3MgYSBub24tc3RhcnRlci4gQWxyaWdodCwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZS4gVGhlIGNvcmUgZnVuY3Rpb25zIEknbSBsb29raW5nIGF0IGFyZSBhbGwgdGllZCB0byB0aGUgUENDIGNoYW5uZWwsIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIFBDQ1QgQUNQSSB0YWJsZS4gUUVNVSwgYXMgSSBrbm93LCBkb2Vzbid0IHByb3ZpZGUgdGhpcyB0YWJsZSBieSBkZWZhdWx0LCBhbmQgU3l6a2FsbGVyIGNhbid0IGluamVjdCBpdC4gU28sIHRoYXQncyBhbHJlYWR5IGEgc2lnbmlmaWNhbnQgaHVyZGxlLlxuXG5JIGRvdWJsZS1jaGVja2VkIHRvIHNlZSBpZiBRRU1VIHByb3ZpZGVzIHRoZSBQQ0NUIHRhYmxlIGluIGFueSBzcGVjaWZpYyBlbXVsYXRpb24gc2NlbmFyaW8uIE5vcGUuIEl0J3Mgbm90IHN0YW5kYXJkLiBDb3VsZCBgbWN0cC1wY2NgIGJlIGZ1enplZCBpbiBzb21lIHJvdW5kYWJvdXQgd2F5PyBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBTeXprYWxsZXIgKmNvdWxkKiB0cnksIGJ1dCBpdCdzIGp1c3QgZ29pbmcgdG8gd2FzdGUgdGltZSBzaW5jZSBpdCB3b24ndCBhY3R1YWxseSBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgY29kZS5cblxuTm93IEkgcmVtZW1iZXIgdGhlIHByb21wdDogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIFRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBpcyBhbiBBQ1BJIGRyaXZlciBmb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSAoTUNUUCBvdmVyIFBDQyksIGFuZCBpdCByZWxpZXMgb24gQUNQSSB0YWJsZXMgdGhhdCBzaW1wbHkgYXJlbid0IHByZXNlbnQuIEl0IGlzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuSSBsb29rZWQgZm9yIGFsdGVybmF0aXZlcy4gSXMgdGhlcmUgYSBgbmV0ZGV2YCBlbnRyeSBwb2ludD8gVGhlcmUncyBgbWN0cF9wY2NfdHhgLCBidXQgdGhhdCBvbmx5IGhhcHBlbnMgaWYgYSBuZXRkZXYgaXMgY3JlYXRlZCwgYW5kIHRoZSBuZXRkZXYgaXMgb25seSBjcmVhdGVkIGluIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4gVGhhdCwgaW4gdHVybiwgaXMgYW4gQUNQSSBwcm9iZSBmdW5jdGlvbi4gU28gdGhhdCdzIGFsc28gZ29pbmcgdG8gZmFpbC4gVGhhdCBkcml2ZXIsIGFsb25nIHdpdGggb3RoZXIgZW50cnkgcG9pbnRzLCBpcyBuZXZlciBnb2luZyB0byBydW4gd2l0aG91dCB0aGUgUENDVCBhbmQgRE1UMDAwMS5cblxuVGltZSB0byByZXZpZXcgdGhlIHByb21wdCBhZ2FpbjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgUGVyZmVjdC4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cbkxldCBtZSBjb25maXJtIHRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgYHBjY19tYm94X3Byb2JlYCB1c2luZyBzb21lIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbi4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iZWQgdGhyb3VnaCBhIHBsYXRmb3JtIGRyaXZlciwgYnV0IGl0IGNoZWNrcyBmb3IgQUNQSSB0YWJsZXMgZmlyc3QgYmVmb3JlIGNyZWF0aW5nIHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFRoZSBBQ1BJIHRhYmxlIGlzIG5vdCBwcmVzZW50LiBBbmQgYG1jdHBfcGNjX2RyaXZlcmAsIGlzIGFuIEFDUEkgZHJpdmVyLCBzbyBpcyBwcm9iZWQgYnkgdGhlIEFDUEkgc3Vic3lzdGVtLiBTaW5jZSBRRU1VJ3MgQUNQSSB0YWJsZXMgZG8gbm90IGNvbnRhaW4gdGhlIGBETVQwMDAxYCBISUQsIGl0IHdvbid0IGJlIHByb2JlZCBlaXRoZXIuXG5cbkNvbmNsdXNpb246IHRoZSB3aG9sZSBwYXRjaCBpcyBkZWFkIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cbkknbSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBnaXZlbiB0aGUgY3VycmVudCBBQ1BJIHRhYmxlIGNvbmZpZ3VyYXRpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzIsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMToyNi41NzUyMjYwNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgTUNUUCBvdmVyIFBDQyBkcml2ZXIgYW5kIG1vZGlmaWVzIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIuIEJvdGggcmVxdWlyZSBzcGVjaWZpYyBBQ1BJIHRhYmxlcyAoUENDVCBhbmQgYSBkZXZpY2Ugd2l0aCBISUQgRE1UMDAwMSkgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZXNlIEFDUEkgdGFibGVzIGFyZSBub3QgcHJvdmlkZWQgYnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbmplY3RlZCBieSBzeXprYWxsZXIsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp6dxz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 13:36:14 +0000 UTC FinishedAt: 2026-07-22 14:01:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgTUNUUCBvdmVyIFBDQyBkcml2ZXIgYW5kIG1vZGlmaWVzIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIuIEJvdGggcmVxdWlyZSBzcGVjaWZpYyBBQ1BJIHRhYmxlcyAoUENDVCBhbmQgYSBkZXZpY2Ugd2l0aCBISUQgRE1UMDAwMSkgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZXNlIEFDUEkgdGFibGVzIGFyZSBub3QgcHJvdmlkZWQgYnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbmplY3RlZCBieSBzeXprYWxsZXIsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZmNzhiZDgyYjAxMGUyZmZlMDA4NTVkZDhjNWI1ZjUyMTYwY2UwODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNDowMDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA2OTQwYWEzZDQ5OGI5OS4uOWY0OGRlZTBmNGM2ZGMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNTU4Miw2ICYjNDM7MTU1ODIsMTEgQEAgRjpcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxuIEY6XHRpbmNsdWRlL25ldC9uZXRucy9tY3RwLmhcbiBGOlx0bmV0L21jdHAvXG4gXG4mIzQzO01BTkFHRU1FTlQgQ09NUE9ORU5UIFRSQU5TUE9SVCBQUk9UT0NPTCAoTUNUUCkgb3ZlciBQQ0MgKE1DVFAtUENDKSBEcml2ZXJcbiYjNDM7TTpcdEFkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuY1xuJiM0MztcbiBNQVBMRSBUUkVFXG4gTTpcdExpYW0gUi4gSG93bGV0dCBcdTAwM2NsaWFtQGluZnJhZGVhZC5vcmdcdTAwM2VcbiBSOlx0QWxpY2UgUnlobCBcdTAwM2NhbGljZXJ5aGxAZ29vZ2xlLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFpbGJveC9wY2MuYyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xuaW5kZXggNjM2ODc5YWUxZGI3NmIuLmRiZmU4ZGQ5MmRkZDI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tYWlsYm94L3BjYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21haWxib3gvcGNjLmNcbkBAIC0yNzAsNiAmIzQzOzI3MCw5IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbilcbiBcdHU2NCB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZChcdTAwMjZwY2hhbi1cdTAwM2VlcnJvciwgXHUwMDI2dmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzE0LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4ge1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHA7XG4mIzQzO1x0aW50IHJjO1xuIFxuIFx0cGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuIFxuQEAgLTMyMSwxNCAmIzQzOzMyNSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSlcbiYjNDM7XHQgICAgIVJFQURfT05DRShwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSkpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmICghcGNjX21ib3hfY21kX2NvbXBsZXRlX2NoZWNrKHBjaGFuKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuIFxuLVx0aWYgKHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihwY2hhbikpXG4tXHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7XHRyYyA9IHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihwY2hhbik7XG4gXG4gXHQvKlxuIFx0ICogQ2xlYXIgdGhpcyBmbGFnIGFmdGVyIHVwZGF0aW5nIGludGVycnVwdCBhY2sgcmVnaXN0ZXIgYW5kIGp1c3RcbkBAIC0zMzYsMTUgJiM0MzszMzksNjAgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xuIFx0ICogcmVxdWlyZWQgdG8gYXZvaWQgYW55IHBvc3NpYmxlIHJhY2UgaW4gdXBkYXRhdGlvbiBvZiB0aGlzIGZsYWcuXG4gXHQgKi9cbi1cdHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlID0gZmFsc2U7XG4tXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbi1cdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7XG4mIzQzO1x0V1JJVEVfT05DRShwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSwgZmFsc2UpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbiYjNDM7XHRtYm94X2NoYW5fdHhkb25lKGNoYW4sIHJjKTtcbiBcbiBcdHBjY19jaGFuX2Fja25vd2xlZGdlKHBjaGFuKTtcbiBcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbFxuJiM0MzsgKiAgICAgICAgICAgICAgd2l0aG91dCBhY3RpdmF0aW5nIHRoZSBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogICAgICAgICAgICAgIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgY2hhbm5lbCBkYXRhLlxuJiM0MzsgKiBAc3Vic3BhY2VfaWQ6IFRoZSBQQ0MgU3Vic3BhY2UgaW5kZXggYXMgcGFyc2VkIGluIHRoZSBQQ0MgY2xpZW50XG4mIzQzOyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0NcbiYjNDM7ICogICAgICBzdWJzcGFjZXMgYXMgcGFyc2VkIGJ5IHRoZSBQQ0MgTWFpbGJveCBjb250cm9sbGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7cGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuJiM0MztcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFfY2hhbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoc3Vic3BhY2VfaWQgXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXHUwMDNlPSBwY2NfY2hhbl9jb3VudClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdHBjaGFuID0gY2hhbl9pbmZvICYjNDM7IHN1YnNwYWNlX2lkO1xuJiM0MztcdGNoYW4gPSBwY2hhbi1cdTAwM2VjaGFuLm1jaGFuO1xuJiM0MztcdGlmIChJU19FUlIoY2hhbikpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtDaGFubmVsIG5vdCBmb3VuZCBmb3IgaWR4OiAlZFxcblwmIzM0Oywgc3Vic3BhY2VfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0cGNjX21jaGFuID0gXHUwMDI2cGNoYW4tXHUwMDNlY2hhbjtcbiYjNDM7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkciA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHI7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiYjNDM7XHRxX2NoYW4tXHUwMDNlc2htZW1fc2l6ZSA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplO1xuJiM0MztcdHFfY2hhbi1cdTAwM2VsYXRlbmN5ID0gcGNjX21jaGFuLVx1MDAzZWxhdGVuY3k7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZSA9IHBjY19tY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4mIzQzO1x0cV9jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWUgPSBwY2NfbWNoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRxX2NoYW4tXHUwMDNldHlwZSA9IHBjY19tY2hhbi1cdTAwM2V0eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTtcbiYjNDM7XG4gLyoqXG4gICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG4gICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbkBAIC0zNjAsNyAmIzQzOzQwOCw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbiB7XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbjtcbiBcdGludCByYztcbkBAIC0zNzUsMjAgJiM0Mzs0MjIsMTAgQEAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcbiBcdH1cbiBcbi1cdHBjY19tY2hhbiA9IFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4tXHRwY2NfbWNoYW4tXHUwMDNlc2htZW0gPSBhY3BpX29zX2lvcmVtYXAocGNjX21jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkcixcbi1cdFx0XHRcdFx0ICAgcGNjX21jaGFuLVx1MDAzZXNobWVtX3NpemUpO1xuLVx0aWYgKCFwY2NfbWNoYW4tXHUwMDNlc2htZW0pXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4tXG4gXHRyYyA9IG1ib3hfYmluZF9jbGllbnQoY2hhbiwgY2wpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGlvdW5tYXAocGNjX21jaGFuLVx1MDAzZXNobWVtKTtcbi1cdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbi1cdFx0cmV0dXJuIEVSUl9QVFIocmMpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHBjY19tY2hhbjtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuJiM0MztcdHJldHVybiAgXHUwMDI2cGNoYW4tXHUwMDNlY2hhbjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiBcbkBAIC00MDAsMTkgJiM0Mzs0MzcsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiAgKi9cbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXG4ge1xuLVx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuLVx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuIFxuJiM0MztcdGlmICghcGNoYW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuIFx0aWYgKCFjaGFuIHx8ICFjaGFuLVx1MDAzZWNsKVxuIFx0XHRyZXR1cm47XG4tXHRwY2hhbl9pbmZvID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbi1cdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbl9pbmZvLVx1MDAzZWNoYW47XG4tXHRpZiAocGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSkge1xuLVx0XHRpb3VubWFwKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pO1xuLVx0XHRwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbi1cdH1cbi1cbiBcdG1ib3hfZnJlZV9jaGFubmVsKGNoYW4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9mcmVlX2NoYW5uZWwpO1xuQEAgLTQ0MCw3ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBwY2Nfc2VuZF9kYXRhKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpXG4gXG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZF9tb2RpZnlfd3JpdGUoXHUwMDI2cGNoYW4tXHUwMDNlZGIpO1xuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBjaGFuLVx1MDAzZXBsYXRfaXJxIFx1MDAzZSAwKVxuLVx0XHRwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSA9IHRydWU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCB0cnVlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ2Miw5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBib29sIHBjY19sYXN0X3R4X2RvbmUoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4ge1xuIFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuO1xuIFx0dW5zaWduZWQgbG9uZyBpcnFmbGFncztcbiBcdGludCByYztcbiBcbiYjNDM7XHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdHBjY19tY2hhbi1cdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXHUwMDNlc2htZW1fYmFzZV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICAgcGNjX21jaGFuLVx1MDAzZXNobWVtX3NpemUpO1xuJiM0MztcdGlmIChwY2NfbWNoYW4tXHUwMDNlc2htZW0gID09IE5VTEwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdC8qXG4gXHQgKiBDbGVhciBhbmQgYWNrbm93bGVkZ2UgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBvbiByZXNwb25kZXIgY2hhbm5lbFxuIFx0ICogYmVmb3JlIGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHRcbkBAIC00NzksNiAmIzQzOzUxNiw4IEBAIHN0YXRpYyBpbnQgcGNjX3N0YXJ0dXAoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiBcdFx0aWYgKHVubGlrZWx5KHJjKSkge1xuIFx0XHRcdGRldl9lcnIoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRwY2hhbi1cdTAwM2VwbGF0X2lycSk7XG4mIzQzO1x0XHRcdGlvdW5tYXAocGNjX21jaGFuLVx1MDAzZXNobWVtKTtcbiYjNDM7XHRcdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbkBAIC00ODgsMTUgJiM0Mzs1MjcsMjMgQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIFxuIC8qKlxuICAqIHBjY19zaHV0ZG93biAtIENhbGxlZCBmcm9tIE1haWxib3ggQ29udHJvbGxlciBjb2RlLiBVc2VkIGhlcmVcbi0gKlx0XHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQuXG4mIzQzOyAqXHRcdHRvIGZyZWUgdGhlIGludGVycnVwdCBhbmQgdW5tYXAgdGhlIHNoYXJlZCBtZW1vcnkuXG4gICogQGNoYW46IFBvaW50ZXIgdG8gTWFpbGJveCBjaGFubmVsIHRvIHNodXRkb3duLlxuICAqL1xuIHN0YXRpYyB2b2lkIHBjY19zaHV0ZG93bihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIHtcbiBcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tXHUwMDNlY29uX3ByaXY7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XG4gXG4gXHRpZiAocGNoYW4tXHUwMDNlcGxhdF9pcnEgXHUwMDNlIDApXG4gXHRcdGRldm1fZnJlZV9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIGNoYW4pO1xuJiM0MztcdHN5bmNocm9uaXplX2lycShwY2hhbi1cdTAwM2VwbGF0X2lycSk7XG4mIzQzO1xuJiM0MztcdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdGlmIChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKSB7XG4mIzQzO1x0XHRpb3VubWFwKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pO1xuJiM0MztcdFx0cGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1ib3hfY2hhbl9vcHMgcGNjX2NoYW5fb3BzID0ge1xuQEAgLTgzMSw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBwY2NfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRwY2NfcGFyc2Vfc3Vic3BhY2Vfc2htZW0ocGNoYW4sIHBjY3RfZW50cnkpO1xuIFxuIFx0XHRwY2hhbi1cdTAwM2V0eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuJiM0MztcdFx0cGNoYW4tXHUwMDNlY2hhbi50eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuIFx0XHRwY2N0X2VudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKVxuIFx0XHRcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSAmIzQzOyBwY2N0X2VudHJ5LVx1MDAzZWxlbmd0aCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzliOGYzOGZmMGZiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuQEAgLTQ3LDYgJiM0Mzs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG4gXHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXNcbiBcdCAgaGF2aW5nIGEgXCYjMzQ7bWN0cC1jb250cm9sbGVyXCYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuXG4gXG4mIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9QQ0NcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFBDQyB0cmFuc3BvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElcbiYjNDM7XHRkZXBlbmRzIG9uIFBDQ1xuJiM0MztcdGRlcGVuZHMgb24gQ1BVX0xJVFRMRV9FTkRJQU5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgUENDIHRyYW5zcG9ydCxcbiYjNDM7XHQgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIHZpYSBBQ1BJIGZvciBlYWNoXG4mIzQzO1x0ICBlbnRyeSBpbiB0aGUgRFNEVC9TU0RUIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci4gVGhlIFBsYXRmb3JtXG4mIzQzO1x0ICBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZWxlY3RlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nXG4mIzQzO1x0ICBlbnRyaWVzIGluIHRoZSBQQ0NULlxuJiM0MztcbiYjNDM7XHQgIFNheSB5IGhlcmUgaWYgeW91IG5lZWQgdG8gY29ubmVjdCB0byBNQ1RQIGVuZHBvaW50cyBvdmVyIFBDQy4gVG9cbiYjNDM7XHQgIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHVzZSBtOyB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdHAtcGNjLlxuJiM0MztcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gVVNCXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICYjNDM7PSBtY3RwLXNlcmlhbC5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgJiM0Mzs9IG1jdHAtaTJjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mub1xuJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfUENDKSAmIzQzOz0gbWN0cC1wY2Mub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0IpICYjNDM7PSBtY3RwLXVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzRmM2IyMTUxMzcwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcbkBAIC0wLDAgJiM0MzsxLDQ2NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBtY3RwLXBjYy5jIC0gRHJpdmVyIGZvciBNQ1RQIG92ZXIgUENDLlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTENcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBJbXBsZW1lbnRhdGlvbiBvZlxuJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI5Mi5wZGZcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaHJ0aW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcGlfYnVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9hY3BpX2RyaXZlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcmVzdHlwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9hY3RibC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQ1RQX1NJR05BVFVSRSAgICAgICAgICBcJiMzNDtNQ1RQXCYjMzQ7XG4mIzQzOyNkZWZpbmUgTUNUUF9TSUdOQVRVUkVfTEVOR1RIICAgKHNpemVvZihNQ1RQX1NJR05BVFVSRSkgLSAxKVxuJiM0MzsjZGVmaW5lIE1DVFBfTUlOX01UVSAgICAgICAgICAgIDY4XG4mIzQzOyNkZWZpbmUgUENDX0hFQURFUl9TSVpFICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KVxuJiM0MzsjZGVmaW5lIE1DVFBfUENDX01JTl9TSVpFICAgICAgIChQQ0NfSEVBREVSX1NJWkUgJiM0MzsgTUNUUF9NSU5fTVRVKVxuJiM0MzsjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcbiYjNDM7c3RydWN0IG1jdHBfcGNjX21haWxib3gge1xuJiM0MztcdHUzMiBpbmRleDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbWJveF9jbGllbnQgY2xpZW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogVGhlIG5ldGRldiBzdHJ1Y3R1cmUuIE9uZSBvZiB0aGVzZSBwZXIgUENDIGFkYXB0ZXIuICovXG4mIzQzO3N0cnVjdCBtY3RwX3BjY19uZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2aWNlO1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94O1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IG91dGJveDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjayhzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgcGNjX2hlYWRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGludCBzaXplO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTtcbiYjNDM7XHRpbmJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3g7XG4mIzQzO1x0bWVtY3B5X2Zyb21pbyhcdTAwMjZwY2NfaGVhZGVyLCBpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtLCBzaXplb2YocGNjX2hlYWRlcikpO1xuJiM0MztcbiYjNDM7XHQvLyBUaGUgbWVzc2FnZSBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlIFBDQyBjb21tYW5kIGluZGljYXRpbmcgaXQgaXMgYW4gTUNUUFxuJiM0MztcdC8vIG1lc3NhZ2UgZm9sbG93ZWQgYnkgdGhlIE1DVFAgaGVhZGVyLCBvciB3ZSBoYXZlIGEgbWFsZm9ybWVkIG1lc3NhZ2UuXG4mIzQzO1x0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSlcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdC8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsXG4mIzQzO1x0Ly8gc29tZXRoaW5nIGlzIHdyb25nIGFuZCB0cmVhdCB0aGUgYnVmZmVyIGFzIGNvcnJ1cHRlZCBkYXRhLlxuJiM0MztcdGlmIChwY2NfaGVhZGVyLmxlbmd0aCBcdTAwM2UgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbV9zaXplIC0gUENDX0VYVFJBX0xFTilcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jbXAoXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICYjNDM7IFBDQ19FWFRSQV9MRU47XG4mIzQzO1x0c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNpemUpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0c2tiX3B1dChza2IsIHNpemUpO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuJiM0MztcdG1lbWNweV9mcm9taW8oc2tiLVx1MDAzZWRhdGEsIGluYm94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW0sIHNpemUpO1xuJiM0MztcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldiwgc2l6ZSk7XG4mIzQzO1x0c2tiX3B1bGwoc2tiLCBzaXplb2YocGNjX2hlYWRlcikpO1xuJiM0MztcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4mIzQzO1x0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcbiYjNDM7XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4mIzQzO1x0bmV0aWZfcngoc2tiKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztlcnJvcjpcbiYjNDM7XHRkZXZfZHN0YXRzX3J4X2Ryb3BwZWQobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfcGNjX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1wbmQgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cGNjX2hlYWRlciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSk7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VzaWduYXR1cmUgPSBQQ0NfU0lHTkFUVVJFIHwgbXBuZC1cdTAwM2VvdXRib3guaW5kZXg7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnBjY19oZWFkZXItXHUwMDNlY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCk7XG4mIzQzO1x0cGNjX2hlYWRlci1cdTAwM2VsZW5ndGggPSBsZW4gJiM0MzsgTUNUUF9TSUdOQVRVUkVfTEVOR1RIO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgbXBuZC1cdTAwM2VvdXRib3guY2hhbi1cdTAwM2VzaG1lbV9zaXplKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb25cbiYjNDM7XHQgKiBhbm90aGVyIHRocmVhZC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgYW5kIHdlIGRvbiYjMzk7dCByZXN0YXJ0XG4mIzQzO1x0ICogdGhlIHF1ZXVlLCBpdCB3aWxsIHJlbWFpbiBwZXJtYW5lbnRseSBzdG9wcGVkLlxuJiM0MztcdCAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlXG4mIzQzO1x0ICogYWxsb3dzIHVzIHRvIGFsd2F5cyByZXN0YXJ0IGl0IGlmIG1ib3hfc2VuZF9tZXNzYWdlIHN1Y2NlZWRzLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XG4mIzQzO1x0aWYgKG1ib3hfc2VuZF9tZXNzYWdlKG1wbmQtXHUwMDNlb3V0Ym94LmNoYW4tXHUwMDNlbWNoYW4sIHNrYikgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvLyBSZW1vdmUgdGhlIGhlYWRlciBpbiBjYXNlIGl0IGdldHMgc2VudCBhZ2FpblxuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbiYjNDM7XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9wcmVwYXJlKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zc2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgb3V0Ym94LmNsaWVudCk7XG4mIzQzO1x0b3V0Ym94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3g7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQQ0MgTWFpbGJveCB0eXBpY2FsbHkgZG9lcyBub3QgbWFrZSB1c2Ugb2YgdGhlIG1zc2cgcG9pbnRlclxuJiM0MztcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxuJiM0MztcdCAqIFRoaXMgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBub24tbnVsbDsgaXQgaXMgcG9zc2libGVcbiYjNDM7XHQgKiB0aGF0IGEgY2hhbmdlIGluIHRoZSBNYWlsYm94IGxldmVsIHdpbGwgYnJlYWsgdGhhdCBhc3N1bXB0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2Fybl9vbmNlKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7JXMgY2FsbGVkIHdpdGggbnVsbCBtZXNzYWdlLlxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRtZW1jcHlfdG9pbyhvdXRib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbSwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9kb25lKHN0cnVjdCBtYm94X2NsaWVudCAqYywgdm9pZCAqbXNzZywgaW50IHJjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHM7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IG1zc2c7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGVyZSBpcyBhIHBhY2tldCBpbiBmbGlnaHQgZHVyaW5nIGRyaXZlciBjbGVhbnVwXG4mIzQzO1x0ICogSXQgbWF5IGhhdmUgYmVlbiBmcmVlZCBhbHJlYWR5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbXNzZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBvdXRib3guY2xpZW50KTtcbiYjNDM7XG4mIzQzO1x0LyogVXNlIGFuIElSUSBzYWZlIHVwZGF0ZSBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIEhBUkQgSVJRIGluc3RlYWQgb2ZcbiYjNDM7XHQgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdCAqL1xuJiM0MztcdGRzdGF0cyA9IHRoaXNfY3B1X3B0cihtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0fVxuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuJiM0MztcdG5ldGlmX3dha2VfcXVldWUobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3BjY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94LCAqaW5ib3g7XG4mIzQzO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbiYjNDM7XG4mIzQzO1x0b3V0Ym94LVx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2b3V0Ym94LVx1MDAzZWNsaWVudCwgb3V0Ym94LVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoSVNfRVJSKG91dGJveC1cdTAwM2VjaGFuKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKG91dGJveC1cdTAwM2VjaGFuKTtcbiYjNDM7XHRpZiAob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluYm94LVx1MDAzZWNsaWVudC5yeF9jYWxsYmFjayA9IG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjaztcbiYjNDM7XHRpbmJveC1cdTAwM2VjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmluYm94LVx1MDAzZWNsaWVudCwgaW5ib3gtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChJU19FUlIoaW5ib3gtXHUwMDNlY2hhbikpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihpbmJveC1cdTAwM2VjaGFuKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGluYm94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbiYjNDM7XHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoaW5ib3gtXHUwMDNlY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF9wY2Nfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCwgaWR4O1xuJiM0MztcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmNoYW4pO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2hhbiA9IE5VTEw7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmNoYW4tXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKGNoYW4tXHUwMDNlYWN0aXZlX3JlcSAhPSAgTUJPWF9OT19NU0cpIHtcbiYjNDM7XHRcdFx0c2tiID0gY2hhbi1cdTAwM2VhY3RpdmVfcmVxO1xuJiM0MztcdFx0XHRjaGFuLVx1MDAzZWFjdGl2ZV9yZXEgPSBNQk9YX05PX01TRztcbiYjNDM7XHRcdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5kZXYpO1xuJiM0MztcdFx0XHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR3aGlsZSAoY2hhbi1cdTAwM2Vtc2dfY291bnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0Y291bnQgPSBjaGFuLVx1MDAzZW1zZ19jb3VudDtcbiYjNDM7XHRcdFx0aWR4ID0gY2hhbi1cdTAwM2Vtc2dfZnJlZTtcbiYjNDM7XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRcdGlkeCAtPSBjb3VudDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGlkeCAmIzQzOz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDtcbiYjNDM7XHRcdFx0c2tiID0gY2hhbi1cdTAwM2Vtc2dfZGF0YVtpZHhdO1xuJiM0MztcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XG4mIzQzO1x0XHRcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdFx0Y2hhbi1cdTAwM2Vtc2dfY291bnQtLTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4pO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4gPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGJlY2F1c2UgdGhlIHJpbmcgYnVmZmVyIHdhcyBmdWxsXG4mIzQzO1x0ICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzXG4mIzQzO1x0ICogYmVlbiBlbXB0aWVkIGFuZCB0aGUgcXVldWUgY2FuIGJlIHVzZWQgYWdhaW4gaWYgdGhlXG4mIzQzO1x0ICogbmV0ZGV2IGlzIHJlLW9wZW5lZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmRvX29wZW4gPSBtY3RwX3BjY19vcGVuLFxuJiM0MztcdC5uZG9fc3RvcCA9IG1jdHBfcGNjX3N0b3AsXG4mIzQzO1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuJiM0MztcdG5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTtcbiYjNDM7XHRuZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuJiM0MztcdG5kZXYtXHUwMDNlZmxhZ3MgPSBJRkZfTk9BUlA7XG4mIzQzO1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bWN0cF9wY2NfbmV0ZGV2X29wcztcbiYjNDM7XHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiYjNDM7XHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7XG4mIzQzO1x0aW50IGluZGV4O1xuJiM0MztcdHUzMiBpbmJveF9pbmRleDtcbiYjNDM7XHR1MzIgb3V0Ym94X2luZGV4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZvaWQgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbG9va3VwX2NvbnRleHQgKmx1YyA9IGNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJlcy1cdTAwM2V0eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMzIpXG4mIzQzO1x0XHRyZXR1cm4gQUVfT0s7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMiwgXHUwMDI2YXJlcy1cdTAwM2VkYXRhKTtcbiYjNDM7XHRzd2l0Y2ggKGx1Yy1cdTAwM2VpbmRleCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRcdGx1Yy1cdTAwM2VvdXRib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdGx1Yy1cdTAwM2VpbmJveF9pbmRleCA9IGFkZHJbMF0uYWRkcmVzcy5taW5pbXVtO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBRV9FUlJPUjtcbiYjNDM7XHR9XG4mIzQzO1x0bHVjLVx1MDAzZWluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gQUVfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfY2xlYW51cF9uZXRkZXYodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19jaGFubmVsX3R5cGVzKHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gY2hhbjtcbiYjNDM7XHRpbnQgYWN0dWFsX3R5cGU7XG4mIzQzO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFx1MDAyNmNoYW4sIG91dGJveC1cdTAwM2VpbmRleCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRhY3R1YWxfdHlwZSA9IGNoYW4udHlwZTtcbiYjNDM7XHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwmIzM0OywgYWN0dWFsX3R5cGUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3g7XG4mIzQzO1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0YWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7XG4mIzQzO1x0aWYgKGFjdHVhbF90eXBlICE9IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtNQ1RQLVBDQyBpbmJveCBjaGFubmVsIHdyb25nIHR5cGU6ICVkXCYjMzQ7LCBhY3R1YWxfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGluaXRpYWxpemVfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gaW5fY2hhbjtcbiYjNDM7XHRpbnQgbWN0cF9wY2NfbWF4X210dTtcbiYjNDM7XHRpbnQgaW5ib3hfbWF4X210dTtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuJiM0MztcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFx1MDAyNm91dF9jaGFuLCBvdXRib3gtXHUwMDNlaW5kZXgpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSAmIzQzOyBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuJiM0MztcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbiYjNDM7XHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcdTAwMjZpbl9jaGFuLCBpbmJveC1cdTAwM2VpbmRleCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoaW5fY2hhbi5zaG1lbV9zaXplIFx1MDAzYyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGluYm94X21heF9tdHUgPSBpbl9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5ib3hfbWF4X210dSBcdTAwM2MgbWN0cF9wY2NfbWF4X210dSlcbiYjNDM7XHRcdG1jdHBfcGNjX21heF9tdHUgPSBpbmJveF9tYXhfbXR1O1xuJiM0MztcbiYjNDM7XHRuZGV2LVx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcbiYjNDM7XHRuZGV2LVx1MDAzZW1heF9tdHUgPSBtY3RwX3BjY19tYXhfbXR1O1xuJiM0MztcdG5kZXYtXHUwMDNlbWluX210dSA9IE1DVFBfTUlOX01UVTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF9wY2NfZHJpdmVyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XG4mIzQzO1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2YWNwaV9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdGFjcGlfaGFuZGxlIGRldl9oYW5kbGU7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGNoYXIgbmFtZVszMl07XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKGRldiwgXCYjMzQ7QWRkaW5nIG1jdHBfcGNjIGRldmljZSBmb3IgSElEICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7XG4mIzQzO1x0ZGV2X2hhbmRsZSA9IGFjcGlfZGV2aWNlX2hhbmRsZShhY3BpX2Rldik7XG4mIzQzO1x0c3RhdHVzID0gYWNwaV93YWxrX3Jlc291cmNlcyhkZXZfaGFuZGxlLCBcJiMzNDtfQ1JTXCYjMzQ7LCBsb29rdXBfcGNjdF9pbmRpY2VzLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2Y29udGV4dCk7XG4mIzQzO1x0aWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZBSUxFRCB0byBsb29rdXAgUENDIGluZGV4ZXMgZnJvbSBDUlNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB3ZSBoYXZlIGV4YWN0bHkgMiBjaGFubmVsczogYW4gb3V0Ym94IGFuZCBhbiBpbmJveC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY29udGV4dC5pbmRleCAhPSAyKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7bWN0cHBjYyVkXCYjMzQ7LCBjb250ZXh0LmluYm94X2luZGV4KTtcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLFxuJiM0MztcdFx0XHQgICAgbWN0cF9wY2Nfc2V0dXApO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveC5pbmRleCA9IGNvbnRleHQuaW5ib3hfaW5kZXg7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveC5jbGllbnQuZGV2ID0gZGV2O1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LmRldiA9IGRldjtcbiYjNDM7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlO1xuJiM0MztcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNsaWVudC50eF9kb25lID0gbWN0cF9wY2NfdHhfZG9uZTtcbiYjNDM7XHRtY3RwX3BjY19uZGV2LVx1MDAzZWFjcGlfZGV2aWNlID0gYWNwaV9kZXY7XG4mIzQzO1x0bWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2ID0gbmRldjtcbiYjNDM7XHRhY3BpX2Rldi1cdTAwM2Vkcml2ZXJfZGF0YSA9IG1jdHBfcGNjX25kZXY7XG4mIzQzO1x0cmMgPSBjaGVja19jaGFubmVsX3R5cGVzKG1jdHBfcGNjX25kZXYpO1xuJiM0MztcdGlmIChyYyAhPSAwKVxuJiM0MztcdFx0Z290byBmcmVlX25ldGRldjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGZyZWVfbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5kZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1BDQyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBmcmVlX25ldGRldjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIG1jdHBfY2xlYW51cF9uZXRkZXYsIG5kZXYpO1xuJiM0MztmcmVlX25ldGRldjpcbiYjNDM7XHRmcmVlX25ldGRldihuZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgbWN0cF9wY2NfZGV2aWNlX2lkc1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7RE1UMDAwMVwmIzM0OyB9LFxuJiM0MztcdHt9XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIG1jdHBfcGNjX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O21jdHBfcGNjXCYjMzQ7LFxuJiM0MztcdC5jbGFzcyA9IFwmIzM0O1Vua25vd25cJiMzNDssXG4mIzQzO1x0LmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsXG4mIzQzO1x0Lm9wcyA9IHtcbiYjNDM7XHRcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfYWNwaV9kcml2ZXIobWN0cF9wY2NfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBQQ0MgQUNQSSBkZXZpY2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0FkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wY2MuaCBiL2luY2x1ZGUvYWNwaS9wY2MuaFxuaW5kZXggODQwYmZjOTViYWUzMzIuLmJmOTdmNDA3NjgzZGUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hY3BpL3BjYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcGNjLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqbWNoYW47XG5AQCAtMTcsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0dTMyIGxhdGVuY3k7XG4gXHR1MzIgbWF4X2FjY2Vzc19yYXRlO1xuIFx0dTE2IG1pbl90dXJuYXJvdW5kX3RpbWU7XG4mIzQzO1x0ZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlO1xuIH07XG4gXG4gLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovXG5AQCAtMzcsNiAmIzQzOzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIGV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7XG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcbiYjNDM7ZXh0ZXJuIGludFxuJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuQEAgLTQ0LDYgJiM0Mzs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9QQ0NfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmNzhiZDgyYjAxMGUyZmZlMDA4NTVkZDhjNWI1ZjUyMTYwY2UwODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNDowMDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNjk0MGFhM2Q0OThiOTkuLjlmNDhkZWUwZjRjNmRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTU1ODIsNiAmIzQzOzE1NTgyLDExIEBAIEY6CWluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaAogRjoJaW5jbHVkZS9uZXQvbmV0bnMvbWN0cC5oCiBGOgluZXQvbWN0cC8KIAomIzQzO01BTkFHRU1FTlQgQ09NUE9ORU5UIFRSQU5TUE9SVCBQUk9UT0NPTCAoTUNUUCkgb3ZlciBQQ0MgKE1DVFAtUENDKSBEcml2ZXIKJiM0MztNOglBZGFtIFlvdW5nICZsdDthZG1peW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbSZndDsKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jCiYjNDM7CiBNQVBMRSBUUkVFCiBNOglMaWFtIFIuIEhvd2xldHQgJmx0O2xpYW1AaW5mcmFkZWFkLm9yZyZndDsKIFI6CUFsaWNlIFJ5aGwgJmx0O2FsaWNlcnlobEBnb29nbGUuY29tJmd0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L3BjYy5jIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jCmluZGV4IDYzNjg3OWFlMWRiNzZiLi5kYmZlOGRkOTJkZGQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWlsYm94L3BjYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuYwpAQCAtMjcwLDYgJiM0MzsyNzAsOSBAQCBzdGF0aWMgaW50IHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcihzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4pCiAJdTY0IHZhbDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwY2hhbi0mZ3Q7dHlwZSA9PSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0ID0gcGNjX2NoYW5fcmVnX3JlYWQoJmFtcDtwY2hhbi0mZ3Q7ZXJyb3IsICZhbXA7dmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMzE0LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApCiB7CiAJc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuOwogCXN0cnVjdCBtYm94X2NoYW4gKmNoYW4gPSBwOwomIzQzOwlpbnQgcmM7CiAKIAlwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwogCkBAIC0zMjEsMTQgJiM0MzszMjUsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAocGNoYW4tJmd0O3R5cGUgPT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UgJmFtcDsmYW1wOwotCSAgICAhcGNoYW4tJmd0O2NoYW5faW5fdXNlKQomIzQzOwkgICAgIVJFQURfT05DRShwY2hhbi0mZ3Q7Y2hhbl9pbl91c2UpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoIXBjY19tYm94X2NtZF9jb21wbGV0ZV9jaGVjayhwY2hhbikpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pKQotCQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7CXJjID0gcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKTsKIAogCS8qCiAJICogQ2xlYXIgdGhpcyBmbGFnIGFmdGVyIHVwZGF0aW5nIGludGVycnVwdCBhY2sgcmVnaXN0ZXIgYW5kIGp1c3QKQEAgLTMzNiwxNSAmIzQzOzMzOSw2MCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApCiAJICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpcwogCSAqIHJlcXVpcmVkIHRvIGF2b2lkIGFueSBwb3NzaWJsZSByYWNlIGluIHVwZGF0YXRpb24gb2YgdGhpcyBmbGFnLgogCSAqLwotCXBjaGFuLSZndDtjaGFuX2luX3VzZSA9IGZhbHNlOwotCW1ib3hfY2hhbl9yZWNlaXZlZF9kYXRhKGNoYW4sIE5VTEwpOwotCW1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7CiYjNDM7CVdSSVRFX09OQ0UocGNoYW4tJmd0O2NoYW5faW5fdXNlLCBmYWxzZSk7CiYjNDM7CWlmICghcmMpCiYjNDM7CQltYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTsKJiM0MzsJbWJveF9jaGFuX3R4ZG9uZShjaGFuLCByYyk7CiAKIAlwY2NfY2hhbl9hY2tub3dsZWRnZShwY2hhbik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbAomIzQzOyAqICAgICAgICAgICAgICB3aXRob3V0IGFjdGl2YXRpbmcgdGhlIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW4KJiM0MzsgKiAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjaGFubmVsIGRhdGEuCiYjNDM7ICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudAomIzQzOyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0MKJiM0MzsgKiAgICAgIHN1YnNwYWNlcyBhcyBwYXJzZWQgYnkgdGhlIFBDQyBNYWlsYm94IGNvbnRyb2xsZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7aW50CiYjNDM7cGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwomIzQzOwlzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47CiYjNDM7CXN0cnVjdCBtYm94X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghcV9jaGFuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChzdWJzcGFjZV9pZCAmbHQ7IDAgfHwgc3Vic3BhY2VfaWQgJmd0Oz0gcGNjX2NoYW5fY291bnQpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJcGNoYW4gPSBjaGFuX2luZm8gJiM0Mzsgc3Vic3BhY2VfaWQ7CiYjNDM7CWNoYW4gPSBwY2hhbi0mZ3Q7Y2hhbi5tY2hhbjsKJiM0MzsJaWYgKElTX0VSUihjaGFuKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7Q2hhbm5lbCBub3QgZm91bmQgZm9yIGlkeDogJWRcbiYjMzQ7LCBzdWJzcGFjZV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47CiYjNDM7CiYjNDM7CXFfY2hhbi0mZ3Q7c2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLSZndDtzaG1lbV9iYXNlX2FkZHI7CiYjNDM7CXFfY2hhbi0mZ3Q7c2htZW0gPSBOVUxMOwomIzQzOwlxX2NoYW4tJmd0O3NobWVtX3NpemUgPSBwY2NfbWNoYW4tJmd0O3NobWVtX3NpemU7CiYjNDM7CXFfY2hhbi0mZ3Q7bGF0ZW5jeSA9IHBjY19tY2hhbi0mZ3Q7bGF0ZW5jeTsKJiM0MzsJcV9jaGFuLSZndDttYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tJmd0O21heF9hY2Nlc3NfcmF0ZTsKJiM0MzsJcV9jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lID0gcGNjX21jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lOwomIzQzOwlxX2NoYW4tJmd0O3R5cGUgPSBwY2NfbWNoYW4tJmd0O3R5cGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTsKJiM0MzsKIC8qKgogICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvCiAgKgkJcmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXkKQEAgLTM2MCw3ICYjNDM7NDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKQogc3RydWN0IHBjY19tYm94X2NoYW4gKgogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCkKIHsKLQlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjsKIAlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuOwogCWludCByYzsKQEAgLTM3NSwyMCAmIzQzOzQyMiwxMCBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKQogCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwogCX0KIAotCXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47Ci0JcGNjX21jaGFuLSZndDtzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tJmd0O3NobWVtX2Jhc2VfYWRkciwKLQkJCQkJICAgcGNjX21jaGFuLSZndDtzaG1lbV9zaXplKTsKLQlpZiAoIXBjY19tY2hhbi0mZ3Q7c2htZW0pCi0JCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7Ci0KIAlyYyA9IG1ib3hfYmluZF9jbGllbnQoY2hhbiwgY2wpOwotCWlmIChyYykgewotCQlpb3VubWFwKHBjY19tY2hhbi0mZ3Q7c2htZW0pOwotCQlwY2NfbWNoYW4tJmd0O3NobWVtID0gTlVMTDsKLQkJcmV0dXJuIEVSUl9QVFIocmMpOwotCX0KLQotCXJldHVybiBwY2NfbWNoYW47CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiYjNDM7CXJldHVybiAgJmFtcDtwY2hhbi0mZ3Q7Y2hhbjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7CiAKQEAgLTQwMCwxOSAmIzQzOzQzNywxMyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpOwogICovCiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pCiB7Ci0Jc3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLSZndDttY2hhbjsKLQlzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW5faW5mbzsKLQlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjsKJiM0MzsJc3RydWN0IG1ib3hfY2hhbiAqY2hhbjsKIAomIzQzOwlpZiAoIXBjaGFuKQomIzQzOwkJcmV0dXJuOwomIzQzOwljaGFuID0gcGNoYW4tJmd0O21jaGFuOwogCWlmICghY2hhbiB8fCAhY2hhbi0mZ3Q7Y2wpCiAJCXJldHVybjsKLQlwY2hhbl9pbmZvID0gY2hhbi0mZ3Q7Y29uX3ByaXY7Ci0JcGNjX21ib3hfY2hhbiA9ICZhbXA7cGNoYW5faW5mby0mZ3Q7Y2hhbjsKLQlpZiAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pIHsKLQkJaW91bm1hcChwY2NfbWJveF9jaGFuLSZndDtzaG1lbSk7Ci0JCXBjY19tYm94X2NoYW4tJmd0O3NobWVtID0gTlVMTDsKLQl9Ci0KIAltYm94X2ZyZWVfY2hhbm5lbChjaGFuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X2ZyZWVfY2hhbm5lbCk7CkBAIC00NDAsNyAmIzQzOzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQogCiAJcmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKCZhbXA7cGNoYW4tJmd0O2RiKTsKIAlpZiAoIXJldCAmYW1wOyZhbXA7IHBjaGFuLSZndDtwbGF0X2lycSAmZ3Q7IDApCi0JCXBjaGFuLSZndDtjaGFuX2luX3VzZSA9IHRydWU7CiYjNDM7CQlXUklURV9PTkNFKHBjaGFuLSZndDtjaGFuX2luX3VzZSwgdHJ1ZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDYyLDkgJiM0Mzs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogewogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21jaGFuOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJjOwogCiYjNDM7CXBjY19tY2hhbiA9ICZhbXA7cGNoYW4tJmd0O2NoYW47CiYjNDM7CXBjY19tY2hhbi0mZ3Q7c2htZW0gPSBhY3BpX29zX2lvcmVtYXAocGNjX21jaGFuLSZndDtzaG1lbV9iYXNlX2FkZHIsCiYjNDM7CQkJCQkgICBwY2NfbWNoYW4tJmd0O3NobWVtX3NpemUpOwomIzQzOwlpZiAocGNjX21jaGFuLSZndDtzaG1lbSAgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCS8qCiAJICogQ2xlYXIgYW5kIGFja25vd2xlZGdlIGFueSBwZW5kaW5nIGludGVycnVwdHMgb24gcmVzcG9uZGVyIGNoYW5uZWwKIAkgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdApAQCAtNDc5LDYgJiM0Mzs1MTYsOCBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pCiAJCWlmICh1bmxpa2VseShyYykpIHsKIAkJCWRldl9lcnIoY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBQQ0MgaW50ZXJydXB0ICVkXG4mIzM0OywKIAkJCQlwY2hhbi0mZ3Q7cGxhdF9pcnEpOwomIzQzOwkJCWlvdW5tYXAocGNjX21jaGFuLSZndDtzaG1lbSk7CiYjNDM7CQkJcGNjX21jaGFuLSZndDtzaG1lbSA9IE5VTEw7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CkBAIC00ODgsMTUgJiM0Mzs1MjcsMjMgQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogCiAvKioKICAqIHBjY19zaHV0ZG93biAtIENhbGxlZCBmcm9tIE1haWxib3ggQ29udHJvbGxlciBjb2RlLiBVc2VkIGhlcmUKLSAqCQl0byBmcmVlIHRoZSBpbnRlcnJ1cHQuCiYjNDM7ICoJCXRvIGZyZWUgdGhlIGludGVycnVwdCBhbmQgdW5tYXAgdGhlIHNoYXJlZCBtZW1vcnkuCiAgKiBAY2hhbjogUG9pbnRlciB0byBNYWlsYm94IGNoYW5uZWwgdG8gc2h1dGRvd24uCiAgKi8KIHN0YXRpYyB2b2lkIHBjY19zaHV0ZG93bihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQogewogCXN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbiA9IGNoYW4tJmd0O2Nvbl9wcml2OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjsKIAogCWlmIChwY2hhbi0mZ3Q7cGxhdF9pcnEgJmd0OyAwKQogCQlkZXZtX2ZyZWVfaXJxKGNoYW4tJmd0O21ib3gtJmd0O2RldiwgcGNoYW4tJmd0O3BsYXRfaXJxLCBjaGFuKTsKJiM0MzsJc3luY2hyb25pemVfaXJxKHBjaGFuLSZndDtwbGF0X2lycSk7CiYjNDM7CiYjNDM7CXBjY19tYm94X2NoYW4gPSAmYW1wO3BjaGFuLSZndDtjaGFuOwomIzQzOwlpZiAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pIHsKJiM0MzsJCWlvdW5tYXAocGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0pOwomIzQzOwkJcGNjX21ib3hfY2hhbi0mZ3Q7c2htZW0gPSBOVUxMOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWJveF9jaGFuX29wcyBwY2NfY2hhbl9vcHMgPSB7CkBAIC04MzEsNiAmIzQzOzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJcGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTsKIAogCQlwY2hhbi0mZ3Q7dHlwZSA9IHBjY3RfZW50cnktJmd0O3R5cGU7CiYjNDM7CQlwY2hhbi0mZ3Q7Y2hhbi50eXBlID0gcGNjdF9lbnRyeS0mZ3Q7dHlwZTsKIAkJcGNjdF9lbnRyeSA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKikKIAkJCSgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSAmIzQzOyBwY2N0X2VudHJ5LSZndDtsZW5ndGgpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwppbmRleCBjZjMyNWFiMGIxZWY1NS4uYzliOGYzOGZmMGZiOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcKQEAgLTQ3LDYgJiM0Mzs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDCiAJICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzCiAJICBoYXZpbmcgYSAmIzM0O21jdHAtY29udHJvbGxlciYjMzQ7IGRldmljZXRyZWUgcHJvcGVydHkuCiAKJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDCiYjNDM7CXRyaXN0YXRlICYjMzQ7TUNUUCBQQ0MgdHJhbnNwb3J0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJCiYjNDM7CWRlcGVuZHMgb24gUENDCiYjNDM7CWRlcGVuZHMgb24gQ1BVX0xJVFRMRV9FTkRJQU4KJiM0MzsJaGVscAomIzQzOwkgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBQQ0MgdHJhbnNwb3J0LAomIzQzOwkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIHZpYSBBQ1BJIGZvciBlYWNoCiYjNDM7CSAgZW50cnkgaW4gdGhlIERTRFQvU1NEVCB0aGF0IG1hdGNoZXMgdGhlIGlkZW50aWZpZXIuIFRoZSBQbGF0Zm9ybQomIzQzOwkgIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKJiM0MzsJICBlbnRyaWVzIGluIHRoZSBQQ0NULgomIzQzOwomIzQzOwkgIFNheSB5IGhlcmUgaWYgeW91IG5lZWQgdG8gY29ubmVjdCB0byBNQ1RQIGVuZHBvaW50cyBvdmVyIFBDQy4gVG8KJiM0MzsJICBjb21waWxlIGFzIGEgbW9kdWxlLCB1c2UgbTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RwLXBjYy4KJiM0MzsKIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0IKIAl0cmlzdGF0ZSAmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCYjMzQ7CiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlCmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDUgQEAKIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2MubwomIzQzO29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICYjNDM7PSBtY3RwLXBjYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSAmIzQzOz0gbWN0cC11c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2M0ZjNiMjE1MTM3MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYwpAQCAtMCwwICYjNDM7MSw0NjYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogbWN0cC1wY2MuYyAtIERyaXZlciBmb3IgTUNUUCBvdmVyIFBDQy4KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTEMKJiM0MzsgKgomIzQzOyAqLwomIzQzOwomIzQzOy8qIEltcGxlbWVudGF0aW9uIG9mCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyOTIucGRmCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHJ0aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthY3BpL2FjcGlfYnVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvYWNwaV9kcml2ZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvYWNyZXN0eXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9hY3RibC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3BjYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbWN0cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbWN0cGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGt0X3NjaGVkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBNQ1RQX1NJR05BVFVSRSAgICAgICAgICAmIzM0O01DVFAmIzM0OwomIzQzOyNkZWZpbmUgTUNUUF9TSUdOQVRVUkVfTEVOR1RIICAgKHNpemVvZihNQ1RQX1NJR05BVFVSRSkgLSAxKQomIzQzOyNkZWZpbmUgTUNUUF9NSU5fTVRVICAgICAgICAgICAgNjgKJiM0MzsjZGVmaW5lIFBDQ19IRUFERVJfU0laRSAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkKJiM0MzsjZGVmaW5lIE1DVFBfUENDX01JTl9TSVpFICAgICAgIChQQ0NfSEVBREVSX1NJWkUgJiM0MzsgTUNUUF9NSU5fTVRVKQomIzQzOyNkZWZpbmUgUENDX0VYVFJBX0xFTiAgICAgICAgICAgKFBDQ19IRUFERVJfU0laRSAtIHNpemVvZihwY2NfaGVhZGVyLmNvbW1hbmQpKQomIzQzO3N0cnVjdCBtY3RwX3BjY19tYWlsYm94IHsKJiM0MzsJdTMyIGluZGV4OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IG1ib3hfY2xpZW50IGNsaWVudDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFRoZSBuZXRkZXYgc3RydWN0dXJlLiBPbmUgb2YgdGhlc2UgcGVyIFBDQyBhZGFwdGVyLiAqLwomIzQzO3N0cnVjdCBtY3RwX3BjY19uZGV2IHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBvdXRib3g7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2soc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5IHBjY19oZWFkZXI7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7CiYjNDM7CXN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCBzaXplOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTsKJiM0MzsJaW5ib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O2luYm94OwomIzQzOwltZW1jcHlfZnJvbWlvKCZhbXA7cGNjX2hlYWRlciwgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtLCBzaXplb2YocGNjX2hlYWRlcikpOwomIzQzOwomIzQzOwkvLyBUaGUgbWVzc2FnZSBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlIFBDQyBjb21tYW5kIGluZGljYXRpbmcgaXQgaXMgYW4gTUNUUAomIzQzOwkvLyBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSBNQ1RQIGhlYWRlciwgb3Igd2UgaGF2ZSBhIG1hbGZvcm1lZCBtZXNzYWdlLgomIzQzOwlpZiAocGNjX2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSkKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CS8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsCiYjNDM7CS8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS4KJiM0MzsJaWYgKHBjY19oZWFkZXIubGVuZ3RoICZndDsgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtX3NpemUgLSBQQ0NfRVhUUkFfTEVOKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKG1lbWNtcCgmYW1wO3BjY19oZWFkZXIuY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCkgIT0gMCkKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CXNpemUgPSBwY2NfaGVhZGVyLmxlbmd0aCAmIzQzOyBQQ0NfRVhUUkFfTEVOOwomIzQzOwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG1jdHBfcGNjX25kZXYtJmd0O25kZXYsIHNpemUpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CXNrYl9wdXQoc2tiLCBzaXplKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApOwomIzQzOwltZW1jcHlfZnJvbWlvKHNrYi0mZ3Q7ZGF0YSwgaW5ib3gtJmd0O2NoYW4tJmd0O3NobWVtLCBzaXplKTsKJiM0MzsJZGV2X2RzdGF0c19yeF9hZGQobWN0cF9wY2NfbmRldi0mZ3Q7bmRldiwgc2l6ZSk7CiYjNDM7CXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHBjY19oZWFkZXIpKTsKJiM0MzsJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CWNiID0gX19tY3RwX2NiKHNrYik7CiYjNDM7CWNiLSZndDtoYWxlbiA9IDA7CiYjNDM7CW5ldGlmX3J4KHNrYik7CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MztlcnJvcjoKJiM0MzsJZGV2X2RzdGF0c19yeF9kcm9wcGVkKG1jdHBfcGNjX25kZXYtJmd0O25kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSAqcGNjX2hlYWRlcjsKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1wbmQgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IGxlbiA9IHNrYi0mZ3Q7bGVuOwomIzQzOwomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSkpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwlwY2NfaGVhZGVyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7c2lnbmF0dXJlID0gUENDX1NJR05BVFVSRSB8IG1wbmQtJmd0O291dGJveC5pbmRleDsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7ZmxhZ3MgPSBQQ0NfQ01EX0NPTVBMRVRJT05fTk9USUZZOwomIzQzOwltZW1jcHkoJmFtcDtwY2NfaGVhZGVyLSZndDtjb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKTsKJiM0MzsJcGNjX2hlYWRlci0mZ3Q7bGVuZ3RoID0gbGVuICYjNDM7IE1DVFBfU0lHTkFUVVJFX0xFTkdUSDsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZndDsgbXBuZC0mZ3Q7b3V0Ym94LmNoYW4tJmd0O3NobWVtX3NpemUpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb24KJiM0MzsJICogYW5vdGhlciB0aHJlYWQuIElmIHRoYXQgaXMgdGhlIGNhc2UsIGFuZCB3ZSBkb24mIzM5O3QgcmVzdGFydAomIzQzOwkgKiB0aGUgcXVldWUsIGl0IHdpbGwgcmVtYWluIHBlcm1hbmVudGx5IHN0b3BwZWQuCiYjNDM7CSAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlCiYjNDM7CSAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy4KJiM0MzsJICovCiYjNDM7CW5ldGlmX3N0b3BfcXVldWUobmRldik7CiYjNDM7CWlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLSZndDtvdXRib3guY2hhbi0mZ3Q7bWNoYW4sIHNrYikgJmd0Oz0gMCkgewomIzQzOwkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8vIFJlbW92ZSB0aGUgaGVhZGVyIGluIGNhc2UgaXQgZ2V0cyBzZW50IGFnYWluCiYjNDM7CQlza2JfcHVsbChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpOwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwl9CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CiYjNDM7ZXJyb3I6CiYjNDM7CWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfcGNjX3R4X3ByZXBhcmUoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZzsKJiM0MzsKJiM0MzsJbWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpOwomIzQzOwlvdXRib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O291dGJveDsKJiM0MzsKJiM0MzsJLyogVGhlIFBDQyBNYWlsYm94IHR5cGljYWxseSBkb2VzIG5vdCBtYWtlIHVzZSBvZiB0aGUgbXNzZyBwb2ludGVyCiYjNDM7CSAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LgomIzQzOwkgKiBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgbm9uLW51bGw7IGl0IGlzIHBvc3NpYmxlCiYjNDM7CSAqIHRoYXQgYSBjaGFuZ2UgaW4gdGhlIE1haWxib3ggbGV2ZWwgd2lsbCBicmVhayB0aGF0IGFzc3VtcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNrYikgewomIzQzOwkJbmV0ZGV2X3dhcm5fb25jZShtY3RwX3BjY19uZGV2LSZndDtuZGV2LAomIzQzOwkJCQkgJiMzNDslcyBjYWxsZWQgd2l0aCBudWxsIG1lc3NhZ2UuXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW1lbWNweV90b2lvKG91dGJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW0sIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9kb25lKHN0cnVjdCBtYm94X2NsaWVudCAqYywgdm9pZCAqbXNzZywgaW50IHJjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlcmUgaXMgYSBwYWNrZXQgaW4gZmxpZ2h0IGR1cmluZyBkcml2ZXIgY2xlYW51cAomIzQzOwkgKiBJdCBtYXkgaGF2ZSBiZWVuIGZyZWVkIGFscmVhZHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1zc2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoYywgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpOwomIzQzOwomIzQzOwkvKiBVc2UgYW4gSVJRIHNhZmUgdXBkYXRlIGFzIHRoaXMgaXMgY2FsbGVkIGZyb20gSEFSRCBJUlEgaW5zdGVhZCBvZgomIzQzOwkgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LSZndDtuZGV2LCBza2ItJmd0O2xlbik7CiYjNDM7CSAqLwomIzQzOwlkc3RhdHMgPSB0aGlzX2NwdV9wdHIobWN0cF9wY2NfbmRldi0mZ3Q7bmRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDt0eF9kcm9wcyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBza2ItJmd0O2xlbik7CiYjNDM7CX0KJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwomIzQzOwluZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtJmd0O25kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94LCAqaW5ib3g7CiYjNDM7CiYjNDM7CW91dGJveCA9ICZhbXA7bWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94OwomIzQzOwlpbmJveCA9ICZhbXA7bWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3g7CiYjNDM7CiYjNDM7CW91dGJveC0mZ3Q7Y2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgmYW1wO291dGJveC0mZ3Q7Y2xpZW50LCBvdXRib3gtJmd0O2luZGV4KTsKJiM0MzsJaWYgKElTX0VSUihvdXRib3gtJmd0O2NoYW4pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJaWYgKG91dGJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW1fc2l6ZSAmbHQ7IE1DVFBfUENDX01JTl9TSVpFKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWluYm94LSZndDtjbGllbnQucnhfY2FsbGJhY2sgPSBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2s7CiYjNDM7CWluYm94LSZndDtjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7aW5ib3gtJmd0O2NsaWVudCwgaW5ib3gtJmd0O2luZGV4KTsKJiM0MzsJaWYgKElTX0VSUihpbmJveC0mZ3Q7Y2hhbikpIHsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtJmd0O2NoYW4pOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoaW5ib3gtJmd0O2NoYW4pOwomIzQzOwl9CiYjNDM7CWlmIChpbmJveC0mZ3Q7Y2hhbi0mZ3Q7c2htZW1fc2l6ZSAmbHQ7IE1DVFBfUENDX01JTl9TSVpFKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LSZndDtjaGFuKTsKJiM0MzsJCXBjY19tYm94X2ZyZWVfY2hhbm5lbChpbmJveC0mZ3Q7Y2hhbik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtY3RwX3BjY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudCwgaWR4OwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CWNoYW4gPSBtY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2hhbi0mZ3Q7bWNoYW47CiYjNDM7CXBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LSZndDtpbmJveC5jaGFuKTsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3guY2hhbiA9IE5VTEw7CiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO2NoYW4tJmd0O2xvY2spIHsKJiM0MzsJCWlmIChjaGFuLSZndDthY3RpdmVfcmVxICE9ICBNQk9YX05PX01TRykgewomIzQzOwkJCXNrYiA9IGNoYW4tJmd0O2FjdGl2ZV9yZXE7CiYjNDM7CQkJY2hhbi0mZ3Q7YWN0aXZlX3JlcSA9IE1CT1hfTk9fTVNHOwomIzQzOwkJCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJCQlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiYjNDM7CQl9CiYjNDM7CQl3aGlsZSAoY2hhbi0mZ3Q7bXNnX2NvdW50ICZndDsgMCkgewomIzQzOwkJCWNvdW50ID0gY2hhbi0mZ3Q7bXNnX2NvdW50OwomIzQzOwkJCWlkeCA9IGNoYW4tJmd0O21zZ19mcmVlOwomIzQzOwkJCWlmIChpZHggJmd0Oz0gY291bnQpCiYjNDM7CQkJCWlkeCAtPSBjb3VudDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWlkeCAmIzQzOz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDsKJiM0MzsJCQlza2IgPSBjaGFuLSZndDttc2dfZGF0YVtpZHhdOwomIzQzOwkJCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTsKJiM0MzsJCQlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiYjNDM7CQkJY2hhbi0mZ3Q7bXNnX2NvdW50LS07CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtJmd0O291dGJveC5jaGFuKTsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94LmNoYW4gPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgYmVjYXVzZSB0aGUgcmluZyBidWZmZXIgd2FzIGZ1bGwKJiM0MzsJICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzCiYjNDM7CSAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZQomIzQzOwkgKiBuZXRkZXYgaXMgcmUtb3BlbmVkLgomIzQzOwkgKi8KJiM0MzsJbmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LSZndDtuZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5kb19vcGVuID0gbWN0cF9wY2Nfb3BlbiwKJiM0MzsJLm5kb19zdG9wID0gbWN0cF9wY2Nfc3RvcCwKJiM0MzsJLm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CW5kZXYtJmd0O3R5cGUgPSBBUlBIUkRfTUNUUDsKJiM0MzsJbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTsKJiM0MzsJbmRldi0mZ3Q7dHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47CiYjNDM7CW5kZXYtJmd0O2ZsYWdzID0gSUZGX05PQVJQOwomIzQzOwluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDttY3RwX3BjY19uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiYjNDM7CW5kZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7CiYjNDM7CWludCBpbmRleDsKJiM0MzsJdTMyIGluYm94X2luZGV4OwomIzQzOwl1MzIgb3V0Ym94X2luZGV4OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCiYjNDM7CQkJCSAgICAgICB2b2lkICpjb250ZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0ICpsdWMgPSBjb250ZXh0OwomIzQzOwlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgKmFkZHI7CiYjNDM7CiYjNDM7CWlmIChhcmVzLSZndDt0eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMzIpCiYjNDM7CQlyZXR1cm4gQUVfT0s7CiYjNDM7CiYjNDM7CWFkZHIgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMiwgJmFtcDthcmVzLSZndDtkYXRhKTsKJiM0MzsJc3dpdGNoIChsdWMtJmd0O2luZGV4KSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCWx1Yy0mZ3Q7b3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAxOgomIzQzOwkJbHVjLSZndDtpbmJveF9pbmRleCA9IGFkZHJbMF0uYWRkcmVzcy5taW5pbXVtOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gQUVfRVJST1I7CiYjNDM7CX0KJiM0MzsJbHVjLSZndDtpbmRleCYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBBRV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkYXRhOwomIzQzOwomIzQzOwltY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfdHlwZXMoc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuIGNoYW47CiYjNDM7CWludCBhY3R1YWxfdHlwZTsKJiM0MzsKJiM0MzsJb3V0Ym94ID0gJmFtcDttY3RwX3BjY19uZGV2LSZndDtvdXRib3g7CiYjNDM7CWlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKCZhbXA7Y2hhbiwgb3V0Ym94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJYWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7CiYjNDM7CWlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX01BU1RFUl9TVUJTUEFDRSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7TUNUUC1QQ0Mgb3V0Ym94IGNoYW5uZWwgd3JvbmcgdHlwZTogJWQmIzM0OywgYWN0dWFsX3R5cGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5ib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O2luYm94OwomIzQzOwlpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbCgmYW1wO2NoYW4sIGluYm94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJYWN0dWFsX3R5cGUgPSBjaGFuLnR5cGU7CiYjNDM7CWlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtNQ1RQLVBDQyBpbmJveCBjaGFubmVsIHdyb25nIHR5cGU6ICVkJiMzNDssIGFjdHVhbF90eXBlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGluaXRpYWxpemVfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3g7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICppbmJveDsKJiM0MzsJc3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuIGluX2NoYW47CiYjNDM7CWludCBtY3RwX3BjY19tYXhfbXR1OwomIzQzOwlpbnQgaW5ib3hfbWF4X210dTsKJiM0MzsKJiM0MzsJbWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlvdXRib3ggPSAmYW1wO21jdHBfcGNjX25kZXYtJmd0O291dGJveDsKJiM0MzsJaWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoJmFtcDtvdXRfY2hhbiwgb3V0Ym94LSZndDtpbmRleCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKG91dF9jaGFuLnNobWVtX3NpemUgJmx0OyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwltY3RwX3BjY19tYXhfbXR1ID0gb3V0X2NoYW4uc2htZW1fc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7CiYjNDM7CWluYm94ID0gJmFtcDttY3RwX3BjY19uZGV2LSZndDtpbmJveDsKJiM0MzsJaWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoJmFtcDtpbl9jaGFuLCBpbmJveC0mZ3Q7aW5kZXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChpbl9jaGFuLnNobWVtX3NpemUgJmx0OyBNQ1RQX01JTl9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpbmJveF9tYXhfbXR1ID0gaW5fY2hhbi5zaG1lbV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTsKJiM0MzsKJiM0MzsJaWYgKGluYm94X21heF9tdHUgJmx0OyBtY3RwX3BjY19tYXhfbXR1KQomIzQzOwkJbWN0cF9wY2NfbWF4X210dSA9IGluYm94X21heF9tdHU7CiYjNDM7CiYjNDM7CW5kZXYtJmd0O210dSA9IE1DVFBfTUlOX01UVTsKJiM0MzsJbmRldi0mZ3Q7bWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7CiYjNDM7CW5kZXYtJmd0O21pbl9tdHUgPSBNQ1RQX01JTl9NVFU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCBjb250ZXh0ID0gezB9OwomIzQzOwlzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDthY3BpX2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwljaGFyIG5hbWVbMzJdOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O0FkZGluZyBtY3RwX3BjYyBkZXZpY2UgZm9yIEhJRCAlc1xuJiMzNDssCiYjNDM7CQlhY3BpX2RldmljZV9oaWQoYWNwaV9kZXYpKTsKJiM0MzsJZGV2X2hhbmRsZSA9IGFjcGlfZGV2aWNlX2hhbmRsZShhY3BpX2Rldik7CiYjNDM7CXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2X2hhbmRsZSwgJiMzNDtfQ1JTJiMzNDssIGxvb2t1cF9wY2N0X2luZGljZXMsCiYjNDM7CQkJCSAgICAgJmFtcDtjb250ZXh0KTsKJiM0MzsJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RkFJTEVEIHRvIGxvb2t1cCBQQ0MgaW5kZXhlcyBmcm9tIENSU1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHdlIGhhdmUgZXhhY3RseSAyIGNoYW5uZWxzOiBhbiBvdXRib3ggYW5kIGFuIGluYm94LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNvbnRleHQuaW5kZXggIT0gMikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7bWN0cHBjYyVkJiMzNDssIGNvbnRleHQuaW5ib3hfaW5kZXgpOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLAomIzQzOwkJCSAgICBtY3RwX3BjY19zZXR1cCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CW1jdHBfcGNjX25kZXYtJmd0O2luYm94LmluZGV4ID0gY29udGV4dC5pbmJveF9pbmRleDsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7aW5ib3guY2xpZW50LmRldiA9IGRldjsKJiM0MzsJbWN0cF9wY2NfbmRldi0mZ3Q7b3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7CiYjNDM7CW1jdHBfcGNjX25kZXYtJmd0O291dGJveC5jbGllbnQuZGV2ID0gZGV2OwomIzQzOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtvdXRib3guY2xpZW50LnR4X2RvbmUgPSBtY3RwX3BjY190eF9kb25lOwomIzQzOwltY3RwX3BjY19uZGV2LSZndDthY3BpX2RldmljZSA9IGFjcGlfZGV2OwomIzQzOwltY3RwX3BjY19uZGV2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJYWNwaV9kZXYtJmd0O2RyaXZlcl9kYXRhID0gbWN0cF9wY2NfbmRldjsKJiM0MzsJcmMgPSBjaGVja19jaGFubmVsX3R5cGVzKG1jdHBfcGNjX25kZXYpOwomIzQzOwlpZiAocmMgIT0gMCkKJiM0MzsJCWdvdG8gZnJlZV9uZXRkZXY7CiYjNDM7CiYjNDM7CXJjID0gaW5pdGlhbGl6ZV9tdHUobmRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZnJlZV9uZXRkZXY7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfUENDKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBmcmVlX25ldGRldjsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIG1jdHBfY2xlYW51cF9uZXRkZXYsIG5kZXYpOwomIzQzO2ZyZWVfbmV0ZGV2OgomIzQzOwlmcmVlX25ldGRldihuZGV2KTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHsKJiM0MzsJeyAmIzM0O0RNVDAwMDEmIzM0OyB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDttY3RwX3BjYyYjMzQ7LAomIzQzOwkuY2xhc3MgPSAmIzM0O1Vua25vd24mIzM0OywKJiM0MzsJLmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsCiYjNDM7CS5vcHMgPSB7CiYjNDM7CQkuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9hY3BpX2RyaXZlcihtY3RwX3BjY19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TUNUUCBQQ0MgQUNQSSBkZXZpY2UmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0FkYW0gWW91bmcgJmx0O2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tJmd0OyYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wY2MuaCBiL2luY2x1ZGUvYWNwaS9wY2MuaAppbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wY2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvcGNjLmgKQEAgLTgsNiAmIzQzOzgsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jb250cm9sbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFpbGJveF9jbGllbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwogCiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiAJc3RydWN0IG1ib3hfY2hhbiAqbWNoYW47CkBAIC0xNyw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiAJdTMyIGxhdGVuY3k7CiAJdTMyIG1heF9hY2Nlc3NfcmF0ZTsKIAl1MTYgbWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlOwogfTsKIAogLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovCkBAIC0zNyw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7CiBleHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKgogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7CiBleHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pOwomIzQzO2V4dGVybiBpbnQKJiM0MztwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqCiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKQpAQCAtNDQsNiAmIzQzOzQ4LDExIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpCiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3BjY19tYm94X3F1ZXJ5X2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKnFfY2hhbiwgaW50IHN1YnNwYWNlX2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZiAvKiBfUENDX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUNUUC9QQ0MgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBkcml2ZXIsIGBtY3RwLXBjYy5jYCwgaW1wbGVtZW50aW5nIE1DVFAgb3ZlciBQQ0MuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGEgbmV3IG5ldHdvcmsgZHJpdmVyLCBhbmQgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBuZXcgbmV0d29yayBkcml2ZXJzIGFyZSBhbHdheXMgd29ydGggYSBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgaW50cm9kdWNlcyBhIGBNQ1RQX1RSQU5TUE9SVF9QQ0NgIEtjb25maWcgb3B0aW9uIGFuZCB0b3VjaGVzIGBwY2MuY2Agd2l0aCB0aGUgYWRkaXRpb24gb2YgYHBjY19tYm94X3F1ZXJ5X2NoYW5uZWxgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBpbnRlcnJ1cHQgYW5kIGNoYW5uZWwgcmVxdWVzdCBsb2dpYy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENDLCBiZWluZyBBQ1BJLWJhc2VkLCBtYWtlcyB0aGlzIGEga2V5IHF1ZXN0aW9uLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdXNlcyB0aGUgQUNQSSBkZXZpY2UgSUQgYERNVDAwMDFgLiBDYW4gd2UgdHJpY2sgUUVNVSBpbnRvIGVtdWxhdGluZyB0aGlzPyBTeXprYWxsZXImIzM5O3MgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIGNvbWUgdG8gbWluZC4gQnV0LCB3YWl0Li4uIFN5emthbGxlciYjMzk7cyBBQ1BJIHRhYmxlIGluamVjdGlvbiBmb3IgUENDIGlzbiYjMzk7dCBleGFjdGx5IHN0cmFpZ2h0Zm9yd2FyZCBvciBnZW5lcmljLiBUaGlzIGlzbiYjMzk7dCBhICpkaXJlY3QqIEFDUEkgZHJpdmVyLiBpdCYjMzk7cyBhICpuZXR3b3JrKiBkcml2ZXIuCgpPa2F5LCBsZXQmIzM5O3MgcmVmb2N1cy4gSWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgYG1jdHBfcGNjX2RyaXZlcl9hZGRgIHdvbiYjMzk7dCBldmVuIGJlIGNhbGxlZC4gV2UgbmVlZCB0byBmaW5kIGEgdHJpZ2dlci4gQ2FuIHN5emthbGxlciBkbyAqYW55dGhpbmcqIHdpdGggQUNQSSBkZXZpY2UgaW5zdGFudGlhdGlvbiBoZXJlPyBOb3BlLCB0aGUgZ2VuZXJpYyBgc3l6X2FjcGlfLi4uYCB3b24mIzM5O3QgaGVscC4gV2UgY2FuIGZ1enogbmV0ZGV2IG9wcywgYnV0IHdlIG5lZWQgdGhlIGRldmljZSB0byBiZSBjcmVhdGVkIHNvbWVob3cuIE5vLCBpdCYjMzk7cyBhbiBBQ1BJIGRyaXZlci4KClRoaW5raW5nIGFib3V0IGl0IG1vcmUsIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdG91Y2ggQUNQSSBkcml2ZXJzIHVubGVzcyB0aGV5IGNhbiBiZSBpbnN0YW50aWF0ZWQuIEJ1dCBoZXksIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGluIGBwY2MuY2AuIEdpdmVuIHRoYXQgYHBjY19tYm94X3F1ZXJ5X2NoYW5uZWxgIGlzIGFkZGVkLCBJcyBgTUNUUF9UUkFOU1BPUlRfUENDYCBzdGlsbCB3b3J0aCBmdXp6aW5nPyBZZXMsIGEgbmV3IG5ldHdvcmsgZHJpdmVyLgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbWN0cF9wY2MuY2AuIEl0IHJlZ2lzdGVycyBhIG5ldGRldiB1c2luZyBgbWN0cF9yZWdpc3Rlcl9uZXRkZXZgLCB3aXRoIGBtY3RwX3BjY19uZXRkZXZfb3BzYCBjb250YWluaW5nIGBuZG9fc3RhcnRfeG1pdCA9IG1jdHBfcGNjX3R4YC4gT2theSwgc28gaWYgdGhlIGRldmljZSAqY2FuKiBiZSBjcmVhdGVkLCB3ZSYjMzk7cmUgZ29sZGVuLiBGdXp6aW5nIHRoZSBuZXRkZXYgb3BlcmF0aW9ucyBiZWNvbWVzIGZlYXNpYmxlLgoKQ2FuIHN5emthbGxlciBjcmVhdGUgQUNQSSBkZXZpY2VzPyBBZ2FpbiwgdGhlIGFuc3dlciBpcyBuby4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIEFDUEkgZGV2aWNlIGluc3RhbnRpYXRvci4KCkxldCYjMzk7cyBjaGVjayB0aGUgcHJvbXB0ISBJdCBzYXlzIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsuIElzIFBDQyBlbXVsYXRlZCBpbiBRRU1VPyBRRU1VIGhhcyBBQ1BJIHN1cHBvcnQsIGJ1dCBQQ0MsIHNwZWNpZmljYWxseT8gUHJvYmFibHkgbm90LiBJdCYjMzk7cyBhbiBBQ1BJIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gdGhlIGZpcm13YXJlIHByb3ZpZGluZyBBQ1BJIHRhYmxlcy4gSWYgdGhlIGZpcm13YXJlIGRvZXNuJiMzOTt0IHByb3ZpZGUgaXQsIHRoZSBkcml2ZXIgd29uJiMzOTt0IHByb2JlLgoKU28sIGRvIHdlIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgc2VlIHdoYXQgaGFwcGVucywgb3IgaXMgdGhpcyBkZWFkIGVuZD8KCkhvd2V2ZXIsIHRoZSBwcm9tcHQgYWxzbyBzYXlzLCAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNvIGxldCYjMzk7cyBmaW5kIGlmIHdlIGNhbiBleGVjdXRlIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3BjY19kcml2ZXJfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz0zNTA9c3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtMzgzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjM4NDpzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldilcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy0zODUte1xuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz00NTE9c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jLTQ1NS1cdC5vcHMgPSB7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmM6NDU2Olx0XHQuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy00NTctXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhbiBBQ1BJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGRldmljZXMgZGVzY3JpYmVkIGluIHRoZSBEU0RUL1NTRFQgdGFibGVzLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlIG9yLCBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGUgZW11bGF0b3IgaXRzZWxmLiBJIGtub3cgdGhhdCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgaW50byBMaW51eCBpcyBwb3NzaWJsZSDigJMgd2UgY2FuIGRvIGl0IHRocm91Z2ggY29uZmlnZnMgKGBDT05GSUdfQUNQSV9DT05GSUdGU2ApIG9yIHZpYSBpbml0cmQuIEkmIzM5O20gcHJldHR5IHN1cmUgU3l6a2FsbGVyIGlzbiYjMzk7dCBzZXQgdXAgdG8gZG8gdGhhdCBkeW5hbWljYWxseSBmb3IganVzdCBhbnkgYXJiaXRyYXJ5IGRldmljZSByaWdodCBub3csIHRob3VnaC4KCkhtbSwgd2FpdC4uLiBpcyB0aGVyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIE1DVFA/IEFoLCB5ZXMhIEkmIzM5O20gc2VlaW5nIGl0IG5vdzogTUNUUCBvdmVyIHNlcmlhbCAoYG1jdHAtc2VyaWFsYCksIEkyQyAoYG1jdHAtaTJjYCksIEkzQyAoYG1jdHAtaTNjYCksIGFuZCBVU0IgKGBtY3RwLXVzYmApLiBUaGlzIGlzIHNwZWNpZmljYWxseSBNQ1RQIG92ZXIgUENDLiBUaGUgY2hhbGxlbmdlIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBgbWN0cF9wY2NfZHJpdmVyX2FkZGA/IEl0IGxvb2tzIGxpa2UgaXQgd291bGQgYmUgdG91Z2ggd2l0aG91dCBjcmFmdGluZyBjdXN0b20gQUNQSSB0YWJsZXMuCgpCdXQgd2FpdCwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9tYWlsYm94L3BjYy5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IG1vZGlmaWNhdGlvbnMgdGhleSYjMzk7dmUgbWFkZSB0byBgcGNjLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBpcyBwcm9iYWJseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfaXJxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYz0yODk9c3RhdGljIHZvaWQgcGNjX2NoYW5fYWNrbm93bGVkZ2Uoc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zMDktLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzEwOiAqIHBjY19tYm94X2lycSAtIFBDQyBtYWlsYm94IGludGVycnVwdCBoYW5kbGVyXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzExLSAqIEBpcnE6XHRpbnRlcnJ1cHQgbnVtYmVyXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNS0gKi9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozMTY6c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNy17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTQ5Mz1zdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTUxMy1cdFx0XHRcdFx0XHRJUlFGX1NIQVJFRCA6IDA7XG5kcml2ZXJzL21haWxib3gvcGNjLmM6NTE0Olx0XHRyYyA9IGRldm1fcmVxdWVzdF9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIHBjY19tYm94X2lycSxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy01MTUtXHRcdFx0XHQgICAgICBpcnFmbGFncywgTUJPWF9JUlFfTkFNRSwgY2hhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0MgTWFpbGJveCBJbnRlcnJ1cHQgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBjYy5jYCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IHdhcnJhbnQgbXkgYXR0ZW50aW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBgcGNjX21ib3hfaXJxYC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgdGhlIGBjaGFuX2luX3VzZWAgZmxhZyBhbmQgdGhlIGludGVycnVwdCBjb250ZXh0LgoKVGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgY2hlY2sgd2l0aGluIGBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXJgLiBOb3csIGlmIHRoZSBjaGFubmVsIHR5cGUgaXMgYEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0VgLCB0aGUgZXJyb3IgY2hlY2sgaXMgc2tpcHBlZCBhbHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIFdoeSBhcmUgc2xhdmUgc3Vic3BhY2VzIHRyZWF0ZWQgZGlmZmVyZW50bHkgaW4gdGhpcyByZXNwZWN0PyBJcyB0aGlzIGEga25vd24gaGFyZHdhcmUgcXVpcmssIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgZnV0dXJlIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHk/IFBlcmhhcHMgdGhpcyByZWxhdGVzIHRvIHRoZSBleHRlbmRlZCBQQ0MgZnVuY3Rpb25hbGl0eS4KClRoZW4sIGRvd24gaW4gYHBjY19tYm94X2lycWAsIEkgc2VlIHRoYXQgdGhlIHJldHVybiBjb2RlIGZyb20gYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgaXMgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGBtYm94X2NoYW5fdHhkb25lYCByZXR1cm4gdmFsdWUuIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgY2FuIHJldHVybiBhbmQgaG93IHRoYXQgdmFsdWUgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgZmxvdy4gQW5kIHRoZSBmbGFnIGBjaGFuX2luX3VzZWAgaXMgdXNpbmcgdGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgbWFjcm9zLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBlbmZvcmNlcyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHRvIHByZXZlbnQgcmFjZXMuCgpUaGUgbG9naWMgZmxvdyBub3cgaXM6IGNoZWNrIGlmIGFuIGludGVycnVwdCBpcyBmb3IgdGhlIFBDQyBjaGFubmVsLCBjaGVjayBpZiB0aGUgY2hhbm5lbCBpcyBpbiB1c2UsIGFuZCB0aGVuIGNoZWNrIGZvciBjb21tYW5kIGNvbXBsZXRpb24uIE9ubHkgYWZ0ZXIgdGhlc2UgY2hlY2tzLCBpcyB0aGUgZXJyb3IgY2hlY2sgZG9uZS4gTm93LCBJIHNlZSB0aGUgZXJyb3IgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3Igc2xhdmUgc3Vic3BhY2VzLiBGaW5hbGx5LCBpZiBhbGwgdGhlc2UgY2hlY2tzIGFyZSBzdWNjZXNzZnVsLCB0aGUgYGNoYW5faW5fdXNlYCBmbGFnIGlzIGNsZWFyZWQgdXNpbmcgYFdSSVRFX09OQ0VgLiBBbmQgZmluYWxseSwgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpbiB0aGUgaGFyZHdhcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGlzIGBwY2NfbWJveF9pcnFgIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGxpbmcgY29udGV4dC4gSXMgaXQgY2FsbGVkIG9mdGVuLCBhbmQgd2hhdCBhcmUgdGhlIGNyaXRpY2FsIHBhdGhzPyBUaGVuLCBJIHdpbGwgcHJvYmUgYHBjY19tYm94X3Byb2JlYCB0byBzZWUgaG93IFBDQyBpcyBpbml0aWFsaXplZCBhbmQgaWYgdGhpcyBjb2RlIGlzIGV2ZW4gcmVhY2hhYmxlLCBvciBpZiBpdCBoYW5kbGVzIGEgc2VsZG9tIHVzZWQgc3Vic3lzdGVtLiBLbm93aW5nIHRoYXQgUENDIGlzIGFuIEFDUEkgZmVhdHVyZSwgSSYjMzk7bGwgYWxzbyBjb25zaWRlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIHN5c3RlbSBtaWdodCBub3QgZXZlbiBoYXZlIFBDQyB0YWJsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgcHJvcGVybHkgZ3VhcmRlZCBhbmQgZG9lc24mIzM5O3QgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRob3NlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYz03NTg9c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzk2LS8qKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjc5NzogKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzk4LSAqXHRQQ0NUIHBsYXRmb3JtIGRldmljZS4gVGhpcyBpcyBwdXJlbHkgdXNlZCB0byByZXByZXNlbnRcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA2LSAqL1xuZHJpdmVycy9tYWlsYm94L3BjYy5jOjgwNzpzdGF0aWMgaW50IHBjY19tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA4LXtcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmM9OTA1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBjY19tYm94X2RyaXZlciA9IHtcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MDY6XHQucHJvYmUgPSBwY2NfbWJveF9wcm9iZSxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy05MDctXHQuZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTI4LVx0cGNjX3BkZXYgPSBwbGF0Zm9ybV9jcmVhdGVfYnVuZGxlKFx1MDAyNnBjY19tYm94X2RyaXZlcixcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5Mjk6XHRcdFx0cGNjX21ib3hfcHJvYmUsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXNzZWN0aW5nIHRoZSBQQ0MgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIGlzIGJlaW5nIGluaXRpYWxpemVkLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgcGNjX2luaXRgIGZ1bmN0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgcGxhdGZvcm1fY3JlYXRlX2J1bmRsZWAgd2l0aCBhIGZldyBrZXkgcGllY2VzOiB0aGUgUENDIG1haWxib3ggZHJpdmVyIChgcGNjX21ib3hfZHJpdmVyYCksIGEgcHJvYmUgZnVuY3Rpb24gKGBwY2NfbWJveF9wcm9iZWApLCBhbmQgc29tZSBudWxsIGFyZ3VtZW50cy4gVGhpcyBpcyBzdGFuZGFyZCBmYXJlIGZvciBhIHBsYXRmb3JtIGRyaXZlciBzZXR1cDsgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgcHJvYmluZyBtZWNoYW5pc20uCgpCdXQgdGhlbiwgSSByZW1lbWJlciB0aGlzIGBwY2NfaW5pdGAgaXMgY2FsbGVkIHdpdGggYHN1YnN5c19pbml0Y2FsbChwY2NfaW5pdCk7YC4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3Mgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZsb3csIHdoaWNoIGdlbmVyYWxseSBwb2ludHMgdG8gZWFybHkgZGV2aWNlIG9yIG1vZHVsZSBzZXR1cCwgYW5kIG1lYW5zIHRoYXQgYHBjY19pbml0YCBpc24mIzM5O3QgY2FsbGVkIGRpcmVjdGx5LiBJdCYjMzk7cyBkZWZlcnJlZCB1bnRpbCBhIGxhdGVyIHN0YWdlIG9mIHRoZSBib290LgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBiZWNhdXNlIGBwY2NfaW5pdGAgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGFjcGlfcGNjX3Byb2JlKClgLiBUaGF0IGltbWVkaWF0ZWx5IGNoYW5nZXMgdGhlIGdhbWUuIFRoaXMgd2hvbGUgc2VxdWVuY2UgaXMgZ29pbmcgdG8gYmUgQUNQSS1kZXBlbmRlbnQuIFRoaXMgbWVhbnMgaXQgaXMgbGlrZWx5IHByb2JpbmcgdGhlIEFDUEkgbmFtZXNwYWNlIGZvciB0aGUgUENDIGRldmljZSBhbmQgZGVjaWRpbmcgd2hldGhlciB0byBpbml0aWFsaXplIHRoZSBQQ0MgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiB3aGV0aGVyIHRoYXQgZGV2aWNlIGlzIGZvdW5kIGluIHRoZSBBQ1BJIHRhYmxlcy4gVGhpcyBleHBsYWlucyB3aHkgYHBsYXRmb3JtX2NyZWF0ZV9idW5kbGVgIGlzIHNldCB1cCBoZXJlLCBhbmQgdGhlIGNhbGwgdG8gYHBjY19tYm94X3Byb2JlYCBpcyBkZWZlcnJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNwaV9wY2NfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tYWlsYm94L3BjYy5jPTcyOT1zdGF0aWMgdm9pZCBwY2NfcGFyc2Vfc3Vic3BhY2Vfc2htZW0oc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuLFxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03NTMtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6NzU0OiAqIGFjcGlfcGNjX3Byb2JlIC0gUGFyc2UgdGhlIEFDUEkgdHJlZSBmb3IgdGhlIFBDQ1QuXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU1LSAqXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTc1Ny0gKi9cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTg6c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03NTkte1xuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIwLVx0LyogQ2hlY2sgaWYgUENDIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAqL1xuZHJpdmVycy9tYWlsYm94L3BjYy5jOjkyMTpcdHJldCA9IGFjcGlfcGNjX3Byb2JlKCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGFjcGlfcGNjX3Byb2JlYCoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGBhY3BpX3BjY19wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgZGV0ZWN0aW9uIG9mIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCkgZGV2aWNlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBwcm9iaW5nIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiBwaXRmYWxscyB3aXRoIEFDUEkgZGV2aWNlIGVudW1lcmF0aW9uLCB0aGUgdmFyaW91cyBxdWlya3MsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBkZXZpY2UgY29uZmxpY3RzLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcz8gV2hhdCBBQ1BJIG1ldGhvZHMgaXMgaXQgZXZhbHVhdGluZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGNvbW1vbiBzb3VyY2VzIG9mIGJ1Z3MsIGxpa2UgaW5jb3JyZWN0IHJlc291cmNlIGFsbG9jYXRpb24gb3IgdW5leHBlY3RlZCByZXR1cm4gdmFsdWVzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtdXRleCBjb250ZW50aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgdGhlaXIgQUNQSSBpbXBsZW1lbnRhdGlvbnMsIHNpbmNlIHRoYXQgY2FuIHZhcnkgd2lsZGx5LiBUaGlzIHByb2JlIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUgbGluY2hwaW4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbnRpbWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC9wY2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzU4Olx0c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcbiA3NTk6XHR7XG4gNzYwOlx0XHRpbnQgY291bnQsIGksIHJjID0gMDtcbiA3NjE6XHRcdGFjcGlfc3RhdHVzIHN0YXR1cztcbiA3NjI6XHRcdHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqcGNjdF90Ymw7XG4gNzYzOlx0XHRzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9wcm9jIHByb2NbQUNQSV9QQ0NUX1RZUEVfUkVTRVJWRURdO1xuIDc2NDpcdFxuIDc2NTpcdFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUENDVCwgMCwgXHUwMDI2cGNjdF90YmwpO1xuIDc2NjpcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8ICFwY2N0X3RibClcbiA3Njc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzY4Olx0XG4gNzY5Olx0XHQvKiBTZXQgdXAgdGhlIHN1YnRhYmxlIGhhbmRsZXJzICovXG4gNzcwOlx0XHRmb3IgKGkgPSBBQ1BJX1BDQ1RfVFlQRV9HRU5FUklDX1NVQlNQQUNFO1xuIDc3MTpcdFx0ICAgICBpIFx1MDAzYyBBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRDsgaSYjNDM7JiM0MzspIHtcbiA3NzI6XHRcdFx0cHJvY1tpXS5pZCA9IGk7XG4gNzczOlx0XHRcdHByb2NbaV0uY291bnQgPSAwO1xuIDc3NDpcdFx0XHRwcm9jW2ldLmhhbmRsZXIgPSBwYXJzZV9wY2Nfc3Vic3BhY2U7XG4gNzc1Olx0XHR9XG4gNzc2Olx0XG4gNzc3Olx0XHRjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfZW50cmllc19hcnJheShBQ1BJX1NJR19QQ0NULFxuIDc3ODpcdFx0XHRcdHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9wY2N0KSwgcHJvYyxcbiA3Nzk6XHRcdFx0XHRBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRCwgTUFYX1BDQ19TVUJTUEFDRVMpO1xuIDc4MDpcdFx0aWYgKGNvdW50IFx1MDAzYz0gMCB8fCBjb3VudCBcdTAwM2UgTUFYX1BDQ19TVUJTUEFDRVMpIHtcbiA3ODE6XHRcdFx0aWYgKGNvdW50IFx1MDAzYyAwKVxuIDc4MjpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7RXJyb3IgcGFyc2luZyBQQ0Mgc3Vic3BhY2VzIGZyb20gUENDVFxcblwmIzM0Oyk7XG4gNzgzOlx0XHRcdGVsc2VcbiA3ODQ6XHRcdFx0XHRwcl93YXJuKFwmIzM0O0ludmFsaWQgUENDVDogJWQgUENDIHN1YnNwYWNlc1xcblwmIzM0OywgY291bnQpO1xuIDc4NTpcdFxuIDc4NjpcdFx0XHRyYyA9IC1FSU5WQUw7XG4gNzg3Olx0XHR9IGVsc2Uge1xuIDc4ODpcdFx0XHRwY2NfY2hhbl9jb3VudCA9IGNvdW50O1xuIDc4OTpcdFx0fVxuIDc5MDpcdFxuIDc5MTpcdFx0YWNwaV9wdXRfdGFibGUocGNjdF90YmwpO1xuIDc5MjpcdFxuIDc5MzpcdFx0cmV0dXJuIHJjO1xuIDc5NDpcdH1cbiA3OTU6XHRcbiA3OTY6XHQvKipcbiA3OTc6XHQgKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFjcGlfcGNjX3Byb2JlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBmdW5jdGlvbiBhYnNvbHV0ZWx5IG5lZWRzIHRoZSBgUENDVGAgQUNQSSB0YWJsZSB0byBleGlzdC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJIGdldCBhIGAtRU5PREVWYCBlcnJvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGluamVjdCBBQ1BJIHRhYmxlcywgYnV0LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4gbWVjaGFuaXNtIGZvciBkeW5hbWljYWxseSBpbmplY3RpbmcgYXJiaXRyYXJ5IEFDUEkgdGFibGVzIGR1cmluZyBmdXp6aW5nIGZvciwgd2VsbCwgKm1vc3QqIGRldmljZXMuIENvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyIG1pZ2h0IG9mZmVyIGEgd29ya2Fyb3VuZCBidXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHNlZW0gdG8gbmF0aXZlbHkgZG8gdGhpcy4gTm8sIGl0IHJlbGllcyBvbiBRRU1VLCB3aGljaCBpbiB0dXJuLCBkb2VzbiYjMzk7dCBwcm92aWRlIHRoZSBgUENDVGAgdGFibGUgYnkgZGVmYXVsdC4gU28sIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCkkgd29uZGVyZWQgaWYgdGhlcmUgd2FzIGFub3RoZXIgZW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlLCBhbmQgdGhlIGBwY2NfbWJveF9xdWVyeV9jaGFubmVsYCBmdW5jdGlvbiAqaXMqIGV4cG9ydGVkLCBidXQgYWdhaW4sIHRoaXMgc2VlbXMgdG8gYmUgcGFydCBvZiB0aGUgYGFjcGlfcGNjYCBzdWJzeXN0ZW0uIFRoZSBgbWN0cF9wY2NfZHJpdmVyX2FkZGAgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gQUNQSSBkZXZpY2Ugd2l0aCBISUQgYERNVDAwMDFgIGlzIGZvdW5kLCBhbmQgb25jZSBhZ2FpbiwgdGhpcyAqcmVxdWlyZXMqIEFDUEkgdGFibGVzLiBUaGUgYG1jdHBfcGNjX2RyaXZlcmAgaXMgYW4gYGFjcGlfZHJpdmVyYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IGFyb3VuZCBpdC4gQW5kIHRoZSBgcGNjLmNgIGNvZGUgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIFBDQ1QgdGFibGUuCgpTbywgaGVyZSYjMzk7cyBteSBjcml0aWNhbCBxdWVzdGlvbjogR2l2ZW4gdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5LCB0aGUgUENDVCB0YWJsZSBhbmQgdGhlIEhJRCBETVQwMDAxIGRldmljZSkgYW5kIHRoZSBsYWNrIG9mIGEgc3RyYWlnaHRmb3J3YXJkIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1ldGhvZCBpbiBzeXprYWxsZXIsIHNob3VsZCBJIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYD8KClRoZSBwcm9tcHQgSSBhbSB3b3JraW5nIGZyb20gaXMgcHJldHR5IGNsZWFyIG9uIHRoaXM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7IEJpbmdvLiBTaW5jZSB0aGVzZSBwYXJ0aWN1bGFyIEFDUEkgdGFibGVzIGFyZSAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgaW5qZWN0IHRoZW0gaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQgaXMsIGluZGVlZCwgaW1wb3NzaWJsZSB0byByZWFjaCB0aGlzIGNvZGUuCgpXYWl0LiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBEb2VzIHN5emthbGxlciBsZXZlcmFnZSBgQ09ORklHX0FDUElfQ09ORklHRlNgPyBUaGF0IHdvdWxkIGFsbG93IHVzZXJzcGFjZSB0byBsb2FkIEFDUEkgdGFibGVzLiBCdXQgbm8sIHN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgYENPTkZJR19BQ1BJX0NPTkZJR0ZTYCB0byBpbmplY3QgYXJiaXRyYXJ5IHRhYmxlcy4gV2FpdC4uLiBoYXMgc3l6a2FsbGVyIGNyZWF0ZWQgYSBzeXpfYWNwaV8uLi4gc3lzdGVtIGNhbGw/IE5vLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHdpdGggc3l6a2FsbGVyJiMzOTtzIEFDUEkgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfYWNwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjMyCgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDExNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBjb2RlIGNoYW5nZXMgc2VlbSByZWxhdGVkIHRvIGBjb25maWdmc2AsIGJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQgU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGdlbmVyYXRlIHZhbGlkIEFDUEkgdGFibGVzIHRvIHJlYWNoIGl0LiBUaGF0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIEFscmlnaHQsIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlLiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBhbGwgdGllZCB0byB0aGUgUENDIGNoYW5uZWwsIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIFBDQ1QgQUNQSSB0YWJsZS4gUUVNVSwgYXMgSSBrbm93LCBkb2VzbiYjMzk7dCBwcm92aWRlIHRoaXMgdGFibGUgYnkgZGVmYXVsdCwgYW5kIFN5emthbGxlciBjYW4mIzM5O3QgaW5qZWN0IGl0LiBTbywgdGhhdCYjMzk7cyBhbHJlYWR5IGEgc2lnbmlmaWNhbnQgaHVyZGxlLgoKSSBkb3VibGUtY2hlY2tlZCB0byBzZWUgaWYgUUVNVSBwcm92aWRlcyB0aGUgUENDVCB0YWJsZSBpbiBhbnkgc3BlY2lmaWMgZW11bGF0aW9uIHNjZW5hcmlvLiBOb3BlLiBJdCYjMzk7cyBub3Qgc3RhbmRhcmQuIENvdWxkIGBtY3RwLXBjY2AgYmUgZnV6emVkIGluIHNvbWUgcm91bmRhYm91dCB3YXk/IElmIEkgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIFN5emthbGxlciAqY291bGQqIHRyeSwgYnV0IGl0JiMzOTtzIGp1c3QgZ29pbmcgdG8gd2FzdGUgdGltZSBzaW5jZSBpdCB3b24mIzM5O3QgYWN0dWFsbHkgYmUgYWJsZSB0byByZWFjaCBhbnkgb2YgdGhlIGNvZGUuCgpOb3cgSSByZW1lbWJlciB0aGUgcHJvbXB0OiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGhhdCYjMzk7cyBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBpcyBhbiBBQ1BJIGRyaXZlciBmb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSAoTUNUUCBvdmVyIFBDQyksIGFuZCBpdCByZWxpZXMgb24gQUNQSSB0YWJsZXMgdGhhdCBzaW1wbHkgYXJlbiYjMzk7dCBwcmVzZW50LiBJdCBpcyBzaW1wbHkgdW5yZWFjaGFibGUuCgpJIGxvb2tlZCBmb3IgYWx0ZXJuYXRpdmVzLiBJcyB0aGVyZSBhIGBuZXRkZXZgIGVudHJ5IHBvaW50PyBUaGVyZSYjMzk7cyBgbWN0cF9wY2NfdHhgLCBidXQgdGhhdCBvbmx5IGhhcHBlbnMgaWYgYSBuZXRkZXYgaXMgY3JlYXRlZCwgYW5kIHRoZSBuZXRkZXYgaXMgb25seSBjcmVhdGVkIGluIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4gVGhhdCwgaW4gdHVybiwgaXMgYW4gQUNQSSBwcm9iZSBmdW5jdGlvbi4gU28gdGhhdCYjMzk7cyBhbHNvIGdvaW5nIHRvIGZhaWwuIFRoYXQgZHJpdmVyLCBhbG9uZyB3aXRoIG90aGVyIGVudHJ5IHBvaW50cywgaXMgbmV2ZXIgZ29pbmcgdG8gcnVuIHdpdGhvdXQgdGhlIFBDQ1QgYW5kIERNVDAwMDEuCgpUaW1lIHRvIHJldmlldyB0aGUgcHJvbXB0IGFnYWluOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBQZXJmZWN0LiBUaGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4KCkxldCBtZSBjb25maXJtIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBwY2NfbWJveF9wcm9iZWAgdXNpbmcgc29tZSBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24uIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmVkIHRocm91Z2ggYSBwbGF0Zm9ybSBkcml2ZXIsIGJ1dCBpdCBjaGVja3MgZm9yIEFDUEkgdGFibGVzIGZpcnN0IGJlZm9yZSBjcmVhdGluZyB0aGUgcGxhdGZvcm0gZGV2aWNlLiBUaGUgQUNQSSB0YWJsZSBpcyBub3QgcHJlc2VudC4gQW5kIGBtY3RwX3BjY19kcml2ZXJgLCBpcyBhbiBBQ1BJIGRyaXZlciwgc28gaXMgcHJvYmVkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbS4gU2luY2UgUUVNVSYjMzk7cyBBQ1BJIHRhYmxlcyBkbyBub3QgY29udGFpbiB0aGUgYERNVDAwMDFgIEhJRCwgaXQgd29uJiMzOTt0IGJlIHByb2JlZCBlaXRoZXIuCgpDb25jbHVzaW9uOiB0aGUgd2hvbGUgcGF0Y2ggaXMgZGVhZCBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCkkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgZ2l2ZW4gdGhlIGN1cnJlbnQgQUNQSSB0YWJsZSBjb25maWd1cmF0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBNQ1RQIG92ZXIgUENDIGRyaXZlciBhbmQgbW9kaWZpZXMgdGhlIFBDQyBtYWlsYm94IGRyaXZlci4gQm90aCByZXF1aXJlIHNwZWNpZmljIEFDUEkgdGFibGVzIChQQ0NUIGFuZCBhIGRldmljZSB3aXRoIEhJRCBETVQwMDAxKSB0byBiZSBwcmVzZW50IGluIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlc2UgQUNQSSB0YWJsZXMgYXJlIG5vdCBwcm92aWRlZCBieSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluamVjdGVkIGJ5IHN5emthbGxlciwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDoxMC44NjU3ODk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzA5NDkwMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjEwLjg2NTc5NjM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ0NDEzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZjc4YmQ4MmIwMTBlMmZmZTAwODU1ZGQ4YzViNWY1MjE2MGNlMDgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjAwOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA2OTQwYWEzZDQ5OGI5OS4uOWY0OGRlZTBmNGM2ZGMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNTU4Miw2ICsxNTU4MiwxMSBAQCBGOlxcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxcbiBGOlxcdGluY2x1ZGUvbmV0L25ldG5zL21jdHAuaFxcbiBGOlxcdG5ldC9tY3RwL1xcbiBcXG4rTUFOQUdFTUVOVCBDT01QT05FTlQgVFJBTlNQT1JUIFBST1RPQ09MIChNQ1RQKSBvdmVyIFBDQyAoTUNUUC1QQ0MpIERyaXZlclxcbitNOlxcdEFkYW0gWW91bmcgXFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXFx1MDAzZVxcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG4rXFxuIE1BUExFIFRSRUVcXG4gTTpcXHRMaWFtIFIuIEhvd2xldHQgXFx1MDAzY2xpYW1AaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gUjpcXHRBbGljZSBSeWhsIFxcdTAwM2NhbGljZXJ5aGxAZ29vZ2xlLmNvbVxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L3BjYy5jIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jXFxuaW5kZXggNjM2ODc5YWUxZGI3NmIuLmRiZmU4ZGQ5MmRkZDI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xcbisrKyBiL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xcbkBAIC0yNzAsNiArMjcwLDkgQEAgc3RhdGljIGludCBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIoc3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuKVxcbiBcXHR1NjQgdmFsO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKHBjaGFuLVxcdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWQoXFx1MDAyNnBjaGFuLVxcdTAwM2VlcnJvciwgXFx1MDAyNnZhbCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTMxNCw2ICszMTcsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuIHtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gcDtcXG4rXFx0aW50IHJjO1xcbiBcXG4gXFx0cGNoYW4gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4gXFxuQEAgLTMyMSwxNCArMzI1LDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4gXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbiBcXG4gXFx0aWYgKHBjaGFuLVxcdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhcGNoYW4tXFx1MDAzZWNoYW5faW5fdXNlKVxcbitcXHQgICAgIVJFQURfT05DRShwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UpKVxcbiBcXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuIFxcbiBcXHRpZiAoIXBjY19tYm94X2NtZF9jb21wbGV0ZV9jaGVjayhwY2hhbikpXFxuIFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4gXFxuLVxcdGlmIChwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pKVxcbi1cXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuK1xcdHJjID0gcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFyIHRoaXMgZmxhZyBhZnRlciB1cGRhdGluZyBpbnRlcnJ1cHQgYWNrIHJlZ2lzdGVyIGFuZCBqdXN0XFxuQEAgLTMzNiwxNSArMzM5LDYwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4gXFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xcbiBcXHQgKiByZXF1aXJlZCB0byBhdm9pZCBhbnkgcG9zc2libGUgcmFjZSBpbiB1cGRhdGF0aW9uIG9mIHRoaXMgZmxhZy5cXG4gXFx0ICovXFxuLVxcdHBjaGFuLVxcdTAwM2VjaGFuX2luX3VzZSA9IGZhbHNlO1xcbi1cXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcXG4tXFx0bWJveF9jaGFuX3R4ZG9uZShjaGFuLCAwKTtcXG4rXFx0V1JJVEVfT05DRShwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UsIGZhbHNlKTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0bWJveF9jaGFuX3JlY2VpdmVkX2RhdGEoY2hhbiwgTlVMTCk7XFxuK1xcdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgcmMpO1xcbiBcXG4gXFx0cGNjX2NoYW5fYWNrbm93bGVkZ2UocGNoYW4pO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbisvKipcXG4rICogcGNjX21ib3hfcXVlcnlfY2hhbm5lbCAtIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5uZWxcXG4rICogICAgICAgICAgICAgIHdpdGhvdXQgYWN0aXZhdGluZyB0aGUgY2hhbm5lbC5cXG4rICpcXG4rICogQHFfY2hhbjogYSBwb2ludGVyIHRvIGFuIGFscmVhZHkgYWxsb2NhdGVkIHN0cnVjdCBwY2NfbWJveF9jaGFuXFxuKyAqICAgICAgICAgICAgICB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIGNoYW5uZWwgZGF0YS5cXG4rICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudFxcbisgKiAgICAgIEFDUEkgcGFja2FnZS4gVGhpcyBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgYXJyYXkgb2YgUENDXFxuKyAqICAgICAgc3Vic3BhY2VzIGFzIHBhcnNlZCBieSB0aGUgUENDIE1haWxib3ggY29udHJvbGxlci5cXG4rICpcXG4rICogUmV0dXJuOiAwIHVwb24gc3VjY2VzcyBvciBub24temVybyB1cG9uIGVycm9yLlxcbisgKi9cXG4raW50XFxuK3BjY19tYm94X3F1ZXJ5X2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKnFfY2hhbiwgaW50IHN1YnNwYWNlX2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XFxuK1xcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcXG4rXFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghcV9jaGFuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChzdWJzcGFjZV9pZCBcXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXFx1MDAzZT0gcGNjX2NoYW5fY291bnQpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRwY2hhbiA9IGNoYW5faW5mbyArIHN1YnNwYWNlX2lkO1xcbitcXHRjaGFuID0gcGNoYW4tXFx1MDAzZWNoYW4ubWNoYW47XFxuK1xcdGlmIChJU19FUlIoY2hhbikpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJDaGFubmVsIG5vdCBmb3VuZCBmb3IgaWR4OiAlZFxcXFxuXFxcIiwgc3Vic3BhY2VfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHR9XFxuK1xcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFxuK1xcdHFfY2hhbi1cXHUwMDNlc2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9iYXNlX2FkZHI7XFxuK1xcdHFfY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbitcXHRxX2NoYW4tXFx1MDAzZXNobWVtX3NpemUgPSBwY2NfbWNoYW4tXFx1MDAzZXNobWVtX3NpemU7XFxuK1xcdHFfY2hhbi1cXHUwMDNlbGF0ZW5jeSA9IHBjY19tY2hhbi1cXHUwMDNlbGF0ZW5jeTtcXG4rXFx0cV9jaGFuLVxcdTAwM2VtYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tXFx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcXG4rXFx0cV9jaGFuLVxcdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lID0gcGNjX21jaGFuLVxcdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xcbitcXHRxX2NoYW4tXFx1MDAzZXR5cGUgPSBwY2NfbWNoYW4tXFx1MDAzZXR5cGU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9xdWVyeV9jaGFubmVsKTtcXG4rXFxuIC8qKlxcbiAgKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cXG4gICpcXHRcXHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxcbkBAIC0zNjAsNyArNDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxcbiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuIHtcXG4tXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuO1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xcbiBcXHRpbnQgcmM7XFxuQEAgLTM3NSwyMCArNDIyLDEwIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XFxuIFxcdH1cXG4gXFxuLVxcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4tXFx0cGNjX21jaGFuLVxcdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXFx1MDAzZXNobWVtX2Jhc2VfYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9zaXplKTtcXG4tXFx0aWYgKCFwY2NfbWNoYW4tXFx1MDAzZXNobWVtKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbi1cXG4gXFx0cmMgPSBtYm94X2JpbmRfY2xpZW50KGNoYW4sIGNsKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGlvdW5tYXAocGNjX21jaGFuLVxcdTAwM2VzaG1lbSk7XFxuLVxcdFxcdHBjY19tY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBwY2NfbWNoYW47XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcXG4rXFx0cmV0dXJuICBcXHUwMDI2cGNoYW4tXFx1MDAzZWNoYW47XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcXG4gXFxuQEAgLTQwMCwxOSArNDM3LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuICAqL1xcbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXFxuIHtcXG4tXFx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVxcdTAwM2VtY2hhbjtcXG4tXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XFxuLVxcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWJveF9jaGFuO1xcbitcXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xcbiBcXG4rXFx0aWYgKCFwY2hhbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRjaGFuID0gcGNoYW4tXFx1MDAzZW1jaGFuO1xcbiBcXHRpZiAoIWNoYW4gfHwgIWNoYW4tXFx1MDAzZWNsKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdHBjaGFuX2luZm8gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4tXFx0cGNjX21ib3hfY2hhbiA9IFxcdTAwMjZwY2hhbl9pbmZvLVxcdTAwM2VjaGFuO1xcbi1cXHRpZiAocGNjX21ib3hfY2hhbi1cXHUwMDNlc2htZW0pIHtcXG4tXFx0XFx0aW91bm1hcChwY2NfbWJveF9jaGFuLVxcdTAwM2VzaG1lbSk7XFxuLVxcdFxcdHBjY19tYm94X2NoYW4tXFx1MDAzZXNobWVtID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gXFx0bWJveF9mcmVlX2NoYW5uZWwoY2hhbik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfZnJlZV9jaGFubmVsKTtcXG5AQCAtNDQwLDcgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKFxcdTAwMjZwY2hhbi1cXHUwMDNlZGIpO1xcbiBcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwY2hhbi1cXHUwMDNlcGxhdF9pcnEgXFx1MDAzZSAwKVxcbi1cXHRcXHRwY2hhbi1cXHUwMDNlY2hhbl9pbl91c2UgPSB0cnVlO1xcbitcXHRcXHRXUklURV9PTkNFKHBjaGFuLVxcdTAwM2VjaGFuX2luX3VzZSwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ2Miw5ICs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbiBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXFxuIHtcXG4gXFx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuID0gY2hhbi1cXHUwMDNlY29uX3ByaXY7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XFxuIFxcdGludCByYztcXG4gXFxuK1xcdHBjY19tY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0cGNjX21jaGFuLVxcdTAwM2VzaG1lbSA9IGFjcGlfb3NfaW9yZW1hcChwY2NfbWNoYW4tXFx1MDAzZXNobWVtX2Jhc2VfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGNjX21jaGFuLVxcdTAwM2VzaG1lbV9zaXplKTtcXG4rXFx0aWYgKHBjY19tY2hhbi1cXHUwMDNlc2htZW0gID09IE5VTEwpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHQvKlxcbiBcXHQgKiBDbGVhciBhbmQgYWNrbm93bGVkZ2UgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBvbiByZXNwb25kZXIgY2hhbm5lbFxcbiBcXHQgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdFxcbkBAIC00NzksNiArNTE2LDggQEAgc3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbiBcXHRcXHRpZiAodW5saWtlbHkocmMpKSB7XFxuIFxcdFxcdFxcdGRldl9lcnIoY2hhbi1cXHUwMDNlbWJveC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHBjaGFuLVxcdTAwM2VwbGF0X2lycSk7XFxuK1xcdFxcdFxcdGlvdW5tYXAocGNjX21jaGFuLVxcdTAwM2VzaG1lbSk7XFxuK1xcdFxcdFxcdHBjY19tY2hhbi1cXHUwMDNlc2htZW0gPSBOVUxMO1xcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC00ODgsMTUgKzUyNywyMyBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXFxuIFxcbiAvKipcXG4gICogcGNjX3NodXRkb3duIC0gQ2FsbGVkIGZyb20gTWFpbGJveCBDb250cm9sbGVyIGNvZGUuIFVzZWQgaGVyZVxcbi0gKlxcdFxcdHRvIGZyZWUgdGhlIGludGVycnVwdC5cXG4rICpcXHRcXHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQgYW5kIHVubWFwIHRoZSBzaGFyZWQgbWVtb3J5LlxcbiAgKiBAY2hhbjogUG9pbnRlciB0byBNYWlsYm94IGNoYW5uZWwgdG8gc2h1dGRvd24uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBwY2Nfc2h1dGRvd24oc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVxcdTAwM2Vjb25fcHJpdjtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XFxuIFxcbiBcXHRpZiAocGNoYW4tXFx1MDAzZXBsYXRfaXJxIFxcdTAwM2UgMClcXG4gXFx0XFx0ZGV2bV9mcmVlX2lycShjaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXYsIHBjaGFuLVxcdTAwM2VwbGF0X2lycSwgY2hhbik7XFxuK1xcdHN5bmNocm9uaXplX2lycShwY2hhbi1cXHUwMDNlcGxhdF9pcnEpO1xcbitcXG4rXFx0cGNjX21ib3hfY2hhbiA9IFxcdTAwMjZwY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0aWYgKHBjY19tYm94X2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdGlvdW5tYXAocGNjX21ib3hfY2hhbi1cXHUwMDNlc2htZW0pO1xcbitcXHRcXHRwY2NfbWJveF9jaGFuLVxcdTAwM2VzaG1lbSA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtYm94X2NoYW5fb3BzIHBjY19jaGFuX29wcyA9IHtcXG5AQCAtODMxLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0cGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTtcXG4gXFxuIFxcdFxcdHBjaGFuLVxcdTAwM2V0eXBlID0gcGNjdF9lbnRyeS1cXHUwMDNldHlwZTtcXG4rXFx0XFx0cGNoYW4tXFx1MDAzZWNoYW4udHlwZSA9IHBjY3RfZW50cnktXFx1MDAzZXR5cGU7XFxuIFxcdFxcdHBjY3RfZW50cnkgPSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICopXFxuIFxcdFxcdFxcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSArIHBjY3RfZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM5YjhmMzhmZjBmYjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xcbkBAIC00Nyw2ICs0NywyMSBAQCBjb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuIFxcdCAgQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzIGNyZWF0ZWQgZm9yIGVhY2ggSTNDIGJ1c1xcbiBcXHQgIGhhdmluZyBhIFxcXCJtY3RwLWNvbnRyb2xsZXJcXFwiIGRldmljZXRyZWUgcHJvcGVydHkuXFxuIFxcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDXFxuK1xcdHRyaXN0YXRlIFxcXCJNQ1RQIFBDQyB0cmFuc3BvcnRcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSVxcbitcXHRkZXBlbmRzIG9uIFBDQ1xcbitcXHRkZXBlbmRzIG9uIENQVV9MSVRUTEVfRU5ESUFOXFxuK1xcdGhlbHBcXG4rXFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgUENDIHRyYW5zcG9ydCxcXG4rXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCB2aWEgQUNQSSBmb3IgZWFjaFxcbitcXHQgIGVudHJ5IGluIHRoZSBEU0RUL1NTRFQgdGhhdCBtYXRjaGVzIHRoZSBpZGVudGlmaWVyLiBUaGUgUGxhdGZvcm1cXG4rXFx0ICBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBzZWxlY3RlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nXFxuK1xcdCAgZW50cmllcyBpbiB0aGUgUENDVC5cXG4rXFxuK1xcdCAgU2F5IHkgaGVyZSBpZiB5b3UgbmVlZCB0byBjb25uZWN0IHRvIE1DVFAgZW5kcG9pbnRzIG92ZXIgUENDLiBUb1xcbitcXHQgIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHVzZSBtOyB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdHAtcGNjLlxcbitcXG4gY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiBcXHR0cmlzdGF0ZSBcXFwiTUNUUCBVU0IgdHJhbnNwb3J0XFxcIlxcbiBcXHRkZXBlbmRzIG9uIFVTQlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxcbmluZGV4IGMzNjAwNjg0OWExZTdkLi4wYTU5MTI5OWZmYTkyZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICs9IG1jdHAtc2VyaWFsLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kyQykgKz0gbWN0cC1pMmMub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSArPSBtY3RwLWkzYy5vXFxuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICs9IG1jdHAtcGNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2M0ZjNiMjE1MTM3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcXG5AQCAtMCwwICsxLDQ2NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBtY3RwLXBjYy5jIC0gRHJpdmVyIGZvciBNQ1RQIG92ZXIgUENDLlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiwgQW1wZXJlIENvbXB1dGluZyBMTENcXG4rICpcXG4rICovXFxuK1xcbisvKiBJbXBsZW1lbnRhdGlvbiBvZlxcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI5Mi5wZGZcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaHJ0aW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvYWNwaV9idXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvYWNwaV9kcml2ZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL2FjcmVzdHlwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL2FjdGJsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21jdHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFICAgICAgICAgIFxcXCJNQ1RQXFxcIlxcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCAgIChzaXplb2YoTUNUUF9TSUdOQVRVUkUpIC0gMSlcXG4rI2RlZmluZSBNQ1RQX01JTl9NVFUgICAgICAgICAgICA2OFxcbisjZGVmaW5lIFBDQ19IRUFERVJfU0laRSAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSlcXG4rI2RlZmluZSBNQ1RQX1BDQ19NSU5fU0laRSAgICAgICAoUENDX0hFQURFUl9TSVpFICsgTUNUUF9NSU5fTVRVKVxcbisjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcXG4rc3RydWN0IG1jdHBfcGNjX21haWxib3gge1xcbitcXHR1MzIgaW5kZXg7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgbWJveF9jbGllbnQgY2xpZW50O1xcbit9O1xcbitcXG4rLyogVGhlIG5ldGRldiBzdHJ1Y3R1cmUuIE9uZSBvZiB0aGVzZSBwZXIgUENDIGFkYXB0ZXIuICovXFxuK3N0cnVjdCBtY3RwX3BjY19uZGV2IHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IGluYm94O1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBvdXRib3g7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2soc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNzZylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSBwY2NfaGVhZGVyO1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xcbitcXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2l6ZTtcXG4rXFxuK1xcdG1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoY2wsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBpbmJveC5jbGllbnQpO1xcbitcXHRpbmJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveDtcXG4rXFx0bWVtY3B5X2Zyb21pbyhcXHUwMDI2cGNjX2hlYWRlciwgaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtLCBzaXplb2YocGNjX2hlYWRlcikpO1xcbitcXG4rXFx0Ly8gVGhlIG1lc3NhZ2UgbXVzdCBhdCBsZWFzdCBoYXZlIHRoZSBQQ0MgY29tbWFuZCBpbmRpY2F0aW5nIGl0IGlzIGFuIE1DVFBcXG4rXFx0Ly8gbWVzc2FnZSBmb2xsb3dlZCBieSB0aGUgTUNUUCBoZWFkZXIsIG9yIHdlIGhhdmUgYSBtYWxmb3JtZWQgbWVzc2FnZS5cXG4rXFx0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKHBjY19oZWFkZXIuY29tbWFuZCkgKyBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdC8vIElmIHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBzaGFyZWQgbWVtb3J5IG1pbnVzIGhlYWRlcnMsXFxuK1xcdC8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS5cXG4rXFx0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFxcdTAwM2UgaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtX3NpemUgLSBQQ0NfRVhUUkFfTEVOKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0aWYgKG1lbWNtcChcXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICsgUENDX0VYVFJBX0xFTjtcXG4rXFx0c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3BjY19uZGV2LVxcdTAwM2VuZGV2LCBzaXplKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcbitcXHRza2JfcHV0KHNrYiwgc2l6ZSk7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcXG4rXFx0bWVtY3B5X2Zyb21pbyhza2ItXFx1MDAzZWRhdGEsIGluYm94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbSwgc2l6ZSk7XFxuK1xcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYsIHNpemUpO1xcbitcXHRza2JfcHVsbChza2IsIHNpemVvZihwY2NfaGVhZGVyKSk7XFxuK1xcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuK1xcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbitcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbitcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbitcXHRuZXRpZl9yeChza2IpO1xcbitcXHRyZXR1cm47XFxuK1xcbitlcnJvcjpcXG4rXFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptcG5kID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdHBjY19oZWFkZXIgPSBza2JfcHVzaChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpO1xcbitcXHRwY2NfaGVhZGVyLVxcdTAwM2VzaWduYXR1cmUgPSBQQ0NfU0lHTkFUVVJFIHwgbXBuZC1cXHUwMDNlb3V0Ym94LmluZGV4O1xcbitcXHRwY2NfaGVhZGVyLVxcdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XFxuK1xcdG1lbWNweShcXHUwMDI2cGNjX2hlYWRlci1cXHUwMDNlY29tbWFuZCwgTUNUUF9TSUdOQVRVUkUsIE1DVFBfU0lHTkFUVVJFX0xFTkdUSCk7XFxuK1xcdHBjY19oZWFkZXItXFx1MDAzZWxlbmd0aCA9IGxlbiArIE1DVFBfU0lHTkFUVVJFX0xFTkdUSDtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIG1wbmQtXFx1MDAzZW91dGJveC5jaGFuLVxcdTAwM2VzaG1lbV9zaXplKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBtYWlsYm94IGNhbiBiZSBjbGVhcmVkIG9uXFxuK1xcdCAqIGFub3RoZXIgdGhyZWFkLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQgd2UgZG9uJ3QgcmVzdGFydFxcbitcXHQgKiB0aGUgcXVldWUsIGl0IHdpbGwgcmVtYWluIHBlcm1hbmVudGx5IHN0b3BwZWQuXFxuK1xcdCAqIFN0b3BwaW5nIHRoZSBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIHRoZSBtZXNzYWdlXFxuK1xcdCAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy5cXG4rXFx0ICovXFxuK1xcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XFxuK1xcdGlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLVxcdTAwM2VvdXRib3guY2hhbi1cXHUwMDNlbWNoYW4sIHNrYikgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvLyBSZW1vdmUgdGhlIGhlYWRlciBpbiBjYXNlIGl0IGdldHMgc2VudCBhZ2FpblxcbitcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcGNjX2hlYWRlcikpO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFxuK2Vycm9yOlxcbitcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbitcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY190eF9wcmVwYXJlKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zc2cpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3g7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xcbitcXHRvdXRib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94O1xcbitcXG4rXFx0LyogVGhlIFBDQyBNYWlsYm94IHR5cGljYWxseSBkb2VzIG5vdCBtYWtlIHVzZSBvZiB0aGUgbXNzZyBwb2ludGVyXFxuK1xcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxcbitcXHQgKiBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgbm9uLW51bGw7IGl0IGlzIHBvc3NpYmxlXFxuK1xcdCAqIHRoYXQgYSBjaGFuZ2UgaW4gdGhlIE1haWxib3ggbGV2ZWwgd2lsbCBicmVhayB0aGF0IGFzc3VtcHRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNrYikge1xcbitcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXMgY2FsbGVkIHdpdGggbnVsbCBtZXNzYWdlLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bWVtY3B5X3RvaW8ob3V0Ym94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbSwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfcGNjX3R4X2RvbmUoc3RydWN0IG1ib3hfY2xpZW50ICpjLCB2b2lkICptc3NnLCBpbnQgcmMpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbXNzZztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZXJlIGlzIGEgcGFja2V0IGluIGZsaWdodCBkdXJpbmcgZHJpdmVyIGNsZWFudXBcXG4rXFx0ICogSXQgbWF5IGhhdmUgYmVlbiBmcmVlZCBhbHJlYWR5LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtc3NnKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdG1jdHBfcGNjX25kZXYgPSBjb250YWluZXJfb2YoYywgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xcbitcXG4rXFx0LyogVXNlIGFuIElSUSBzYWZlIHVwZGF0ZSBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIEhBUkQgSVJRIGluc3RlYWQgb2ZcXG4rXFx0ICogZGV2X2RzdGF0c190eF9hZGQobWN0cF9wY2NfbmRldi1cXHUwMDNlbmRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHQgKi9cXG4rXFx0ZHN0YXRzID0gdGhpc19jcHVfcHRyKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR1NjRfc3RhdHNfaW5jKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXR4X2Ryb3BzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzKTtcXG4rXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHR9XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xcbitcXHRuZXRpZl93YWtlX3F1ZXVlKG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveCwgKmluYm94O1xcbitcXG4rXFx0b3V0Ym94ID0gXFx1MDAyNm1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveDtcXG4rXFx0aW5ib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlaW5ib3g7XFxuK1xcbitcXHRvdXRib3gtXFx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNm91dGJveC1cXHUwMDNlY2xpZW50LCBvdXRib3gtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKElTX0VSUihvdXRib3gtXFx1MDAzZWNoYW4pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihvdXRib3gtXFx1MDAzZWNoYW4pO1xcbitcXHRpZiAob3V0Ym94LVxcdTAwM2VjaGFuLVxcdTAwM2VzaG1lbV9zaXplIFxcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cXHUwMDNlY2hhbik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpbmJveC1cXHUwMDNlY2xpZW50LnJ4X2NhbGxiYWNrID0gbWN0cF9wY2NfY2xpZW50X3J4X2NhbGxiYWNrO1xcbitcXHRpbmJveC1cXHUwMDNlY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2aW5ib3gtXFx1MDAzZWNsaWVudCwgaW5ib3gtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKElTX0VSUihpbmJveC1cXHUwMDNlY2hhbikpIHtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cXHUwMDNlY2hhbik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGluYm94LVxcdTAwM2VjaGFuKTtcXG4rXFx0fVxcbitcXHRpZiAoaW5ib3gtXFx1MDAzZWNoYW4tXFx1MDAzZXNobWVtX3NpemUgXFx1MDAzYyBNQ1RQX1BDQ19NSU5fU0laRSkge1xcbitcXHRcXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKGluYm94LVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF9wY2Nfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0dW5zaWduZWQgaW50IGNvdW50LCBpZHg7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3guY2hhbi1cXHUwMDNlbWNoYW47XFxuK1xcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveC5jaGFuKTtcXG4rXFx0bWN0cF9wY2NfbmRldi1cXHUwMDNlaW5ib3guY2hhbiA9IE5VTEw7XFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcXHUwMDI2Y2hhbi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAoY2hhbi1cXHUwMDNlYWN0aXZlX3JlcSAhPSAgTUJPWF9OT19NU0cpIHtcXG4rXFx0XFx0XFx0c2tiID0gY2hhbi1cXHUwMDNlYWN0aXZlX3JlcTtcXG4rXFx0XFx0XFx0Y2hhbi1cXHUwMDNlYWN0aXZlX3JlcSA9IE1CT1hfTk9fTVNHO1xcbitcXHRcXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XFxuK1xcdFxcdFxcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHR3aGlsZSAoY2hhbi1cXHUwMDNlbXNnX2NvdW50IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRjb3VudCA9IGNoYW4tXFx1MDAzZW1zZ19jb3VudDtcXG4rXFx0XFx0XFx0aWR4ID0gY2hhbi1cXHUwMDNlbXNnX2ZyZWU7XFxuK1xcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdFxcdGlkeCAtPSBjb3VudDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRpZHggKz0gTUJPWF9UWF9RVUVVRV9MRU4gLSBjb3VudDtcXG4rXFx0XFx0XFx0c2tiID0gY2hhbi1cXHUwMDNlbXNnX2RhdGFbaWR4XTtcXG4rXFx0XFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5kZXYpO1xcbitcXHRcXHRcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdFxcdGNoYW4tXFx1MDAzZW1zZ19jb3VudC0tO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jaGFuKTtcXG4rXFx0bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94LmNoYW4gPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgYmVjYXVzZSB0aGUgcmluZyBidWZmZXIgd2FzIGZ1bGxcXG4rXFx0ICogd2UgY2FuIHJlc3RhcnQgaXQgaGVyZSBhcyB3ZSBub3cga25vdyB0aGUgcmluZyBidWZmZXIgaGFzXFxuK1xcdCAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZVxcbitcXHQgKiBuZXRkZXYgaXMgcmUtb3BlbmVkLlxcbitcXHQgKi9cXG4rXFx0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVxcdTAwM2VuZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcXG4rXFx0Lm5kb19vcGVuID0gbWN0cF9wY2Nfb3BlbixcXG4rXFx0Lm5kb19zdG9wID0gbWN0cF9wY2Nfc3RvcCxcXG4rXFx0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRuZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX01DVFA7XFxuK1xcdG5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7XFxuK1xcdG5kZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xcbitcXHRuZGV2LVxcdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcXG4rXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtY3RwX3BjY19uZXRkZXZfb3BzO1xcbitcXHRuZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdG5kZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XFxuK31cXG4rXFxuK3N0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCB7XFxuK1xcdGludCBpbmRleDtcXG4rXFx0dTMyIGluYm94X2luZGV4O1xcbitcXHR1MzIgb3V0Ym94X2luZGV4O1xcbit9O1xcbitcXG4rc3RhdGljIGFjcGlfc3RhdHVzIGxvb2t1cF9wY2N0X2luZGljZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2b2lkICpjb250ZXh0KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19sb29rdXBfY29udGV4dCAqbHVjID0gY29udGV4dDtcXG4rXFx0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xcbitcXG4rXFx0aWYgKGFyZXMtXFx1MDAzZXR5cGUgIT0gQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMilcXG4rXFx0XFx0cmV0dXJuIEFFX09LO1xcbitcXG4rXFx0YWRkciA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyLCBcXHUwMDI2YXJlcy1cXHUwMDNlZGF0YSk7XFxuK1xcdHN3aXRjaCAobHVjLVxcdTAwM2VpbmRleCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGx1Yy1cXHUwMDNlb3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdGx1Yy1cXHUwMDNlaW5ib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBRV9FUlJPUjtcXG4rXFx0fVxcbitcXHRsdWMtXFx1MDAzZWluZGV4Kys7XFxuK1xcdHJldHVybiBBRV9PSztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcXG4rXFxuK1xcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF90eXBlcyhzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqaW5ib3g7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuIGNoYW47XFxuK1xcdGludCBhY3R1YWxfdHlwZTtcXG4rXFxuK1xcdG91dGJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3g7XFxuK1xcdGlmIChwY2NfbWJveF9xdWVyeV9jaGFubmVsKFxcdTAwMjZjaGFuLCBvdXRib3gtXFx1MDAzZWluZGV4KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xcbitcXHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19NQVNURVJfU1VCU1BBQ0UpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFxcXCIsIGFjdHVhbF90eXBlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGluYm94ID0gXFx1MDAyNm1jdHBfcGNjX25kZXYtXFx1MDAzZWluYm94O1xcbitcXHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcXHUwMDI2Y2hhbiwgaW5ib3gtXFx1MDAzZWluZGV4KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xcbitcXHRpZiAoYWN0dWFsX3R5cGUgIT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19TTEFWRV9TVUJTUEFDRSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIk1DVFAtUENDIGluYm94IGNoYW5uZWwgd3JvbmcgdHlwZTogJWRcXFwiLCBhY3R1YWxfdHlwZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcXG4rXFx0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiBvdXRfY2hhbjtcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gaW5fY2hhbjtcXG4rXFx0aW50IG1jdHBfcGNjX21heF9tdHU7XFxuK1xcdGludCBpbmJveF9tYXhfbXR1O1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRvdXRib3ggPSBcXHUwMDI2bWN0cF9wY2NfbmRldi1cXHUwMDNlb3V0Ym94O1xcbitcXHRpZiAocGNjX21ib3hfcXVlcnlfY2hhbm5lbChcXHUwMDI2b3V0X2NoYW4sIG91dGJveC1cXHUwMDNlaW5kZXgpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXFx1MDAzYyBNQ1RQX01JTl9NVFUgKyBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xcbitcXHRpbmJveCA9IFxcdTAwMjZtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveDtcXG4rXFx0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXFx1MDAyNmluX2NoYW4sIGluYm94LVxcdTAwM2VpbmRleCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoaW5fY2hhbi5zaG1lbV9zaXplIFxcdTAwM2MgTUNUUF9NSU5fTVRVICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGluYm94X21heF9tdHUgPSBpbl9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xcbitcXG4rXFx0aWYgKGluYm94X21heF9tdHUgXFx1MDAzYyBtY3RwX3BjY19tYXhfbXR1KVxcbitcXHRcXHRtY3RwX3BjY19tYXhfbXR1ID0gaW5ib3hfbWF4X210dTtcXG4rXFxuK1xcdG5kZXYtXFx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcXG4rXFx0bmRldi1cXHUwMDNlbWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7XFxuK1xcdG5kZXYtXFx1MDAzZW1pbl9tdHUgPSBNQ1RQX01JTl9NVFU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtY3RwX3BjY19kcml2ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XFxuK1xcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2YWNwaV9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdGFjcGlfaGFuZGxlIGRldl9oYW5kbGU7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFx0Y2hhciBuYW1lWzMyXTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0ZGV2X2RiZyhkZXYsIFxcXCJBZGRpbmcgbWN0cF9wY2MgZGV2aWNlIGZvciBISUQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdGFjcGlfZGV2aWNlX2hpZChhY3BpX2RldikpO1xcbitcXHRkZXZfaGFuZGxlID0gYWNwaV9kZXZpY2VfaGFuZGxlKGFjcGlfZGV2KTtcXG4rXFx0c3RhdHVzID0gYWNwaV93YWxrX3Jlc291cmNlcyhkZXZfaGFuZGxlLCBcXFwiX0NSU1xcXCIsIGxvb2t1cF9wY2N0X2luZGljZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNvbnRleHQpO1xcbitcXHRpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRkFJTEVEIHRvIGxvb2t1cCBQQ0MgaW5kZXhlcyBmcm9tIENSU1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgd2UgaGF2ZSBleGFjdGx5IDIgY2hhbm5lbHM6IGFuIG91dGJveCBhbmQgYW4gaW5ib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoY29udGV4dC5pbmRleCAhPSAyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIm1jdHBwY2MlZFxcXCIsIGNvbnRleHQuaW5ib3hfaW5kZXgpO1xcbitcXHRuZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbWN0cF9wY2NfbmRldiksIG5hbWUsIE5FVF9OQU1FX1BSRURJQ1RBQkxFLFxcbitcXHRcXHRcXHQgICAgbWN0cF9wY2Nfc2V0dXApO1xcbitcXHRpZiAoIW5kZXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWN0cF9wY2NfbmRldiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRtY3RwX3BjY19uZGV2LVxcdTAwM2VpbmJveC5pbmRleCA9IGNvbnRleHQuaW5ib3hfaW5kZXg7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZWluYm94LmNsaWVudC5kZXYgPSBkZXY7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5pbmRleCA9IGNvbnRleHQub3V0Ym94X2luZGV4O1xcbitcXHRtY3RwX3BjY19uZGV2LVxcdTAwM2VvdXRib3guY2xpZW50LmRldiA9IGRldjtcXG4rXFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jbGllbnQudHhfcHJlcGFyZSA9IG1jdHBfcGNjX3R4X3ByZXBhcmU7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW91dGJveC5jbGllbnQudHhfZG9uZSA9IG1jdHBfcGNjX3R4X2RvbmU7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZWFjcGlfZGV2aWNlID0gYWNwaV9kZXY7XFxuK1xcdG1jdHBfcGNjX25kZXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbitcXHRhY3BpX2Rldi1cXHUwMDNlZHJpdmVyX2RhdGEgPSBtY3RwX3BjY19uZGV2O1xcbitcXHRyYyA9IGNoZWNrX2NoYW5uZWxfdHlwZXMobWN0cF9wY2NfbmRldik7XFxuK1xcdGlmIChyYyAhPSAwKVxcbitcXHRcXHRnb3RvIGZyZWVfbmV0ZGV2O1xcbitcXG4rXFx0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGZyZWVfbmV0ZGV2O1xcbitcXG4rXFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19QQ0MpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gZnJlZV9uZXRkZXY7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgbWN0cF9jbGVhbnVwX25ldGRldiwgbmRldik7XFxuK2ZyZWVfbmV0ZGV2OlxcbitcXHRmcmVlX25ldGRldihuZGV2KTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHtcXG4rXFx0eyBcXFwiRE1UMDAwMVxcXCIgfSxcXG4rXFx0e31cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgbWN0cF9wY2NfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJtY3RwX3BjY1xcXCIsXFxuK1xcdC5jbGFzcyA9IFxcXCJVbmtub3duXFxcIixcXG4rXFx0LmlkcyA9IG1jdHBfcGNjX2RldmljZV9pZHMsXFxuK1xcdC5vcHMgPSB7XFxuK1xcdFxcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxcbitcXHR9LFxcbit9O1xcbitcXG4rbW9kdWxlX2FjcGlfZHJpdmVyKG1jdHBfcGNjX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIG1jdHBfcGNjX2RldmljZV9pZHMpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNQ1RQIFBDQyBBQ1BJIGRldmljZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkFkYW0gWW91bmcgXFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXFx1MDAzZVxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGNjLmggYi9pbmNsdWRlL2FjcGkvcGNjLmhcXG5pbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hY3BpL3BjYy5oXFxuKysrIGIvaW5jbHVkZS9hY3BpL3BjYy5oXFxuQEAgLTgsNiArOCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFpbGJveF9jb250cm9sbGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xcbiBcXHRzdHJ1Y3QgbWJveF9jaGFuICptY2hhbjtcXG5AQCAtMTcsNiArMTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XFxuIFxcdHUzMiBsYXRlbmN5O1xcbiBcXHR1MzIgbWF4X2FjY2Vzc19yYXRlO1xcbiBcXHR1MTYgbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0ZW51bSBhY3BpX3BjY3RfdHlwZSB0eXBlO1xcbiB9O1xcbiBcXG4gLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFNoYXJlZCBNZW1vcnkgUmVnaW9uICovXFxuQEAgLTM3LDYgKzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xcbiBleHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcXG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcXG4rZXh0ZXJuIGludFxcbitwY2NfbWJveF9xdWVyeV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpxX2NoYW4sIGludCBzdWJzcGFjZV9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbkBAIC00NCw2ICs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbiBcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKSB7IH1cXG4rc3RhdGljIGlubGluZSBpbnRcXG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX1BDQ19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjExLjY4MDgxOTU4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0ODk0NDUyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmY3OGJkODJiMDEwZTJmZmUwMDg1NWRkOGM1YjVmNTIxNjBjZTA4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjAwOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjk0MGFhM2Q0OThiOTkuLjlmNDhkZWUwZjRjNmRjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTU1ODIsNiArMTU1ODIsMTEgQEAgRjpcdGluY2x1ZGUvbmV0L21jdHBkZXZpY2UuaFxuIEY6XHRpbmNsdWRlL25ldC9uZXRucy9tY3RwLmhcbiBGOlx0bmV0L21jdHAvXG4gXG4rTUFOQUdFTUVOVCBDT01QT05FTlQgVFJBTlNQT1JUIFBST1RPQ09MIChNQ1RQKSBvdmVyIFBDQyAoTUNUUC1QQ0MpIERyaXZlclxuK006XHRBZGFtIFlvdW5nIFx1MDAzY2FkbWl5b0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tXHUwMDNlXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG4rXG4gTUFQTEUgVFJFRVxuIE06XHRMaWFtIFIuIEhvd2xldHQgXHUwMDNjbGlhbUBpbmZyYWRlYWQub3JnXHUwMDNlXG4gUjpcdEFsaWNlIFJ5aGwgXHUwMDNjYWxpY2VyeWhsQGdvb2dsZS5jb21cdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21haWxib3gvcGNjLmMgYi9kcml2ZXJzL21haWxib3gvcGNjLmNcbmluZGV4IDYzNjg3OWFlMWRiNzZiLi5kYmZlOGRkOTJkZGQyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWFpbGJveC9wY2MuY1xuKysrIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jXG5AQCAtMjcwLDYgKzI3MCw5IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbilcbiBcdHU2NCB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHBjaGFuLVx1MDAzZXR5cGUgPT0gQUNQSV9QQ0NUX1RZUEVfRVhUX1BDQ19TTEFWRV9TVUJTUEFDRSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXQgPSBwY2NfY2hhbl9yZWdfcmVhZChcdTAwMjZwY2hhbi1cdTAwM2VlcnJvciwgXHUwMDI2dmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMzE0LDYgKzMxNyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47XG4gXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gcDtcbitcdGludCByYztcbiBcbiBcdHBjaGFuID0gY2hhbi1cdTAwM2Vjb25fcHJpdjtcbiBcbkBAIC0zMjEsMTQgKzMyNSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbiBcbiBcdGlmIChwY2hhbi1cdTAwM2V0eXBlID09IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfTUFTVEVSX1NVQlNQQUNFIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFwY2hhbi1cdTAwM2VjaGFuX2luX3VzZSlcbitcdCAgICAhUkVBRF9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlKSlcbiBcdFx0cmV0dXJuIElSUV9OT05FO1xuIFxuIFx0aWYgKCFwY2NfbWJveF9jbWRfY29tcGxldGVfY2hlY2socGNoYW4pKVxuIFx0XHRyZXR1cm4gSVJRX05PTkU7XG4gXG4tXHRpZiAocGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyKHBjaGFuKSlcbi1cdFx0cmV0dXJuIElSUV9OT05FO1xuK1x0cmMgPSBwY2NfbWJveF9lcnJvcl9jaGVja19hbmRfY2xlYXIocGNoYW4pO1xuIFxuIFx0LypcbiBcdCAqIENsZWFyIHRoaXMgZmxhZyBhZnRlciB1cGRhdGluZyBpbnRlcnJ1cHQgYWNrIHJlZ2lzdGVyIGFuZCBqdXN0XG5AQCAtMzM2LDE1ICszMzksNjAgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIFx0ICogd2hlcmUgdGhlIGZsYWcgaXMgc2V0IGFnYWluIHRvIHN0YXJ0IG5ldyB0cmFuc2Zlci4gVGhpcyBpc1xuIFx0ICogcmVxdWlyZWQgdG8gYXZvaWQgYW55IHBvc3NpYmxlIHJhY2UgaW4gdXBkYXRhdGlvbiBvZiB0aGlzIGZsYWcuXG4gXHQgKi9cbi1cdHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlID0gZmFsc2U7XG4tXHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbi1cdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7XG4rXHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCBmYWxzZSk7XG4rXHRpZiAoIXJjKVxuK1x0XHRtYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBOVUxMKTtcbitcdG1ib3hfY2hhbl90eGRvbmUoY2hhbiwgcmMpO1xuIFxuIFx0cGNjX2NoYW5fYWNrbm93bGVkZ2UocGNoYW4pO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbisvKipcbisgKiBwY2NfbWJveF9xdWVyeV9jaGFubmVsIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbFxuKyAqICAgICAgICAgICAgICB3aXRob3V0IGFjdGl2YXRpbmcgdGhlIGNoYW5uZWwuXG4rICpcbisgKiBAcV9jaGFuOiBhIHBvaW50ZXIgdG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RydWN0IHBjY19tYm94X2NoYW5cbisgKiAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjaGFubmVsIGRhdGEuXG4rICogQHN1YnNwYWNlX2lkOiBUaGUgUENDIFN1YnNwYWNlIGluZGV4IGFzIHBhcnNlZCBpbiB0aGUgUENDIGNsaWVudFxuKyAqICAgICAgQUNQSSBwYWNrYWdlLiBUaGlzIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBhcnJheSBvZiBQQ0NcbisgKiAgICAgIHN1YnNwYWNlcyBhcyBwYXJzZWQgYnkgdGhlIFBDQyBNYWlsYm94IGNvbnRyb2xsZXIuXG4rICpcbisgKiBSZXR1cm46IDAgdXBvbiBzdWNjZXNzIG9yIG5vbi16ZXJvIHVwb24gZXJyb3IuXG4rICovXG4raW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4re1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcbitcdHN0cnVjdCBwY2NfY2hhbl9pbmZvICpwY2hhbjtcbitcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIXFfY2hhbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoc3Vic3BhY2VfaWQgXHUwMDNjIDAgfHwgc3Vic3BhY2VfaWQgXHUwMDNlPSBwY2NfY2hhbl9jb3VudClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRwY2hhbiA9IGNoYW5faW5mbyArIHN1YnNwYWNlX2lkO1xuK1x0Y2hhbiA9IHBjaGFuLVx1MDAzZWNoYW4ubWNoYW47XG4rXHRpZiAoSVNfRVJSKGNoYW4pKSB7XG4rXHRcdHByX2VycihcIkNoYW5uZWwgbm90IGZvdW5kIGZvciBpZHg6ICVkXFxuXCIsIHN1YnNwYWNlX2lkKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcdHBjY19tY2hhbiA9IFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4rXG4rXHRxX2NoYW4tXHUwMDNlc2htZW1fYmFzZV9hZGRyID0gcGNjX21jaGFuLVx1MDAzZXNobWVtX2Jhc2VfYWRkcjtcbitcdHFfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4rXHRxX2NoYW4tXHUwMDNlc2htZW1fc2l6ZSA9IHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplO1xuK1x0cV9jaGFuLVx1MDAzZWxhdGVuY3kgPSBwY2NfbWNoYW4tXHUwMDNlbGF0ZW5jeTtcbitcdHFfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGUgPSBwY2NfbWNoYW4tXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xuK1x0cV9jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWUgPSBwY2NfbWNoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbitcdHFfY2hhbi1cdTAwM2V0eXBlID0gcGNjX21jaGFuLVx1MDAzZXR5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcXVlcnlfY2hhbm5lbCk7XG4rXG4gLyoqXG4gICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG4gICpcdFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcbkBAIC0zNjAsNyArNDA4LDYgQEAgc3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcbiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIHtcbi1cdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfbWNoYW47XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW47XG4gXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuIFx0aW50IHJjO1xuQEAgLTM3NSwyMCArNDIyLDEwIEBAIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4gXHR9XG4gXG4tXHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuLVx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gYWNwaV9vc19pb3JlbWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHIsXG4tXHRcdFx0XHRcdCAgIHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplKTtcbi1cdGlmICghcGNjX21jaGFuLVx1MDAzZXNobWVtKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuLVxuIFx0cmMgPSBtYm94X2JpbmRfY2xpZW50KGNoYW4sIGNsKTtcbi1cdGlmIChyYykge1xuLVx0XHRpb3VubWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbSk7XG4tXHRcdHBjY19tY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4tXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbi1cdH1cbi1cbi1cdHJldHVybiBwY2NfbWNoYW47XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHRyZXR1cm4gIFx1MDAyNnBjaGFuLVx1MDAzZWNoYW47XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG4gXG5AQCAtNDAwLDE5ICs0MzcsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbiAgKi9cbiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNoYW4pXG4ge1xuLVx0c3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IHBjaGFuLVx1MDAzZW1jaGFuO1xuLVx0c3RydWN0IHBjY19jaGFuX2luZm8gKnBjaGFuX2luZm87XG4tXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX21ib3hfY2hhbjtcbitcdHN0cnVjdCBtYm94X2NoYW4gKmNoYW47XG4gXG4rXHRpZiAoIXBjaGFuKVxuK1x0XHRyZXR1cm47XG4rXHRjaGFuID0gcGNoYW4tXHUwMDNlbWNoYW47XG4gXHRpZiAoIWNoYW4gfHwgIWNoYW4tXHUwMDNlY2wpXG4gXHRcdHJldHVybjtcbi1cdHBjaGFuX2luZm8gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuLVx0cGNjX21ib3hfY2hhbiA9IFx1MDAyNnBjaGFuX2luZm8tXHUwMDNlY2hhbjtcbi1cdGlmIChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKSB7XG4tXHRcdGlvdW5tYXAocGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSk7XG4tXHRcdHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0gPSBOVUxMO1xuLVx0fVxuLVxuIFx0bWJveF9mcmVlX2NoYW5uZWwoY2hhbik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X2ZyZWVfY2hhbm5lbCk7XG5AQCAtNDQwLDcgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgcGNjX3NlbmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKVxuIFxuIFx0cmV0ID0gcGNjX2NoYW5fcmVnX3JlYWRfbW9kaWZ5X3dyaXRlKFx1MDAyNnBjaGFuLVx1MDAzZWRiKTtcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwY2hhbi1cdTAwM2VwbGF0X2lycSBcdTAwM2UgMClcbi1cdFx0cGNoYW4tXHUwMDNlY2hhbl9pbl91c2UgPSB0cnVlO1xuK1x0XHRXUklURV9PTkNFKHBjaGFuLVx1MDAzZWNoYW5faW5fdXNlLCB0cnVlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ2Miw5ICs0OTMsMTUgQEAgc3RhdGljIGJvb2wgcGNjX2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxuIHN0YXRpYyBpbnQgcGNjX3N0YXJ0dXAoc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tY2hhbjtcbiBcdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmM7XG4gXG4rXHRwY2NfbWNoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuK1x0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gYWNwaV9vc19pb3JlbWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbV9iYXNlX2FkZHIsXG4rXHRcdFx0XHRcdCAgIHBjY19tY2hhbi1cdTAwM2VzaG1lbV9zaXplKTtcbitcdGlmIChwY2NfbWNoYW4tXHUwMDNlc2htZW0gID09IE5VTEwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0LypcbiBcdCAqIENsZWFyIGFuZCBhY2tub3dsZWRnZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIG9uIHJlc3BvbmRlciBjaGFubmVsXG4gXHQgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdFxuQEAgLTQ3OSw2ICs1MTYsOCBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4gXHRcdGlmICh1bmxpa2VseShyYykpIHtcbiBcdFx0XHRkZXZfZXJyKGNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBpbnRlcnJ1cHQgJWRcXG5cIixcbiBcdFx0XHRcdHBjaGFuLVx1MDAzZXBsYXRfaXJxKTtcbitcdFx0XHRpb3VubWFwKHBjY19tY2hhbi1cdTAwM2VzaG1lbSk7XG4rXHRcdFx0cGNjX21jaGFuLVx1MDAzZXNobWVtID0gTlVMTDtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbkBAIC00ODgsMTUgKzUyNywyMyBAQCBzdGF0aWMgaW50IHBjY19zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pXG4gXG4gLyoqXG4gICogcGNjX3NodXRkb3duIC0gQ2FsbGVkIGZyb20gTWFpbGJveCBDb250cm9sbGVyIGNvZGUuIFVzZWQgaGVyZVxuLSAqXHRcdHRvIGZyZWUgdGhlIGludGVycnVwdC5cbisgKlx0XHR0byBmcmVlIHRoZSBpbnRlcnJ1cHQgYW5kIHVubWFwIHRoZSBzaGFyZWQgbWVtb3J5LlxuICAqIEBjaGFuOiBQb2ludGVyIHRvIE1haWxib3ggY2hhbm5lbCB0byBzaHV0ZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwY2Nfc2h1dGRvd24oc3RydWN0IG1ib3hfY2hhbiAqY2hhbilcbiB7XG4gXHRzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4gPSBjaGFuLVx1MDAzZWNvbl9wcml2O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19tYm94X2NoYW47XG4gXG4gXHRpZiAocGNoYW4tXHUwMDNlcGxhdF9pcnEgXHUwMDNlIDApXG4gXHRcdGRldm1fZnJlZV9pcnEoY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldiwgcGNoYW4tXHUwMDNlcGxhdF9pcnEsIGNoYW4pO1xuK1x0c3luY2hyb25pemVfaXJxKHBjaGFuLVx1MDAzZXBsYXRfaXJxKTtcbitcbitcdHBjY19tYm94X2NoYW4gPSBcdTAwMjZwY2hhbi1cdTAwM2VjaGFuO1xuK1x0aWYgKHBjY19tYm94X2NoYW4tXHUwMDNlc2htZW0pIHtcbitcdFx0aW91bm1hcChwY2NfbWJveF9jaGFuLVx1MDAzZXNobWVtKTtcbitcdFx0cGNjX21ib3hfY2hhbi1cdTAwM2VzaG1lbSA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWJveF9jaGFuX29wcyBwY2NfY2hhbl9vcHMgPSB7XG5AQCAtODMxLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0cGNjX3BhcnNlX3N1YnNwYWNlX3NobWVtKHBjaGFuLCBwY2N0X2VudHJ5KTtcbiBcbiBcdFx0cGNoYW4tXHUwMDNldHlwZSA9IHBjY3RfZW50cnktXHUwMDNldHlwZTtcbitcdFx0cGNoYW4tXHUwMDNlY2hhbi50eXBlID0gcGNjdF9lbnRyeS1cdTAwM2V0eXBlO1xuIFx0XHRwY2N0X2VudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKVxuIFx0XHRcdCgodW5zaWduZWQgbG9uZykgcGNjdF9lbnRyeSArIHBjY3RfZW50cnktXHUwMDNlbGVuZ3RoKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jOWI4ZjM4ZmYwZmI5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5AQCAtNDcsNiArNDcsMjEgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwibWN0cC1jb250cm9sbGVyXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cbiBcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfUENDXG4rXHR0cmlzdGF0ZSBcIk1DVFAgUENDIHRyYW5zcG9ydFwiXG4rXHRkZXBlbmRzIG9uIEFDUElcbitcdGRlcGVuZHMgb24gUENDXG4rXHRkZXBlbmRzIG9uIENQVV9MSVRUTEVfRU5ESUFOXG4rXHRoZWxwXG4rXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBQQ0MgdHJhbnNwb3J0LFxuK1x0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCB2aWEgQUNQSSBmb3IgZWFjaFxuK1x0ICBlbnRyeSBpbiB0aGUgRFNEVC9TU0RUIHRoYXQgbWF0Y2hlcyB0aGUgaWRlbnRpZmllci4gVGhlIFBsYXRmb3JtXG4rXHQgIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmdcbitcdCAgZW50cmllcyBpbiB0aGUgUENDVC5cbitcbitcdCAgU2F5IHkgaGVyZSBpZiB5b3UgbmVlZCB0byBjb25uZWN0IHRvIE1DVFAgZW5kcG9pbnRzIG92ZXIgUENDLiBUb1xuK1x0ICBjb21waWxlIGFzIGEgbW9kdWxlLCB1c2UgbTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RwLXBjYy5cbitcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcIk1DVFAgVVNCIHRyYW5zcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFVTQlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uMGE1OTEyOTlmZmE5MmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiBvYmotJChDT05GSUdfTUNUUF9TRVJJQUwpICs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX0kzQykgKz0gbWN0cC1pM2Mub1xuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9QQ0MpICs9IG1jdHAtcGNjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCKSArPSBtY3RwLXVzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzRmM2IyMTUxMzcwXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmNcbkBAIC0wLDAgKzEsNDY2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtcGNjLmMgLSBEcml2ZXIgZm9yIE1DVFAgb3ZlciBQQ0MuXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYsIEFtcGVyZSBDb21wdXRpbmcgTExDXG4rICpcbisgKi9cbitcbisvKiBJbXBsZW1lbnRhdGlvbiBvZlxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjkyLnBkZlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hydGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FjcGkvYWNwaV9idXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvYWNwaV9kcml2ZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL2FjcmVzdHlwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL2FjdGJsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbitcbisjZGVmaW5lIE1DVFBfU0lHTkFUVVJFICAgICAgICAgIFwiTUNUUFwiXG4rI2RlZmluZSBNQ1RQX1NJR05BVFVSRV9MRU5HVEggICAoc2l6ZW9mKE1DVFBfU0lHTkFUVVJFKSAtIDEpXG4rI2RlZmluZSBNQ1RQX01JTl9NVFUgICAgICAgICAgICA2OFxuKyNkZWZpbmUgUENDX0hFQURFUl9TSVpFICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KVxuKyNkZWZpbmUgTUNUUF9QQ0NfTUlOX1NJWkUgICAgICAgKFBDQ19IRUFERVJfU0laRSArIE1DVFBfTUlOX01UVSlcbisjZGVmaW5lIFBDQ19FWFRSQV9MRU4gICAgICAgICAgIChQQ0NfSEVBREVSX1NJWkUgLSBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSlcbitzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCB7XG4rXHR1MzIgaW5kZXg7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbjtcbitcdHN0cnVjdCBtYm94X2NsaWVudCBjbGllbnQ7XG4rfTtcbitcbisvKiBUaGUgbmV0ZGV2IHN0cnVjdHVyZS4gT25lIG9mIHRoZXNlIHBlciBQQ0MgYWRhcHRlci4gKi9cbitzdHJ1Y3QgbWN0cF9wY2NfbmRldiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXZpY2U7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCBpbmJveDtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94IG91dGJveDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG1jdHBfcGNjX2NsaWVudF9yeF9jYWxsYmFjayhzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuK3tcbitcdHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5IHBjY19oZWFkZXI7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICppbmJveDtcbitcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0aW50IHNpemU7XG4rXG4rXHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgbWN0cF9wY2NfbmRldiwgaW5ib3guY2xpZW50KTtcbitcdGluYm94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VpbmJveDtcbitcdG1lbWNweV9mcm9taW8oXHUwMDI2cGNjX2hlYWRlciwgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbSwgc2l6ZW9mKHBjY19oZWFkZXIpKTtcbitcbitcdC8vIFRoZSBtZXNzYWdlIG11c3QgYXQgbGVhc3QgaGF2ZSB0aGUgUENDIGNvbW1hbmQgaW5kaWNhdGluZyBpdCBpcyBhbiBNQ1RQXG4rXHQvLyBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSBNQ1RQIGhlYWRlciwgb3Igd2UgaGF2ZSBhIG1hbGZvcm1lZCBtZXNzYWdlLlxuK1x0aWYgKHBjY19oZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YocGNjX2hlYWRlci5jb21tYW5kKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0Ly8gSWYgdGhlIHJlcG9ydGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIHNoYXJlZCBtZW1vcnkgbWludXMgaGVhZGVycyxcbitcdC8vIHNvbWV0aGluZyBpcyB3cm9uZyBhbmQgdHJlYXQgdGhlIGJ1ZmZlciBhcyBjb3JydXB0ZWQgZGF0YS5cbitcdGlmIChwY2NfaGVhZGVyLmxlbmd0aCBcdTAwM2UgaW5ib3gtXHUwMDNlY2hhbi1cdTAwM2VzaG1lbV9zaXplIC0gUENDX0VYVFJBX0xFTilcbitcdFx0Z290byBlcnJvcjtcbitcbitcdGlmIChtZW1jbXAoXHUwMDI2cGNjX2hlYWRlci5jb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKSAhPSAwKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0c2l6ZSA9IHBjY19oZWFkZXIubGVuZ3RoICsgUENDX0VYVFJBX0xFTjtcbitcdHNrYiA9IG5ldGRldl9hbGxvY19za2IobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2LCBzaXplKTtcbitcdGlmICghc2tiKVxuK1x0XHRnb3RvIGVycm9yO1xuK1xuK1x0c2tiX3B1dChza2IsIHNpemUpO1xuK1x0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4rXHRtZW1jcHlfZnJvbWlvKHNrYi1cdTAwM2VkYXRhLCBpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtLCBzaXplKTtcbitcdGRldl9kc3RhdHNfcnhfYWRkKG1jdHBfcGNjX25kZXYtXHUwMDNlbmRldiwgc2l6ZSk7XG4rXHRza2JfcHVsbChza2IsIHNpemVvZihwY2NfaGVhZGVyKSk7XG4rXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRjYiA9IF9fbWN0cF9jYihza2IpO1xuK1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuK1x0bmV0aWZfcngoc2tiKTtcbitcdHJldHVybjtcbitcbitlcnJvcjpcbitcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF9wY2NfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkgKnBjY19oZWFkZXI7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbXBuZCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpwY2NfaGVhZGVyKSkpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRwY2NfaGVhZGVyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbitcdHBjY19oZWFkZXItXHUwMDNlc2lnbmF0dXJlID0gUENDX1NJR05BVFVSRSB8IG1wbmQtXHUwMDNlb3V0Ym94LmluZGV4O1xuK1x0cGNjX2hlYWRlci1cdTAwM2VmbGFncyA9IFBDQ19DTURfQ09NUExFVElPTl9OT1RJRlk7XG4rXHRtZW1jcHkoXHUwMDI2cGNjX2hlYWRlci1cdTAwM2Vjb21tYW5kLCBNQ1RQX1NJR05BVFVSRSwgTUNUUF9TSUdOQVRVUkVfTEVOR1RIKTtcbitcdHBjY19oZWFkZXItXHUwMDNlbGVuZ3RoID0gbGVuICsgTUNUUF9TSUdOQVRVUkVfTEVOR1RIO1xuK1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIG1wbmQtXHUwMDNlb3V0Ym94LmNoYW4tXHUwMDNlc2htZW1fc2l6ZSlcbitcdFx0Z290byBlcnJvcjtcbitcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG1haWxib3ggY2FuIGJlIGNsZWFyZWQgb25cbitcdCAqIGFub3RoZXIgdGhyZWFkLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQgd2UgZG9uJ3QgcmVzdGFydFxuK1x0ICogdGhlIHF1ZXVlLCBpdCB3aWxsIHJlbWFpbiBwZXJtYW5lbnRseSBzdG9wcGVkLlxuK1x0ICogU3RvcHBpbmcgdGhlIHF1ZXVlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHNlbmQgdGhlIG1lc3NhZ2VcbitcdCAqIGFsbG93cyB1cyB0byBhbHdheXMgcmVzdGFydCBpdCBpZiBtYm94X3NlbmRfbWVzc2FnZSBzdWNjZWVkcy5cbitcdCAqL1xuK1x0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbitcdGlmIChtYm94X3NlbmRfbWVzc2FnZShtcG5kLVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuLCBza2IpIFx1MDAzZT0gMCkge1xuK1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5kZXYpO1xuK1x0fSBlbHNlIHtcbitcdFx0Ly8gUmVtb3ZlIHRoZSBoZWFkZXIgaW4gY2FzZSBpdCBnZXRzIHNlbnQgYWdhaW5cbitcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnBjY19oZWFkZXIpKTtcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0fVxuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcbitlcnJvcjpcbitcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9wY2NfdHhfcHJlcGFyZShzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc3NnKVxuK3tcbitcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKm91dGJveDtcbitcdHN0cnVjdCBza19idWZmICpza2IgPSBtc3NnO1xuK1xuK1x0bWN0cF9wY2NfbmRldiA9IGNvbnRhaW5lcl9vZihjbCwgc3RydWN0IG1jdHBfcGNjX25kZXYsIG91dGJveC5jbGllbnQpO1xuK1x0b3V0Ym94ID0gXHUwMDI2bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3g7XG4rXG4rXHQvKiBUaGUgUENDIE1haWxib3ggdHlwaWNhbGx5IGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZSBtc3NnIHBvaW50ZXJcbitcdCAqIFRoZSBtY3RwLW92ZXIgcGNjIGRyaXZlciBpcyB0aGUgb25seSBjbGllbnQgdGhhdCB1c2VzIGl0LlxuK1x0ICogVGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIG5vbi1udWxsOyBpdCBpcyBwb3NzaWJsZVxuK1x0ICogdGhhdCBhIGNoYW5nZSBpbiB0aGUgTWFpbGJveCBsZXZlbCB3aWxsIGJyZWFrIHRoYXQgYXNzdW1wdGlvbi5cbitcdCAqL1xuK1x0aWYgKCFza2IpIHtcbitcdFx0bmV0ZGV2X3dhcm5fb25jZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsXG4rXHRcdFx0XHQgXCIlcyBjYWxsZWQgd2l0aCBudWxsIG1lc3NhZ2UuXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0bWVtY3B5X3RvaW8ob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW0sIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9wY2NfdHhfZG9uZShzdHJ1Y3QgbWJveF9jbGllbnQgKmMsIHZvaWQgKm1zc2csIGludCByYylcbit7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IG1zc2c7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIGEgcGFja2V0IGluIGZsaWdodCBkdXJpbmcgZHJpdmVyIGNsZWFudXBcbitcdCAqIEl0IG1heSBoYXZlIGJlZW4gZnJlZWQgYWxyZWFkeS5cbitcdCAqL1xuK1x0aWYgKCFtc3NnKVxuK1x0XHRyZXR1cm47XG4rXHRtY3RwX3BjY19uZGV2ID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtY3RwX3BjY19uZGV2LCBvdXRib3guY2xpZW50KTtcbitcbitcdC8qIFVzZSBhbiBJUlEgc2FmZSB1cGRhdGUgYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSBIQVJEIElSUSBpbnN0ZWFkIG9mXG4rXHQgKiBkZXZfZHN0YXRzX3R4X2FkZChtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYsIHNrYi1cdTAwM2VsZW4pO1xuK1x0ICovXG4rXHRkc3RhdHMgPSB0aGlzX2NwdV9wdHIobWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1xuK1x0aWYgKHJjKSB7XG4rXHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbitcdH0gZWxzZSB7XG4rXHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X3BhY2tldHMpO1xuK1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4rXHR9XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuK1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK31cbitcbitzdGF0aWMgaW50IG1jdHBfcGNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBtY3RwX3BjY19tYWlsYm94ICpvdXRib3gsICppbmJveDtcbitcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1xuK1x0b3V0Ym94LVx1MDAzZWNoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2b3V0Ym94LVx1MDAzZWNsaWVudCwgb3V0Ym94LVx1MDAzZWluZGV4KTtcbitcdGlmIChJU19FUlIob3V0Ym94LVx1MDAzZWNoYW4pKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihvdXRib3gtXHUwMDNlY2hhbik7XG4rXHRpZiAob3V0Ym94LVx1MDAzZWNoYW4tXHUwMDNlc2htZW1fc2l6ZSBcdTAwM2MgTUNUUF9QQ0NfTUlOX1NJWkUpIHtcbitcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKG91dGJveC1cdTAwM2VjaGFuKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpbmJveC1cdTAwM2VjbGllbnQucnhfY2FsbGJhY2sgPSBtY3RwX3BjY19jbGllbnRfcnhfY2FsbGJhY2s7XG4rXHRpbmJveC1cdTAwM2VjaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNmluYm94LVx1MDAzZWNsaWVudCwgaW5ib3gtXHUwMDNlaW5kZXgpO1xuK1x0aWYgKElTX0VSUihpbmJveC1cdTAwM2VjaGFuKSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwob3V0Ym94LVx1MDAzZWNoYW4pO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihpbmJveC1cdTAwM2VjaGFuKTtcbitcdH1cbitcdGlmIChpbmJveC1cdTAwM2VjaGFuLVx1MDAzZXNobWVtX3NpemUgXHUwMDNjIE1DVFBfUENDX01JTl9TSVpFKSB7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChvdXRib3gtXHUwMDNlY2hhbik7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChpbmJveC1cdTAwM2VjaGFuKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3BjY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCBtY3RwX3BjY19uZGV2ICptY3RwX3BjY19uZGV2O1xuK1x0dW5zaWduZWQgaW50IGNvdW50LCBpZHg7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdG1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGNoYW4gPSBtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jaGFuLVx1MDAzZW1jaGFuO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2hhbik7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmNoYW4gPSBOVUxMO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmNoYW4tXHUwMDNlbG9jaykge1xuK1x0XHRpZiAoY2hhbi1cdTAwM2VhY3RpdmVfcmVxICE9ICBNQk9YX05PX01TRykge1xuK1x0XHRcdHNrYiA9IGNoYW4tXHUwMDNlYWN0aXZlX3JlcTtcbitcdFx0XHRjaGFuLVx1MDAzZWFjdGl2ZV9yZXEgPSBNQk9YX05PX01TRztcbitcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmRldik7XG4rXHRcdFx0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0XHR9XG4rXHRcdHdoaWxlIChjaGFuLVx1MDAzZW1zZ19jb3VudCBcdTAwM2UgMCkge1xuK1x0XHRcdGNvdW50ID0gY2hhbi1cdTAwM2Vtc2dfY291bnQ7XG4rXHRcdFx0aWR4ID0gY2hhbi1cdTAwM2Vtc2dfZnJlZTtcbitcdFx0XHRpZiAoaWR4IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0XHRpZHggLT0gY291bnQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0aWR4ICs9IE1CT1hfVFhfUVVFVUVfTEVOIC0gY291bnQ7XG4rXHRcdFx0c2tiID0gY2hhbi1cdTAwM2Vtc2dfZGF0YVtpZHhdO1xuK1x0XHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZGV2KTtcbitcdFx0XHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4rXHRcdFx0Y2hhbi1cdTAwM2Vtc2dfY291bnQtLTtcbitcdFx0fVxuK1x0fVxuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmNoYW4pO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2hhbiA9IE5VTEw7XG4rXHQvKlxuK1x0ICogSWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGJlY2F1c2UgdGhlIHJpbmcgYnVmZmVyIHdhcyBmdWxsXG4rXHQgKiB3ZSBjYW4gcmVzdGFydCBpdCBoZXJlIGFzIHdlIG5vdyBrbm93IHRoZSByaW5nIGJ1ZmZlciBoYXNcbitcdCAqIGJlZW4gZW1wdGllZCBhbmQgdGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGFnYWluIGlmIHRoZVxuK1x0ICogbmV0ZGV2IGlzIHJlLW9wZW5lZC5cbitcdCAqL1xuK1x0bmV0aWZfd2FrZV9xdWV1ZShtY3RwX3BjY19uZGV2LVx1MDAzZW5kZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF9wY2NfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fb3BlbiA9IG1jdHBfcGNjX29wZW4sXG4rXHQubmRvX3N0b3AgPSBtY3RwX3BjY19zdG9wLFxuK1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF9wY2NfdHgsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBtY3RwX3BjY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbitcdG5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3BjY3RfZXh0X3BjY19zaGFyZWRfbWVtb3J5KTtcbitcdG5kZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4rXHRuZGV2LVx1MDAzZWZsYWdzID0gSUZGX05PQVJQO1xuK1x0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bWN0cF9wY2NfbmV0ZGV2X29wcztcbitcdG5kZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuK1x0bmRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xuK31cbitcbitzdHJ1Y3QgbWN0cF9wY2NfbG9va3VwX2NvbnRleHQge1xuK1x0aW50IGluZGV4O1xuK1x0dTMyIGluYm94X2luZGV4O1xuK1x0dTMyIG91dGJveF9pbmRleDtcbit9O1xuK1xuK3N0YXRpYyBhY3BpX3N0YXR1cyBsb29rdXBfcGNjdF9pbmRpY2VzKHN0cnVjdCBhY3BpX3Jlc291cmNlICphcmVzLFxuK1x0XHRcdFx0ICAgICAgIHZvaWQgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0ICpsdWMgPSBjb250ZXh0O1xuK1x0c3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICphZGRyO1xuK1xuK1x0aWYgKGFyZXMtXHUwMDNldHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzMyKVxuK1x0XHRyZXR1cm4gQUVfT0s7XG4rXG4rXHRhZGRyID0gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIsIFx1MDAyNmFyZXMtXHUwMDNlZGF0YSk7XG4rXHRzd2l0Y2ggKGx1Yy1cdTAwM2VpbmRleCkge1xuK1x0Y2FzZSAwOlxuK1x0XHRsdWMtXHUwMDNlb3V0Ym94X2luZGV4ID0gYWRkclswXS5hZGRyZXNzLm1pbmltdW07XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAxOlxuK1x0XHRsdWMtXHUwMDNlaW5ib3hfaW5kZXggPSBhZGRyWzBdLmFkZHJlc3MubWluaW11bTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gQUVfRVJST1I7XG4rXHR9XG4rXHRsdWMtXHUwMDNlaW5kZXgrKztcbitcdHJldHVybiBBRV9PSztcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF9jbGVhbnVwX25ldGRldih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGF0YTtcbitcbitcdG1jdHBfdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF90eXBlcyhzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldilcbit7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gY2hhbjtcbitcdGludCBhY3R1YWxfdHlwZTtcbitcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgb3V0Ym94LVx1MDAzZWluZGV4KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRhY3R1YWxfdHlwZSA9IGNoYW4udHlwZTtcbitcdGlmIChhY3R1YWxfdHlwZSAhPSBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX01BU1RFUl9TVUJTUEFDRSkge1xuK1x0XHRwcl9lcnIoXCJNQ1RQLVBDQyBvdXRib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwiLCBhY3R1YWxfdHlwZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2Y2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGFjdHVhbF90eXBlID0gY2hhbi50eXBlO1xuK1x0aWYgKGFjdHVhbF90eXBlICE9IEFDUElfUENDVF9UWVBFX0VYVF9QQ0NfU0xBVkVfU1VCU1BBQ0UpIHtcbitcdFx0cHJfZXJyKFwiTUNUUC1QQ0MgaW5ib3ggY2hhbm5lbCB3cm9uZyB0eXBlOiAlZFwiLCBhY3R1YWxfdHlwZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX25kZXYgKm1jdHBfcGNjX25kZXY7XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbWFpbGJveCAqb3V0Ym94O1xuK1x0c3RydWN0IG1jdHBfcGNjX21haWxib3ggKmluYm94O1xuK1x0c3RydWN0IHBjY19tYm94X2NoYW4gb3V0X2NoYW47XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiBpbl9jaGFuO1xuK1x0aW50IG1jdHBfcGNjX21heF9tdHU7XG4rXHRpbnQgaW5ib3hfbWF4X210dTtcbitcbitcdG1jdHBfcGNjX25kZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdG91dGJveCA9IFx1MDAyNm1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2b3V0X2NoYW4sIG91dGJveC1cdTAwM2VpbmRleCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKG91dF9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSArIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0bWN0cF9wY2NfbWF4X210dSA9IG91dF9jaGFuLnNobWVtX3NpemUgLSBzaXplb2Yoc3RydWN0IGFjcGlfcGNjdF9leHRfcGNjX3NoYXJlZF9tZW1vcnkpO1xuK1x0aW5ib3ggPSBcdTAwMjZtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94O1xuK1x0aWYgKHBjY19tYm94X3F1ZXJ5X2NoYW5uZWwoXHUwMDI2aW5fY2hhbiwgaW5ib3gtXHUwMDNlaW5kZXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChpbl9jaGFuLnNobWVtX3NpemUgXHUwMDNjIE1DVFBfTUlOX01UVSArIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aW5ib3hfbWF4X210dSA9IGluX2NoYW4uc2htZW1fc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2N0X2V4dF9wY2Nfc2hhcmVkX21lbW9yeSk7XG4rXG4rXHRpZiAoaW5ib3hfbWF4X210dSBcdTAwM2MgbWN0cF9wY2NfbWF4X210dSlcbitcdFx0bWN0cF9wY2NfbWF4X210dSA9IGluYm94X21heF9tdHU7XG4rXG4rXHRuZGV2LVx1MDAzZW10dSA9IE1DVFBfTUlOX01UVTtcbitcdG5kZXYtXHUwMDNlbWF4X210dSA9IG1jdHBfcGNjX21heF9tdHU7XG4rXHRuZGV2LVx1MDAzZW1pbl9tdHUgPSBNQ1RQX01JTl9NVFU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3BjY19kcml2ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9kZXYpXG4re1xuK1x0c3RydWN0IG1jdHBfcGNjX2xvb2t1cF9jb250ZXh0IGNvbnRleHQgPSB7MH07XG4rXHRzdHJ1Y3QgbWN0cF9wY2NfbmRldiAqbWN0cF9wY2NfbmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmFjcGlfZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0YWNwaV9oYW5kbGUgZGV2X2hhbmRsZTtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcdGNoYXIgbmFtZVszMl07XG4rXHRpbnQgcmM7XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJBZGRpbmcgbWN0cF9wY2MgZGV2aWNlIGZvciBISUQgJXNcXG5cIixcbitcdFx0YWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7XG4rXHRkZXZfaGFuZGxlID0gYWNwaV9kZXZpY2VfaGFuZGxlKGFjcGlfZGV2KTtcbitcdHN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2X2hhbmRsZSwgXCJfQ1JTXCIsIGxvb2t1cF9wY2N0X2luZGljZXMsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmNvbnRleHQpO1xuK1x0aWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGQUlMRUQgdG8gbG9va3VwIFBDQyBpbmRleGVzIGZyb20gQ1JTXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBFbnN1cmUgd2UgaGF2ZSBleGFjdGx5IDIgY2hhbm5lbHM6IGFuIG91dGJveCBhbmQgYW4gaW5ib3guXG4rXHQgKi9cbitcdGlmIChjb250ZXh0LmluZGV4ICE9IDIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcIm1jdHBwY2MlZFwiLCBjb250ZXh0LmluYm94X2luZGV4KTtcbitcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCptY3RwX3BjY19uZGV2KSwgbmFtZSwgTkVUX05BTUVfUFJFRElDVEFCTEUsXG4rXHRcdFx0ICAgIG1jdHBfcGNjX3NldHVwKTtcbitcdGlmICghbmRldilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3RwX3BjY19uZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZWluYm94LmluZGV4ID0gY29udGV4dC5pbmJveF9pbmRleDtcbitcdG1jdHBfcGNjX25kZXYtXHUwMDNlaW5ib3guY2xpZW50LmRldiA9IGRldjtcbitcdG1jdHBfcGNjX25kZXYtXHUwMDNlb3V0Ym94LmluZGV4ID0gY29udGV4dC5vdXRib3hfaW5kZXg7XG4rXHRtY3RwX3BjY19uZGV2LVx1MDAzZW91dGJveC5jbGllbnQuZGV2ID0gZGV2O1xuK1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X3ByZXBhcmUgPSBtY3RwX3BjY190eF9wcmVwYXJlO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VvdXRib3guY2xpZW50LnR4X2RvbmUgPSBtY3RwX3BjY190eF9kb25lO1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VhY3BpX2RldmljZSA9IGFjcGlfZGV2O1xuK1x0bWN0cF9wY2NfbmRldi1cdTAwM2VuZGV2ID0gbmRldjtcbitcdGFjcGlfZGV2LVx1MDAzZWRyaXZlcl9kYXRhID0gbWN0cF9wY2NfbmRldjtcbitcdHJjID0gY2hlY2tfY2hhbm5lbF90eXBlcyhtY3RwX3BjY19uZGV2KTtcbitcdGlmIChyYyAhPSAwKVxuK1x0XHRnb3RvIGZyZWVfbmV0ZGV2O1xuK1xuK1x0cmMgPSBpbml0aWFsaXplX210dShuZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBmcmVlX25ldGRldjtcbitcbitcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfUENDKTtcbitcdGlmIChyYylcbitcdFx0Z290byBmcmVlX25ldGRldjtcbitcbitcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBtY3RwX2NsZWFudXBfbmV0ZGV2LCBuZGV2KTtcbitmcmVlX25ldGRldjpcbitcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIG1jdHBfcGNjX2RldmljZV9pZHNbXSA9IHtcbitcdHsgXCJETVQwMDAxXCIgfSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIG1jdHBfcGNjX2RyaXZlciA9IHtcbitcdC5uYW1lID0gXCJtY3RwX3BjY1wiLFxuK1x0LmNsYXNzID0gXCJVbmtub3duXCIsXG4rXHQuaWRzID0gbWN0cF9wY2NfZGV2aWNlX2lkcyxcbitcdC5vcHMgPSB7XG4rXHRcdC5hZGQgPSBtY3RwX3BjY19kcml2ZXJfYWRkLFxuK1x0fSxcbit9O1xuK1xuK21vZHVsZV9hY3BpX2RyaXZlcihtY3RwX3BjY19kcml2ZXIpO1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWN0cF9wY2NfZGV2aWNlX2lkcyk7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTUNUUCBQQ0MgQUNQSSBkZXZpY2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFkYW0gWW91bmcgXHUwMDNjYWRtaXlvQG9zLmFtcGVyZWNvbXB1dGluZy5jb21cdTAwM2VcIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BjYy5oIGIvaW5jbHVkZS9hY3BpL3BjYy5oXG5pbmRleCA4NDBiZmM5NWJhZTMzMi4uYmY5N2Y0MDc2ODNkZTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FjcGkvcGNjLmhcbisrKyBiL2luY2x1ZGUvYWNwaS9wY2MuaFxuQEAgLTgsNiArOCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFpbGJveF9jb250cm9sbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gXG4gc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIFx0c3RydWN0IG1ib3hfY2hhbiAqbWNoYW47XG5AQCAtMTcsNiArMTgsNyBAQCBzdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XG4gXHR1MzIgbGF0ZW5jeTtcbiBcdHUzMiBtYXhfYWNjZXNzX3JhdGU7XG4gXHR1MTYgbWluX3R1cm5hcm91bmRfdGltZTtcbitcdGVudW0gYWNwaV9wY2N0X3R5cGUgdHlwZTtcbiB9O1xuIFxuIC8qIEdlbmVyaWMgQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCBTaGFyZWQgTWVtb3J5IFJlZ2lvbiAqL1xuQEAgLTM3LDYgKzM5LDggQEAgc3RydWN0IHBjY19tYm94X2NoYW4ge1xuIGV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZCk7XG4gZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcbitleHRlcm4gaW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG4gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcbkBAIC00NCw2ICs0OCwxMSBAQCBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pIHsgfVxuK3N0YXRpYyBpbmxpbmUgaW50XG4rcGNjX21ib3hfcXVlcnlfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcV9jaGFuLCBpbnQgc3Vic3BhY2VfaWQpXG4re1xuK1x0cmV0dXJuIC1FTk9ERVY7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfUENDX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjExLjY4MDgyMTAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODQzMTUxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1DVFAvUENDIERyaXZlciBGdXp6aW5nIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gd2UndmUgZ290IGEgbmV3IGRyaXZlciwgYG1jdHAtcGNjLmNgLCBpbXBsZW1lbnRpbmcgTUNUUCBvdmVyIFBDQy4gVGhhdCdzIGludGVyZXN0aW5nLCBhIG5ldyBuZXR3b3JrIGRyaXZlciwgYW5kIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyDigJMgbmV3IG5ldHdvcmsgZHJpdmVycyBhcmUgYWx3YXlzIHdvcnRoIGEgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0IGludHJvZHVjZXMgYSBgTUNUUF9UUkFOU1BPUlRfUENDYCBLY29uZmlnIG9wdGlvbiBhbmQgdG91Y2hlcyBgcGNjLmNgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBwY2NfbWJveF9xdWVyeV9jaGFubmVsYCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaW50ZXJydXB0IGFuZCBjaGFubmVsIHJlcXVlc3QgbG9naWMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENDLCBiZWluZyBBQ1BJLWJhc2VkLCBtYWtlcyB0aGlzIGEga2V5IHF1ZXN0aW9uLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdXNlcyB0aGUgQUNQSSBkZXZpY2UgSUQgYERNVDAwMDFgLiBDYW4gd2UgdHJpY2sgUUVNVSBpbnRvIGVtdWxhdGluZyB0aGlzPyBTeXprYWxsZXIncyBBQ1BJIHRhYmxlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgY29tZSB0byBtaW5kLiBCdXQsIHdhaXQuLi4gU3l6a2FsbGVyJ3MgQUNQSSB0YWJsZSBpbmplY3Rpb24gZm9yIFBDQyBpc24ndCBleGFjdGx5IHN0cmFpZ2h0Zm9yd2FyZCBvciBnZW5lcmljLiBUaGlzIGlzbid0IGEgKmRpcmVjdCogQUNQSSBkcml2ZXIuIGl0J3MgYSAqbmV0d29yayogZHJpdmVyLlxuXG5Pa2F5LCBsZXQncyByZWZvY3VzLiBJZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIGBtY3RwX3BjY19kcml2ZXJfYWRkYCB3b24ndCBldmVuIGJlIGNhbGxlZC4gV2UgbmVlZCB0byBmaW5kIGEgdHJpZ2dlci4gQ2FuIHN5emthbGxlciBkbyAqYW55dGhpbmcqIHdpdGggQUNQSSBkZXZpY2UgaW5zdGFudGlhdGlvbiBoZXJlPyBOb3BlLCB0aGUgZ2VuZXJpYyBgc3l6X2FjcGlfLi4uYCB3b24ndCBoZWxwLiBXZSBjYW4gZnV6eiBuZXRkZXYgb3BzLCBidXQgd2UgbmVlZCB0aGUgZGV2aWNlIHRvIGJlIGNyZWF0ZWQgc29tZWhvdy4gTm8sIGl0J3MgYW4gQUNQSSBkcml2ZXIuXG5cblRoaW5raW5nIGFib3V0IGl0IG1vcmUsIHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB0b3VjaCBBQ1BJIGRyaXZlcnMgdW5sZXNzIHRoZXkgY2FuIGJlIGluc3RhbnRpYXRlZC4gQnV0IGhleSwgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgaW4gYHBjYy5jYC4gR2l2ZW4gdGhhdCBgcGNjX21ib3hfcXVlcnlfY2hhbm5lbGAgaXMgYWRkZWQsIElzIGBNQ1RQX1RSQU5TUE9SVF9QQ0NgIHN0aWxsIHdvcnRoIGZ1enppbmc/IFllcywgYSBuZXcgbmV0d29yayBkcml2ZXIuXG5cbkFscmlnaHQsIGxldCdzIGdldCBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbWN0cF9wY2MuY2AuIEl0IHJlZ2lzdGVycyBhIG5ldGRldiB1c2luZyBgbWN0cF9yZWdpc3Rlcl9uZXRkZXZgLCB3aXRoIGBtY3RwX3BjY19uZXRkZXZfb3BzYCBjb250YWluaW5nIGBuZG9fc3RhcnRfeG1pdCA9IG1jdHBfcGNjX3R4YC4gT2theSwgc28gaWYgdGhlIGRldmljZSAqY2FuKiBiZSBjcmVhdGVkLCB3ZSdyZSBnb2xkZW4uIEZ1enppbmcgdGhlIG5ldGRldiBvcGVyYXRpb25zIGJlY29tZXMgZmVhc2libGUuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIEFDUEkgZGV2aWNlcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIEFDUEkgZGV2aWNlIGluc3RhbnRpYXRvci5cblxuTGV0J3MgY2hlY2sgdGhlIHByb21wdCEgSXQgc2F5cyB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50c1wiLiBJcyBQQ0MgZW11bGF0ZWQgaW4gUUVNVT8gUUVNVSBoYXMgQUNQSSBzdXBwb3J0LCBidXQgUENDLCBzcGVjaWZpY2FsbHk/IFByb2JhYmx5IG5vdC4gSXQncyBhbiBBQ1BJIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gdGhlIGZpcm13YXJlIHByb3ZpZGluZyBBQ1BJIHRhYmxlcy4gSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3QgcHJvdmlkZSBpdCwgdGhlIGRyaXZlciB3b24ndCBwcm9iZS5cblxuU28sIGRvIHdlIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgc2VlIHdoYXQgaGFwcGVucywgb3IgaXMgdGhpcyBkZWFkIGVuZD9cblxuSG93ZXZlciwgdGhlIHByb21wdCBhbHNvIHNheXMsIFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TbyBsZXQncyBmaW5kIGlmIHdlIGNhbiBleGVjdXRlIGBtY3RwX3BjY19kcml2ZXJfYWRkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDoyMy41MjM5NzUwODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTIxODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtY3RwX3BjY19kcml2ZXJfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz0zNTA9c3RhdGljIGludCBpbml0aWFsaXplX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYy0zODMtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjM4NDpzdGF0aWMgaW50IG1jdHBfcGNjX2RyaXZlcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpX2RldilcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtMzg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1wY2MuYz00NTE9c3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBtY3RwX3BjY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtNDU1LVxcdC5vcHMgPSB7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXBjYy5jOjQ1NjpcXHRcXHQuYWRkID0gbWN0cF9wY2NfZHJpdmVyX2FkZCxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtcGNjLmMtNDU3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjI2LjE4NTE5ODMwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDIzMjUxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBQ1BJIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYW4gQUNQSSBkcml2ZXIsIHdoaWNoIG1lYW5zIGl0J3MgZGVhbGluZyB3aXRoIGRldmljZXMgZGVzY3JpYmVkIGluIHRoZSBEU0RUL1NTRFQgdGFibGVzLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlIG9yLCBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBRRU1VLCB0aGUgZW11bGF0b3IgaXRzZWxmLiBJIGtub3cgdGhhdCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgaW50byBMaW51eCBpcyBwb3NzaWJsZSDigJMgd2UgY2FuIGRvIGl0IHRocm91Z2ggY29uZmlnZnMgKGBDT05GSUdfQUNQSV9DT05GSUdGU2ApIG9yIHZpYSBpbml0cmQuIEknbSBwcmV0dHkgc3VyZSBTeXprYWxsZXIgaXNuJ3Qgc2V0IHVwIHRvIGRvIHRoYXQgZHluYW1pY2FsbHkgZm9yIGp1c3QgYW55IGFyYml0cmFyeSBkZXZpY2UgcmlnaHQgbm93LCB0aG91Z2guXG5cbkhtbSwgd2FpdC4uLiBpcyB0aGVyZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIE1DVFA/IEFoLCB5ZXMhIEknbSBzZWVpbmcgaXQgbm93OiBNQ1RQIG92ZXIgc2VyaWFsIChgbWN0cC1zZXJpYWxgKSwgSTJDIChgbWN0cC1pMmNgKSwgSTNDIChgbWN0cC1pM2NgKSwgYW5kIFVTQiAoYG1jdHAtdXNiYCkuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IE1DVFAgb3ZlciBQQ0MuIFRoZSBjaGFsbGVuZ2UgaXMsIGhvdyBkbyB3ZSB0cmlnZ2VyIGBtY3RwX3BjY19kcml2ZXJfYWRkYD8gSXQgbG9va3MgbGlrZSBpdCB3b3VsZCBiZSB0b3VnaCB3aXRob3V0IGNyYWZ0aW5nIGN1c3RvbSBBQ1BJIHRhYmxlcy5cblxuQnV0IHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvbWFpbGJveC9wY2MuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IG1vZGlmaWNhdGlvbnMgdGhleSd2ZSBtYWRlIHRvIGBwY2MuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgcHJvYmFibHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg3OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDozMS43Mjc1Mjg2NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MTUxNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9pcnFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tYWlsYm94L3BjYy5jPTI4OT1zdGF0aWMgdm9pZCBwY2NfY2hhbl9hY2tub3dsZWRnZShzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4pXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzA5LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozMTA6ICogcGNjX21ib3hfaXJxIC0gUENDIG1haWxib3ggaW50ZXJydXB0IGhhbmRsZXJcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzExLSAqIEBpcnE6XFx0aW50ZXJydXB0IG51bWJlclxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTMxNS0gKi9cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzE2OnN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzE3LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz00OTM9c3RhdGljIGludCBwY2Nfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTUxMy1cXHRcXHRcXHRcXHRcXHRcXHRJUlFGX1NIQVJFRCA6IDA7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjUxNDpcXHRcXHRyYyA9IGRldm1fcmVxdWVzdF9pcnEoY2hhbi1cXHUwMDNlbWJveC1cXHUwMDNlZGV2LCBwY2hhbi1cXHUwMDNlcGxhdF9pcnEsIHBjY19tYm94X2lycSxcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNTE1LVxcdFxcdFxcdFxcdCAgICAgIGlycWZsYWdzLCBNQk9YX0lSUV9OQU1FLCBjaGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6MDA6MzQuMjg5MDUyMTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1MDM2MDUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBDQyBNYWlsYm94IEludGVycnVwdCBIYW5kbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBjYy5jYCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSBhcmVhcyB0aGF0IHdhcnJhbnQgbXkgYXR0ZW50aW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBgcGNjX21ib3hfaXJxYC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiB0aGUgYGNoYW5faW5fdXNlYCBmbGFnIGFuZCB0aGUgaW50ZXJydXB0IGNvbnRleHQuXG5cblRoZSBtb3N0IG5vdGFibGUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIHdpdGhpbiBgcGNjX21ib3hfZXJyb3JfY2hlY2tfYW5kX2NsZWFyYC4gTm93LCBpZiB0aGUgY2hhbm5lbCB0eXBlIGlzIGBBQ1BJX1BDQ1RfVFlQRV9FWFRfUENDX1NMQVZFX1NVQlNQQUNFYCwgdGhlIGVycm9yIGNoZWNrIGlzIHNraXBwZWQgYWx0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXaHkgYXJlIHNsYXZlIHN1YnNwYWNlcyB0cmVhdGVkIGRpZmZlcmVudGx5IGluIHRoaXMgcmVzcGVjdD8gSXMgdGhpcyBhIGtub3duIGhhcmR3YXJlIHF1aXJrLCBhIHNwZWNpZmljIG9wdGltaXphdGlvbiwgb3IgYSBwb3RlbnRpYWwgc291cmNlIG9mIGZ1dHVyZSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5PyBQZXJoYXBzIHRoaXMgcmVsYXRlcyB0byB0aGUgZXh0ZW5kZWQgUENDIGZ1bmN0aW9uYWxpdHkuXG5cblRoZW4sIGRvd24gaW4gYHBjY19tYm94X2lycWAsIEkgc2VlIHRoYXQgdGhlIHJldHVybiBjb2RlIGZyb20gYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgaXMgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGBtYm94X2NoYW5fdHhkb25lYCByZXR1cm4gdmFsdWUuIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgYHBjY19tYm94X2Vycm9yX2NoZWNrX2FuZF9jbGVhcmAgY2FuIHJldHVybiBhbmQgaG93IHRoYXQgdmFsdWUgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgZmxvdy4gQW5kIHRoZSBmbGFnIGBjaGFuX2luX3VzZWAgaXMgdXNpbmcgdGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgbWFjcm9zLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBlbmZvcmNlcyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHRvIHByZXZlbnQgcmFjZXMuXG5cblRoZSBsb2dpYyBmbG93IG5vdyBpczogY2hlY2sgaWYgYW4gaW50ZXJydXB0IGlzIGZvciB0aGUgUENDIGNoYW5uZWwsIGNoZWNrIGlmIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIHRoZW4gY2hlY2sgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4gT25seSBhZnRlciB0aGVzZSBjaGVja3MsIGlzIHRoZSBlcnJvciBjaGVjayBkb25lLiBOb3csIEkgc2VlIHRoZSBlcnJvciBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBzbGF2ZSBzdWJzcGFjZXMuIEZpbmFsbHksIGlmIGFsbCB0aGVzZSBjaGVja3MgYXJlIHN1Y2Nlc3NmdWwsIHRoZSBgY2hhbl9pbl91c2VgIGZsYWcgaXMgY2xlYXJlZCB1c2luZyBgV1JJVEVfT05DRWAuIEFuZCBmaW5hbGx5LCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGluIHRoZSBoYXJkd2FyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgcGNjX21ib3hfaXJxYCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFuZCB1bmRlcnN0YW5kIGl0cyBjYWxsaW5nIGNvbnRleHQuIElzIGl0IGNhbGxlZCBvZnRlbiwgYW5kIHdoYXQgYXJlIHRoZSBjcml0aWNhbCBwYXRocz8gVGhlbiwgSSB3aWxsIHByb2JlIGBwY2NfbWJveF9wcm9iZWAgdG8gc2VlIGhvdyBQQ0MgaXMgaW5pdGlhbGl6ZWQgYW5kIGlmIHRoaXMgY29kZSBpcyBldmVuIHJlYWNoYWJsZSwgb3IgaWYgaXQgaGFuZGxlcyBhIHNlbGRvbSB1c2VkIHN1YnN5c3RlbS4gS25vd2luZyB0aGF0IFBDQyBpcyBhbiBBQ1BJIGZlYXR1cmUsIEknbGwgYWxzbyBjb25zaWRlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIHN5c3RlbSBtaWdodCBub3QgZXZlbiBoYXZlIFBDQyB0YWJsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgcHJvcGVybHkgZ3VhcmRlZCBhbmQgZG9lc24ndCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gdGhvc2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzExLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjQzLjkzOTQxNTI3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU5MDI4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWFpbGJveC9wY2MuYz03NTg9c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy03OTYtLyoqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjc5NzogKiBwY2NfbWJveF9wcm9iZSAtIENhbGxlZCB3aGVuIHdlIGZpbmQgYSBtYXRjaCBmb3IgdGhlXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTc5OC0gKlxcdFBDQ1QgcGxhdGZvcm0gZGV2aWNlLiBUaGlzIGlzIHB1cmVseSB1c2VkIHRvIHJlcHJlc2VudFxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTgwNi0gKi9cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6ODA3OnN0YXRpYyBpbnQgcGNjX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtODA4LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MDU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX21ib3hfZHJpdmVyID0ge1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MDY6XFx0LnByb2JlID0gcGNjX21ib3hfcHJvYmUsXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkwNy1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTkxMj1zdGF0aWMgaW50IF9faW5pdCBwY2NfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTkyOC1cXHRwY2NfcGRldiA9IHBsYXRmb3JtX2NyZWF0ZV9idW5kbGUoXFx1MDAyNnBjY19tYm94X2RyaXZlcixcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6OTI5OlxcdFxcdFxcdHBjY19tYm94X3Byb2JlLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTMwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo0Ni43OTg0NDgzMDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0MDEyOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgUENDIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGBwY2NfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGNhbGxpbmcgYHBsYXRmb3JtX2NyZWF0ZV9idW5kbGVgIHdpdGggYSBmZXcga2V5IHBpZWNlczogdGhlIFBDQyBtYWlsYm94IGRyaXZlciAoYHBjY19tYm94X2RyaXZlcmApLCBhIHByb2JlIGZ1bmN0aW9uIChgcGNjX21ib3hfcHJvYmVgKSwgYW5kIHNvbWUgbnVsbCBhcmd1bWVudHMuIFRoaXMgaXMgc3RhbmRhcmQgZmFyZSBmb3IgYSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXA7IGl0IGxvb2tzIGxpa2Ugd2UncmUgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgcHJvYmluZyBtZWNoYW5pc20uXG5cbkJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoaXMgYHBjY19pbml0YCBpcyBjYWxsZWQgd2l0aCBgc3Vic3lzX2luaXRjYWxsKHBjY19pbml0KTtgLiBUaGF0IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUga2VybmVsJ3Mgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIGZsb3csIHdoaWNoIGdlbmVyYWxseSBwb2ludHMgdG8gZWFybHkgZGV2aWNlIG9yIG1vZHVsZSBzZXR1cCwgYW5kIG1lYW5zIHRoYXQgYHBjY19pbml0YCBpc24ndCBjYWxsZWQgZGlyZWN0bHkuIEl0J3MgZGVmZXJyZWQgdW50aWwgYSBsYXRlciBzdGFnZSBvZiB0aGUgYm9vdC5cblxuSGFuZyBvbi4uLiBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGJlY2F1c2UgYHBjY19pbml0YCBjaGVja3MgdGhlIHJldHVybiB2YWx1ZSBvZiBgYWNwaV9wY2NfcHJvYmUoKWAuIFRoYXQgaW1tZWRpYXRlbHkgY2hhbmdlcyB0aGUgZ2FtZS4gVGhpcyB3aG9sZSBzZXF1ZW5jZSBpcyBnb2luZyB0byBiZSBBQ1BJLWRlcGVuZGVudC4gVGhpcyBtZWFucyBpdCBpcyBsaWtlbHkgcHJvYmluZyB0aGUgQUNQSSBuYW1lc3BhY2UgZm9yIHRoZSBQQ0MgZGV2aWNlIGFuZCBkZWNpZGluZyB3aGV0aGVyIHRvIGluaXRpYWxpemUgdGhlIFBDQyBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHdoZXRoZXIgdGhhdCBkZXZpY2UgaXMgZm91bmQgaW4gdGhlIEFDUEkgdGFibGVzLiBUaGlzIGV4cGxhaW5zIHdoeSBgcGxhdGZvcm1fY3JlYXRlX2J1bmRsZWAgaXMgc2V0IHVwIGhlcmUsIGFuZCB0aGUgY2FsbCB0byBgcGNjX21ib3hfcHJvYmVgIGlzIGRlZmVycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjAwOjUxLjM0MjQ2NDA1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MjkwOTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3BpX3BjY19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21haWxib3gvcGNjLmM9NzI5PXN0YXRpYyB2b2lkIHBjY19wYXJzZV9zdWJzcGFjZV9zaG1lbShzdHJ1Y3QgcGNjX2NoYW5faW5mbyAqcGNoYW4sXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzUzLS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTQ6ICogYWNwaV9wY2NfcHJvYmUgLSBQYXJzZSB0aGUgQUNQSSB0cmVlIGZvciB0aGUgUENDVC5cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU1LSAqXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU3LSAqL1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo3NTg6c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNzU5LXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz05MTI9c3RhdGljIGludCBfX2luaXQgcGNjX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy05MjAtXFx0LyogQ2hlY2sgaWYgUENDIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiAqL1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzo5MjE6XFx0cmV0ID0gYWNwaV9wY2NfcHJvYmUoKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtOTIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo1My45MDUzODI3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTg3NDEzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBhY3BpX3BjY19wcm9iZWAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgZG93biB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgYGFjcGlfcGNjX3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLCBob3cgaXQncyBoYW5kbGluZyB0aGUgZGV0ZWN0aW9uIG9mIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCkgZGV2aWNlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBwcm9iaW5nIHByb2Nlc3MuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tbW9uIHBpdGZhbGxzIHdpdGggQUNQSSBkZXZpY2UgZW51bWVyYXRpb24sIHRoZSB2YXJpb3VzIHF1aXJrcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGRldmljZSBjb25mbGljdHMuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzPyBXaGF0IEFDUEkgbWV0aG9kcyBpcyBpdCBldmFsdWF0aW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgY29tbW9uIHNvdXJjZXMgb2YgYnVncywgbGlrZSBpbmNvcnJlY3QgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXM/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbXV0ZXggY29udGVudGlvbiwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2Nrcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgdGhlaXIgQUNQSSBpbXBsZW1lbnRhdGlvbnMsIHNpbmNlIHRoYXQgY2FuIHZhcnkgd2lsZGx5LiBUaGlzIHByb2JlIGZ1bmN0aW9uIGlzIHJlYWxseSB0aGUgbGluY2hwaW4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGludGltYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6MDA6NTkuNDkyNzk5NDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWFpbGJveC9wY2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTg6XFx0c3RhdGljIGludCBfX2luaXQgYWNwaV9wY2NfcHJvYmUodm9pZClcXG4gNzU5OlxcdHtcXG4gNzYwOlxcdFxcdGludCBjb3VudCwgaSwgcmMgPSAwO1xcbiA3NjE6XFx0XFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbiA3NjI6XFx0XFx0c3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpwY2N0X3RibDtcXG4gNzYzOlxcdFxcdHN0cnVjdCBhY3BpX3N1YnRhYmxlX3Byb2MgcHJvY1tBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRF07XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1BDQ1QsIDAsIFxcdTAwMjZwY2N0X3RibCk7XFxuIDc2NjpcXHRcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgIXBjY3RfdGJsKVxcbiA3Njc6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdC8qIFNldCB1cCB0aGUgc3VidGFibGUgaGFuZGxlcnMgKi9cXG4gNzcwOlxcdFxcdGZvciAoaSA9IEFDUElfUENDVF9UWVBFX0dFTkVSSUNfU1VCU1BBQ0U7XFxuIDc3MTpcXHRcXHQgICAgIGkgXFx1MDAzYyBBQ1BJX1BDQ1RfVFlQRV9SRVNFUlZFRDsgaSsrKSB7XFxuIDc3MjpcXHRcXHRcXHRwcm9jW2ldLmlkID0gaTtcXG4gNzczOlxcdFxcdFxcdHByb2NbaV0uY291bnQgPSAwO1xcbiA3NzQ6XFx0XFx0XFx0cHJvY1tpXS5oYW5kbGVyID0gcGFyc2VfcGNjX3N1YnNwYWNlO1xcbiA3NzU6XFx0XFx0fVxcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfZW50cmllc19hcnJheShBQ1BJX1NJR19QQ0NULFxcbiA3Nzg6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3BjY3QpLCBwcm9jLFxcbiA3Nzk6XFx0XFx0XFx0XFx0QUNQSV9QQ0NUX1RZUEVfUkVTRVJWRUQsIE1BWF9QQ0NfU1VCU1BBQ0VTKTtcXG4gNzgwOlxcdFxcdGlmIChjb3VudCBcXHUwMDNjPSAwIHx8IGNvdW50IFxcdTAwM2UgTUFYX1BDQ19TVUJTUEFDRVMpIHtcXG4gNzgxOlxcdFxcdFxcdGlmIChjb3VudCBcXHUwMDNjIDApXFxuIDc4MjpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJFcnJvciBwYXJzaW5nIFBDQyBzdWJzcGFjZXMgZnJvbSBQQ0NUXFxcXG5cXFwiKTtcXG4gNzgzOlxcdFxcdFxcdGVsc2VcXG4gNzg0OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIkludmFsaWQgUENDVDogJWQgUENDIHN1YnNwYWNlc1xcXFxuXFxcIiwgY291bnQpO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIDc4NzpcXHRcXHR9IGVsc2Uge1xcbiA3ODg6XFx0XFx0XFx0cGNjX2NoYW5fY291bnQgPSBjb3VudDtcXG4gNzg5OlxcdFxcdH1cXG4gNzkwOlxcdFxcbiA3OTE6XFx0XFx0YWNwaV9wdXRfdGFibGUocGNjdF90YmwpO1xcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHRyZXR1cm4gcmM7XFxuIDc5NDpcXHR9XFxuIDc5NTpcXHRcXG4gNzk2OlxcdC8qKlxcbiA3OTc6XFx0ICogcGNjX21ib3hfcHJvYmUgLSBDYWxsZWQgd2hlbiB3ZSBmaW5kIGEgbWF0Y2ggZm9yIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMDo1OS40OTI4OTI1MzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU0Mzk3NDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWNwaV9wY2NfcHJvYmVgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgZnVuY3Rpb24gYWJzb2x1dGVseSBuZWVkcyB0aGUgYFBDQ1RgIEFDUEkgdGFibGUgdG8gZXhpc3QuIElmIGl0J3Mgbm90IHRoZXJlLCBJIGdldCBhIGAtRU5PREVWYCBlcnJvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGluamVjdCBBQ1BJIHRhYmxlcywgYnV0LCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBidWlsdC1pbiBtZWNoYW5pc20gZm9yIGR5bmFtaWNhbGx5IGluamVjdGluZyBhcmJpdHJhcnkgQUNQSSB0YWJsZXMgZHVyaW5nIGZ1enppbmcgZm9yLCB3ZWxsLCAqbW9zdCogZGV2aWNlcy4gQ29uZmlnZnMgb3Igc29tZXRoaW5nIHNpbWlsYXIgbWlnaHQgb2ZmZXIgYSB3b3JrYXJvdW5kIGJ1dCBzeXprYWxsZXIgZG9lc24ndCBzZWVtIHRvIG5hdGl2ZWx5IGRvIHRoaXMuIE5vLCBpdCByZWxpZXMgb24gUUVNVSwgd2hpY2ggaW4gdHVybiwgZG9lc24ndCBwcm92aWRlIHRoZSBgUENDVGAgdGFibGUgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBhIGRlYWQgZW5kLlxuXG5JIHdvbmRlcmVkIGlmIHRoZXJlIHdhcyBhbm90aGVyIGVudHJ5IHBvaW50IHRvIHRoaXMgY29kZSwgYW5kIHRoZSBgcGNjX21ib3hfcXVlcnlfY2hhbm5lbGAgZnVuY3Rpb24gKmlzKiBleHBvcnRlZCwgYnV0IGFnYWluLCB0aGlzIHNlZW1zIHRvIGJlIHBhcnQgb2YgdGhlIGBhY3BpX3BjY2Agc3Vic3lzdGVtLiBUaGUgYG1jdHBfcGNjX2RyaXZlcl9hZGRgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIEFDUEkgZGV2aWNlIHdpdGggSElEIGBETVQwMDAxYCBpcyBmb3VuZCwgYW5kIG9uY2UgYWdhaW4sIHRoaXMgKnJlcXVpcmVzKiBBQ1BJIHRhYmxlcy4gVGhlIGBtY3RwX3BjY19kcml2ZXJgIGlzIGFuIGBhY3BpX2RyaXZlcmAsIHRoZXJlJ3Mgbm8gd2F5IGFyb3VuZCBpdC4gQW5kIHRoZSBgcGNjLmNgIGNvZGUgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIFBDQ1QgdGFibGUuXG5cblNvLCBoZXJlJ3MgbXkgY3JpdGljYWwgcXVlc3Rpb246IEdpdmVuIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgQUNQSSB0YWJsZXMgKHNwZWNpZmljYWxseSwgdGhlIFBDQ1QgdGFibGUgYW5kIHRoZSBISUQgRE1UMDAwMSBkZXZpY2UpIGFuZCB0aGUgbGFjayBvZiBhIHN0cmFpZ2h0Zm9yd2FyZCBBQ1BJIHRhYmxlIGluamVjdGlvbiBtZXRob2QgaW4gc3l6a2FsbGVyLCBzaG91bGQgSSBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWA/XG5cblRoZSBwcm9tcHQgSSBhbSB3b3JraW5nIGZyb20gaXMgcHJldHR5IGNsZWFyIG9uIHRoaXM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIEJpbmdvLiBTaW5jZSB0aGVzZSBwYXJ0aWN1bGFyIEFDUEkgdGFibGVzIGFyZSAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHN5emthbGxlciBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgaW5qZWN0IHRoZW0gaW4gYSBzdGFuZGFyZCB3YXksIHRoZW4gaXQgaXMsIGluZGVlZCwgaW1wb3NzaWJsZSB0byByZWFjaCB0aGlzIGNvZGUuXG5cbldhaXQuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgc3l6a2FsbGVyIGxldmVyYWdlIGBDT05GSUdfQUNQSV9DT05GSUdGU2A/IFRoYXQgd291bGQgYWxsb3cgdXNlcnNwYWNlIHRvIGxvYWQgQUNQSSB0YWJsZXMuIEJ1dCBubywgc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIGBDT05GSUdfQUNQSV9DT05GSUdGU2AgdG8gaW5qZWN0IGFyYml0cmFyeSB0YWJsZXMuIFdhaXQuLi4gaGFzIHN5emthbGxlciBjcmVhdGVkIGEgc3l6X2FjcGlfLi4uIHN5c3RlbSBjYWxsPyBOby5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyB3aXRoIHN5emthbGxlcidzIEFDUEkgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMTowOS4wMzY4Njk4NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzU3MTAzNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9hY3BpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMToxMS41MTI1OTAyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTA2MjYzMjk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgY29kZSBjaGFuZ2VzIHNlZW0gcmVsYXRlZCB0byBgY29uZmlnZnNgLCBidXQgSSBxdWlja2x5IHJlYWxpemVkIFN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGdlbmVyYXRlIHZhbGlkIEFDUEkgdGFibGVzIHRvIHJlYWNoIGl0LiBUaGF0J3MgYSBub24tc3RhcnRlci4gQWxyaWdodCwgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZS4gVGhlIGNvcmUgZnVuY3Rpb25zIEknbSBsb29raW5nIGF0IGFyZSBhbGwgdGllZCB0byB0aGUgUENDIGNoYW5uZWwsIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gdGhlIFBDQ1QgQUNQSSB0YWJsZS4gUUVNVSwgYXMgSSBrbm93LCBkb2Vzbid0IHByb3ZpZGUgdGhpcyB0YWJsZSBieSBkZWZhdWx0LCBhbmQgU3l6a2FsbGVyIGNhbid0IGluamVjdCBpdC4gU28sIHRoYXQncyBhbHJlYWR5IGEgc2lnbmlmaWNhbnQgaHVyZGxlLlxuXG5JIGRvdWJsZS1jaGVja2VkIHRvIHNlZSBpZiBRRU1VIHByb3ZpZGVzIHRoZSBQQ0NUIHRhYmxlIGluIGFueSBzcGVjaWZpYyBlbXVsYXRpb24gc2NlbmFyaW8uIE5vcGUuIEl0J3Mgbm90IHN0YW5kYXJkLiBDb3VsZCBgbWN0cC1wY2NgIGJlIGZ1enplZCBpbiBzb21lIHJvdW5kYWJvdXQgd2F5PyBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBTeXprYWxsZXIgKmNvdWxkKiB0cnksIGJ1dCBpdCdzIGp1c3QgZ29pbmcgdG8gd2FzdGUgdGltZSBzaW5jZSBpdCB3b24ndCBhY3R1YWxseSBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgY29kZS5cblxuTm93IEkgcmVtZW1iZXIgdGhlIHByb21wdDogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiIFRoYXQncyBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBpcyBhbiBBQ1BJIGRyaXZlciBmb3IgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSAoTUNUUCBvdmVyIFBDQyksIGFuZCBpdCByZWxpZXMgb24gQUNQSSB0YWJsZXMgdGhhdCBzaW1wbHkgYXJlbid0IHByZXNlbnQuIEl0IGlzIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuSSBsb29rZWQgZm9yIGFsdGVybmF0aXZlcy4gSXMgdGhlcmUgYSBgbmV0ZGV2YCBlbnRyeSBwb2ludD8gVGhlcmUncyBgbWN0cF9wY2NfdHhgLCBidXQgdGhhdCBvbmx5IGhhcHBlbnMgaWYgYSBuZXRkZXYgaXMgY3JlYXRlZCwgYW5kIHRoZSBuZXRkZXYgaXMgb25seSBjcmVhdGVkIGluIGBtY3RwX3BjY19kcml2ZXJfYWRkYC4gVGhhdCwgaW4gdHVybiwgaXMgYW4gQUNQSSBwcm9iZSBmdW5jdGlvbi4gU28gdGhhdCdzIGFsc28gZ29pbmcgdG8gZmFpbC4gVGhhdCBkcml2ZXIsIGFsb25nIHdpdGggb3RoZXIgZW50cnkgcG9pbnRzLCBpcyBuZXZlciBnb2luZyB0byBydW4gd2l0aG91dCB0aGUgUENDVCBhbmQgRE1UMDAwMS5cblxuVGltZSB0byByZXZpZXcgdGhlIHByb21wdCBhZ2FpbjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgUGVyZmVjdC4gVGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cbkxldCBtZSBjb25maXJtIHRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgYHBjY19tYm94X3Byb2JlYCB1c2luZyBzb21lIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbi4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iZWQgdGhyb3VnaCBhIHBsYXRmb3JtIGRyaXZlciwgYnV0IGl0IGNoZWNrcyBmb3IgQUNQSSB0YWJsZXMgZmlyc3QgYmVmb3JlIGNyZWF0aW5nIHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFRoZSBBQ1BJIHRhYmxlIGlzIG5vdCBwcmVzZW50LiBBbmQgYG1jdHBfcGNjX2RyaXZlcmAsIGlzIGFuIEFDUEkgZHJpdmVyLCBzbyBpcyBwcm9iZWQgYnkgdGhlIEFDUEkgc3Vic3lzdGVtLiBTaW5jZSBRRU1VJ3MgQUNQSSB0YWJsZXMgZG8gbm90IGNvbnRhaW4gdGhlIGBETVQwMDAxYCBISUQsIGl0IHdvbid0IGJlIHByb2JlZCBlaXRoZXIuXG5cbkNvbmNsdXNpb246IHRoZSB3aG9sZSBwYXRjaCBpcyBkZWFkIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cbkknbSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBnaXZlbiB0aGUgY3VycmVudCBBQ1BJIHRhYmxlIGNvbmZpZ3VyYXRpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMzIsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDowMToyNi41NzUyMjYwNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IE1DVFAgb3ZlciBQQ0MgZHJpdmVyIGFuZCBtb2RpZmllcyB0aGUgUENDIG1haWxib3ggZHJpdmVyLiBCb3RoIHJlcXVpcmUgc3BlY2lmaWMgQUNQSSB0YWJsZXMgKFBDQ1QgYW5kIGEgZGV2aWNlIHdpdGggSElEIERNVDAwMDEpIHRvIGJlIHByZXNlbnQgaW4gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGVzZSBBQ1BJIHRhYmxlcyBhcmUgbm90IHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5qZWN0ZWQgYnkgc3l6a2FsbGVyLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgTUNUUCBvdmVyIFBDQyBkcml2ZXIgYW5kIG1vZGlmaWVzIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIuIEJvdGggcmVxdWlyZSBzcGVjaWZpYyBBQ1BJIHRhYmxlcyAoUENDVCBhbmQgYSBkZXZpY2Ugd2l0aCBISUQgRE1UMDAwMSkgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZXNlIEFDUEkgdGFibGVzIGFyZSBub3QgcHJvdmlkZWQgYnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbmplY3RlZCBieSBzeXprYWxsZXIsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp6dxz[1] Phase: Running StartedAt: 2026-07-22 14:01:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp6dxz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 14:01:50 +0000 UTC FinishedAt: 2026-07-22 14:02:12 +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,}