Name: series-workflow94l6z Phase: Failed StartedAt: 2026-08-03 06:52:54 +0000 UTC FinishedAt: 2026-08-03 07:09:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94l6z[0] Phase: Succeeded StartedAt: 2026-08-03 06:52:54 +0000 UTC FinishedAt: 2026-08-03 07:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94l6z[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 06:52:54 +0000 UTC FinishedAt: 2026-08-03 07:08:41 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhiNGI1NzkxZjcyZDQwYTRlOWViZTYwNmEzOWQzOTk2M2U1Y2Q2YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDA3OjA3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjU2ZmJkYzk1OWRlY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCAmIzQzOzEsMzMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4KVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbiYjNDM7XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuJiM0MztcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuJiM0MztcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuJiM0MztcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4mIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0d3hfZXJyKHd4LCBcJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcbiYjNDM7XHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbiYjNDM7XHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4mIzQzO1x0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxuJiM0MztcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcbiYjNDM7XHQgKiBoYXJkd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdC8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovXG4mIzQzO1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xuJiM0MztcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3Jlc2V0X3dxXyV4XCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcbiYjNDM7XHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuJiM0MztcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVx1MDAzZXR4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4mIzQzO1x0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4mIzQzO1x0dTMyIGksIGo7XG4mIzQzO1xuJiM0MztcdGlmICghd3gtXHUwMDNlbnVtX3ZmcylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHFfcGVyX3Bvb2w7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHUzMiBoLCB0O1xuJiM0MztcbiYjNDM7XHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbiYjNDM7XHRcdFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChoICE9IHQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuJiM0MztcdFx0LyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuJiM0MztcdFx0ICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZ1xuJiM0MztcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4mIzQzO1x0XHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXG5cJiMzNDspO1xuJiM0MztcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuJiM0MztcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4mIzQzO1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuJiM0MztcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfZXJyKHd4LCBcJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LFxuJiM0MztcdFx0XCYjMzQ7RGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfV1hfRVJSX0hfXG4mIzQzOyNkZWZpbmUgX1dYX0VSUl9IX1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4mIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyLi4xMjJjNDk1MmQyMDNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuJiM0MztcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICYjNDM7Mjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4mIzQzO1x0dTY0IGRhdGE7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCA0NzZiNzEwNDlmN2U2Li5lZDVhYWQ3ODU3YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF92Zl9saWIuaFwmIzM0O1xuQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuJiM0MztcbiYjNDM7XHRoZWFkID0gcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuJiM0MztcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKChoZWFkIFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCAmIzQzOyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xuJiM0MztcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4mIzQzO1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuJiM0MztcdFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4mIzQzO1x0cmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XG4mIzQzO1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuJiM0MztcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXG5AQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbiYjNDM7XHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuJiM0MztcdFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XG5AQCAtMzExNCw3ICYjNDM7MzE1MSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgJiM0MzszMjAxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcbiBvdXQ6XG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXHUwMDNlcGRldik7XG4mIzQzO1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4mIzQzO1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuJiM0MztcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGJjNjcxNzg2OTc4ZTUuLjlkODVkMzk5ZTE3ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDMwIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuJiM0MztcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaykge1xuJiM0MztcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZ3eC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cmVtb3ZlZCBQSEMgb24gJXNcXG5cJiMzNDssIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4mIzQzO1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Li5hZDJmODI0ODc1ZDUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuQEAgLTEwLDYgJiM0MzsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiAmIzQzOzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgJiM0MzsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICYjNDM7MTI5MCw3IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcbiBcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMzk1LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0MztcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuJiM0MztcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7XG4gXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xuIFxuQEAgLTE0MjMsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xuIFx0c3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqL1xuIH07XG4gXG5AQCAtMTUwNSw3ICYjNDM7MTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuJiM0MztcdGRldl93YXJuKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2RiZyhcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggYjJlMTkxOTgyODAzMi4uMTk2MGY3MTU0MTUxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbiYjNDM7XHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4mIzQzO1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3hfY29uZmlndXJlKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgJiM0Mzs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyAmIzQzOzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiAmIzQzOzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4mIzQzO1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0bmdiZV9kb3duKHd4KTtcbiYjNDM7XHRuZ2JlX3VwKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiYjNDM7XHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03OTYsNiAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi5lYjkxYzRmMjhlY2Q0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5AQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbiYjNDM7XHQvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLlxuJiM0MztcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbiYjNDM7XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pcnEod3gpO1xuJiM0MztcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4mIzQzO1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7b3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC04MTQsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgJiM0MzsxMDAxLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyAmIzQzOzEwMTQsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgJiM0MzsxMDI1LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZS90eGdiZSkgcGh5c2ljYWwgUENJZSBldGhlcm5ldCBkcml2ZXJzIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IHRpbWVvdXQgcmVjb3ZlcnkuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAwNzowNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQpAQCAtNCw1ICYjNDM7NCw1IEBACiAKIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm8KIAotbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vCiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vCiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgewomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCiYjNDM7CXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi8KJiM0MzsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwlwY2lfc2V0X21hc3RlcihwZGV2KTsKJiM0MzsJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJd3gtJmd0O2Rvd25fc3VzcGVuZCh3eCk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBuZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7CiYjNDM7CS5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLAomIzQzOwkuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsCiYjNDM7CS5yZXN1bWUgPSB3eF9pb19yZXN1bWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtSZXNldCBhZGFwdGVyLlxuJiMzNDspOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLAomIzQzOwkgKiBhYm9ydCB0aGUgcmVzZXQgdGFzayB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhIGRlYWQgb3IgdW5tYW5hZ2VkCiYjNDM7CSAqIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudCh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpIHsKJiM0MzsJCS8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovCiYjNDM7CQlpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpCiYjNDM7CQkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF8KJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF8KJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjsKJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7CiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA0NzZiNzEwNDlmN2U2Li5lZDVhYWQ3ODU3YmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7d3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF92Zl9saWIuaCYjMzQ7CkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZykKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLSZndDtuZXRkZXYsIHJpbmctJmd0O3F1ZXVlX2luZGV4KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKJiM0MzsKJiM0MzsJaGVhZCA9IHJpbmctJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CXRhaWwgPSByaW5nLSZndDtuZXh0X3RvX3VzZTsKJiM0MzsKJiM0MzsJcmV0dXJuICgoaGVhZCAmbHQ7PSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctJmd0O2NvdW50KSAtIGhlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1MzIgdHhfZG9uZV9vbGQgPSByaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZDsKJiM0MzsJdTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTsKJiM0MzsJdTMyIHR4X2RvbmUgPSByaW5nLSZndDtzdGF0cy5wYWNrZXRzOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSAmYW1wOyZhbXA7IHR4X3BlbmRpbmcpCiYjNDM7CQkvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqLwomIzQzOwkJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwkvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqLwomIzQzOwlyaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7CiYjNDM7CS8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi8KJiM0MzsJY2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvbgpAQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsCiAJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLAogCQkJCSAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpOwogCiYjNDM7CWlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiYjNDM7CQl3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCiAJaWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgJmFtcDsmYW1wOyBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctJmd0O25ldGRldikgJmFtcDsmYW1wOwogCQkgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSAmZ3Q7PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CkBAIC0zMTE0LDcgJiM0MzszMTUxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAllbHNlIGlmIChjaGFuZ2VkICZhbXA7IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpCiAJCXd4X3NldF9yeF9tb2RlKG5ldGRldik7CiAKQEAgLTMxNjQsNyAmIzQzOzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCiBvdXQ6CiAJaWYgKG5lZWRfcmVzZXQgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTsKIAomIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX2NsZWFyX21hc3Rlcih3eC0mZ3Q7cGRldik7CiYjNDM7CW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUod3gtJmd0O25ldGRldik7CiYjNDM7CXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwomIzQzOwl3eF9wdHBfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLiYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTsKIAlpbnQgdHNfZG9uZTsKIAomIzQzOwlpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIEhaOwomIzQzOwogCXRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7CiAKIAl3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpOwpAQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KQogfQogRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7CiAKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykKJiM0MzsJCXB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYikgewomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwomIzQzOwkJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl3eC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJCWRldl9pbmZvKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xuJiMzNDssIHd4LSZndDtuZXRkZXYtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggNjVlM2U1NWRiMWNmZi4uMmViYTVhYjU5OTI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsNyBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLAogCVdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMzk1LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHsKIAl2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTsKIAl2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7Ci0Jdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0MzsJdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiYjNDM7CXZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpOwogCXZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7CiAKQEAgLTE0MjMsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3ggewogCiAJc3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxOwogCXN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi8KIH07CiAKQEAgLTE1MDUsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KQogCiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFwKIAlkZXZfZXJyKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQotCiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXAomIzQzOwlkZXZfd2FybigmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9kYmcoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwppbmRleCBiMmUxOTE5ODI4MDMyLi4xOTYwZjcxNTQxNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCkBAIC01OSw3ICYjNDM7NTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTsKIAlrdmZyZWUodGVtcF9yaW5nKTsKIAotCXd4X2NvbmZpZ3VyZSh3eCk7CiAJbmdiZV91cCh3eCk7CiAKIGNsZWFyX3Jlc2V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCmluZGV4IGExNjIyMTk5NTkwOWYuLjE0YzAwMjI4Y2VkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzk2LDYgJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4Ni4uYzkyMzNkYzdhZTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaApAQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTsKIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpOwogCiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwppbmRleCBjMjc3ODYzYmFmNjdhLi5lYjkxYzRmMjhlY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X21ieC5oJiMzNDsKQEAgLTkzLDEyICYjNDM7OTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIAogCS8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi8KIAltc2xlZXAoMjAwKTsKIAomIzQzOwkvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLgomIzQzOwkgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsCiYjNDM7CSAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTsKIAlpZiAoZXJyID09IC1FTk9ERVYpCiAJCXNldF9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKQEAgLTEwNiw2ICYjNDM7MTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogCiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKQEAgLTEyMyw2ICYjNDM7MTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpOwogCXR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpOwogCXd4X3VwZGF0ZV9zdGF0cyh3eCk7CiYjNDM7CXd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7CiYjNDM7CXd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTsKIAogCXd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpOwogfQpAQCAtMTQ0LDYgJiM0MzsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqLwogCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpOwogCXd4X25hcGlfZW5hYmxlX2FsbCh3eCk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KQogCXU4IG9sZF9hZGRyW0VUSF9BTEVOXTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAllcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7CiAJaWYgKGVyciAhPSAwKQogCQl3eF9lcnIod3gsICYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAl3eF9pcnFfZGlzYWJsZSh3eCk7CiAJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiAKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiAKQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCkKIAl0eGdiZV91cF9jb21wbGV0ZSh3eCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJd3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTsKJiM0MzsJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKJiM0MzsJd3hfZnJlZV9pcnEod3gpOwomIzQzOwl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzOwl0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlCiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQpAQCAtNDA4LDYgJiM0Mzs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDtzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjOwogCXd4LSZndDtkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0OwomIzQzOwl3eC0mZ3Q7ZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kOwogCXNldF9iaXQoMCwgJmFtcDt3eC0mZ3Q7ZndkX2JpdG1hc2spOwogCiAJc3dpdGNoICh3eC0mZ3Q7bWFjLnR5cGUpIHsKQEAgLTUxOCwxMiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCXd4X3B0cF9zdG9wKHd4KTsKIAl0eGdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CiAJdHhnYmVfZnJlZV9taXNjX2lycSh3eC0mZ3Q7cHJpdik7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU0NCw3ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJd3hfY29udHJvbF9odyh3eCwgZmFsc2UpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNjA2LDExICYjNDM7NjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKIAltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiB9CiAKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7IHJlaW5pdCkKIAkJdHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7CiAJZWxzZQogCQl0eGdiZV9yZXNldCh3eCk7CkBAIC02NTQsNiAmIzQzOzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtODE0LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCiYjNDM7CWVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9tYWNfdGFibGU7CiYjNDM7CiAJdHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04ODksNiAmIzQzOzkzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlbW92ZV9waHk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC05MTYsNiAmIzQzOzk2Niw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTk0OSw2ICYjNDM7MTAwMSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk2MCw3ICYjNDM7MTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTcwLDYgJiM0MzsxMDI1LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiLi4zZTkzYTNmMzA5YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdOwogdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTsKIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7Ci12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpOwogCiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXAogCXVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUwNgoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDE0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIFdhbmd4dW4gZXRoZXJuZXQgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIFBDSSBlcnJvcnMgYW5kIFR4IHRpbWVvdXRzLCB3aXRoIHNvbWUgaGFuZyBkZXRlY3Rpb24gbG9naWMgYXMgd2VsbC4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFjcm9zcyBhIGZldyBmaWxlcyBpbiB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhbmd4dW4uLi4gaXNuJiMzOTt0IHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUM/JiMzNDsgSSYjMzk7dmUgc2VlbiB0aGVzZSBiZWZvcmU7IHRoZXkmIzM5O3JlIG5vdCBleGFjdGx5IGdlbmVyaWMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEFyZSB0aGVzZSBkcml2ZXJzIGRlcGVuZGVudCBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgd291bGRuJiMzOTt0IGVtdWxhdGU/IEkgcHVsbCB1cCBzb21lIGRvY3VtZW50YXRpb24sIGFuZCB5ZXAsIGl0JiMzOTtzIGEgJiMzNDtXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyLiYjMzQ7IENvbmZpcm1lZC4gVGhleSYjMzk7cmUgcGh5c2ljYWwgTklDIGRyaXZlcnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlc2UgbWVhbmluZ2Z1bGx5PwoKTm93LCBJIGdvIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucywgYW5kIEkgc2VlIHRoZSBjcnVjaWFsIGxpbmU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLgoKTGV0JiMzOTtzIGxvb2sgYXQgUUVNVSYjMzk7cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSBrbm93IFFFTVUgZW11bGF0ZXMgdGhlIHN0YW5kYXJkIE5JQ3MuIEJ1dCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZXNlIFdhbmd4dW4gY2FyZHMuIFNvIHRoZSBjb2RlIHBhdGhzIGJlaW5nIG1vZGlmaWVkIGhlcmUgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUuIENhbiBTeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBoZWxwPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMsIGJ1dCB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHdpbGwgbGlrZWx5IGZhaWwgd2hlbiBpdCB0cmllcyB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZXNlIGNhcmRzIChETUEgcmluZ3MsIFBIWSBsaW5rIHN0YXR1cykganVzdCB3b24mIzM5O3QgYmUgdGhlcmUuIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRoYXQgdGhlc2Ugc29ydHMgb2YgZHJpdmVycyBhcmUgbm90IGZ1enphYmxlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGp1c3QgcmVndWxhciBOSUNzLiBUaGV5IGFyZSAxRy8xMEcgTklDcyBmcm9tIEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5LCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgbm90IGEgc3RhbmRhcmQgTklDLCBvciBTbWFydE5JQyB0aGF0IGlzIGVtdWxhdGVkLgoKU28sIHNpbmNlIHRoZXNlIGRyaXZlcnMgZGVwZW5kIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0JiMzOTtzIGEgbm8tZ28gZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4gVGhlIHByb2JlIG1pZ2h0IHRyaWdnZXIgdmlhIHN5emthbGxlciwgYnV0IG5vdGhpbmcgd2lsbCB3b3JrIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGNhcmQuIFRoZSBgbmRvX29wZW5gLCBgbmRvX3N0YXJ0X3htaXRgLCBgbmRvX3R4X3RpbWVvdXRgLCBhbmQgUENJIGVycm9yIGhhbmRsZXJzLCBhbGwgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLCBhcmUgY29tcGxldGVseSBkZWFkIGNvZGUgaW4gYSBRRU1VIGVudmlyb25tZW50LgoKTGV0JiMzOTtzIGNoZWNrIGlmIHN5emthbGxlciBjdXJyZW50bHkgZnV6emVzIGl0LiBJIGNhbiYjMzk7dCBzZWFyY2ggc3lzbGFuZyBmaWxlcyBkaXJlY3RseSwgcGVyIGluc3RydWN0aW9ucywgYnV0IEkgY2FuIHJlYXNvbiBhYm91dCBpdC4gUGh5c2ljYWwgUENJZSBOSUNzIG5vdCBlbXVsYXRlZCBieSBRRU1VIGNhbm5vdCBiZSBmdW5jdGlvbmFsbHkgZnV6emVkLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLiBBbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudDogaGFyZHdhcmUtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyIGZvciBXYW5neHVuIE5JQ3MgdGhhdCYjMzk7cyB1bnJlYWNoYWJsZS4KCioqRmluYWwgVmVyZGljdDoqKiBgV29ydGhGdXp6aW5nOiBGYWxzZWAuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbmFjY2Vzc2libGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6MDc6NTcuMTkxNzYzNjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDAzNjM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6MDc6NTcuMTkxNzY4OTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg0MDY2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMDc6MDc6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuQEAgLTQsNSArNCw1IEBAXFxuIFxcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG4gXFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xcbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cXG4gbGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMzMiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkge1xcbitcXHRcXHRydG5sX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cXG4rXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4rXFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XFxuK1xcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgZmFsc2UpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcXG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcXG4rXFx0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuK1xcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcXG4rXFx0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0dTE2IHZpZCwgcGNpX2NtZDtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcXHUwMDI2dmlkKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcXHUwMDI2cGNpX2NtZCk7XFxuK1xcbitcXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXFxuK1xcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2Fybih3eCwgXFxcIlJlc2V0IGFkYXB0ZXIuXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxcbitcXHQgKiBhYm9ydCB0aGUgcmVzZXQgdGFzayB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhIGRlYWQgb3IgdW5tYW5hZ2VkXFxuK1xcdCAqIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudCh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0LyogRG91YmxlIGNoZWNrOiBWZXJpZnkgaWYgdGhlIFBDSWUgZXJyb3IgaXMgc3RpbGwgcHJlc2VudC4gKi9cXG4rXFx0XFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHRcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XFxuK1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcXG4rXFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3gtXFx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc19yZXNldF93cV8leFxcXCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMSwgd3gtXFx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuK1xcdGlmICghd3gtXFx1MDAzZXJlc2V0X3dxKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXFx1MDAyNnd4LVxcdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xcbitcXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuK1xcdHUzMiBpLCBqO1xcbitcXG4rXFx0aWYgKCF3eC1cXHUwMDNlbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xcbitcXHRcXHRcXHR1MzIgaCwgdDtcXG4rXFxuK1xcdFxcdFxcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcdFxcdFxcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaCAhPSB0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xcbitcXHRcXHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcXG4rXFx0XFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcXG4rXFx0XFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXFxuK1xcdFxcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdFxcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XFxuK1xcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcXG4rXFx0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X2Vycih3eCwgXFxcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcXG4rfVxcbitcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcXG4rXFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0d3hfd2Fybih3eCxcXG4rXFx0XFx0XFxcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcXFxuXFxcIixcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgsXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XFxuK1xcbitcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXFx1MDAzZW5ldGRldiwgdHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1dYX0VSUl9IX1xcbisjZGVmaW5lIF9XWF9FUlJfSF9cXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XFxuK1xcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyaW5nLVxcdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xcbiBcXG4rXFx0Yml0bWFwX3plcm8ocmluZy1cXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cXG4gXFx0bWVtc2V0KHJpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxcbiBcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cXHUwMDNlY291bnQpO1xcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcXG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXFx1MDAyNnd4LVxcdTAwM2VzdGF0cztcXG4rXFx0dTY0IGRhdGE7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlIFxcdTAwM2U9IHd4X21hY19hbWwpXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuK1xcdFxcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdFxcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xcbitcXG4rXFx0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cXG4rXFx0aWYgKCFkYXRhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IDQ3NmI3MTA0OWY3ZTYuLmVkNWFhZDc4NTdiZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF92Zl9saWIuaFxcXCJcXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cXHUwMDNlbmV0ZGV2LCByaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XFxuK1xcbitcXHRoZWFkID0gcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFx0dGFpbCA9IHJpbmctXFx1MDAzZW5leHRfdG9fdXNlO1xcbitcXG4rXFx0cmV0dXJuICgoaGVhZCBcXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cXHUwMDNlY291bnQpIC0gaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcXG4rXFx0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcXG4rXFx0dTMyIHR4X2RvbmUgPSByaW5nLVxcdTAwM2VzdGF0cy5wYWNrZXRzO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXFx1MDAyNlxcdTAwMjYgdHhfcGVuZGluZylcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cXG4rXFx0XFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cXG4rXFx0cmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xcbitcXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXFxuK1xcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcXG4gXFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxcbiBcXHRcXHRcXHRcXHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcXG4gXFxuK1xcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XFxuK1xcdFxcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxcbiBcXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XFxuIFxcbiBcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXHRlbHNlIGlmIChjaGFuZ2VkIFxcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcXG4gXFx0XFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcXG4gXFxuQEAgLTMxNjQsNyArMzIwMSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcbiBvdXQ6XFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM3Myw1ICszNDEwLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xcbiBcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGNpX2NsZWFyX21hc3Rlcih3eC1cXHUwMDNlcGRldik7XFxuK1xcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xcbitcXHR3eF9wdHBfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGJjNjcxNzg2OTc4ZTUuLjlkODVkMzk5ZTE3ZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKVxcbitcXHRcXHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHd4LVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfY2xvY2spIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHRcXHRkZXZfaW5mbyhcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcInJlbW92ZWQgUEhDIG9uICVzXFxcXG5cXFwiLCB3eC1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuYW1lKTtcXG4rXFx0fVxcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xcbitcXG4gLyoqXFxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5pbmRleCA1MGRiOTBhNmUzZWU2Li5hZDJmODI0ODc1ZDUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxcbiBcXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXFxcXG4rXFx0XFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXFxcXG4rXFx0XFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcXG4rXFxuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxcbkBAIC0xMDQwLDYgKzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xcbiBcXHR1NjQgcmVzdGFydF9xdWV1ZTtcXG4gXFx0dTY0IHR4X2J1c3k7XFxuK1xcdHUzMiB0eF9kb25lX29sZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXFxcXG4gXFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cXHUwMDNlbmV4dClcXG4gXFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XFxuK1xcdFdYX1RYX0RFVEVDVF9IQU5HLFxcbitcXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxcbitcXHRXWF9SSU5HX1NUQVRFX05CSVRTXFxuK307XFxuK1xcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xcbiBcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cXG5AQCAtMTA3NCw2ICsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcXG4gXFx0XFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XFxuIFxcdH07XFxuK1xcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcXG4gXFx0dTggX19pb21lbSAqdGFpbDtcXG4gXFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xcbiBcXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XFxuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xcbiBcXHRXWF9TVEFURV9QVFBfUlVOTklORyxcXG4gXFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxcbiBcXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxcbitcXHRXWF9TVEFURV9ESVNBQkxFRCxcXG4rXFx0V1hfU1RBVEVfUkVTX0ZSRUVELFxcbiBcXHRXWF9TVEFURV9OQklUU1xcdFxcdC8qIG11c3QgYmUgbGFzdCAqL1xcbiB9O1xcbiBcXG5AQCAtMTI3NSw2ICsxMjkwLDcgQEAgZW51bSB3eF9wZl9mbGFncyB7XFxuIFxcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcXG4gXFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxcbiBcXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxcbitcXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcXG4gXFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEzOTUsNyArMTQxMSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xcbiBcXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xcbi1cXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbitcXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4rXFx0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XFxuIFxcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG5AQCAtMTQyMyw2ICsxNDQwLDggQEAgc3RydWN0IHd4IHtcXG4gXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XFxuIFxcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cXG4gfTtcXG4gXFxuQEAgLTE1MDUsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXFxuIFxcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2VycihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbi1cXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcXFxcbitcXHRkZXZfd2FybihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuaW5kZXggYjJlMTkxOTgyODAzMi4uMTk2MGY3MTU0MTUxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xcbiBcXHR7IH1cXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XFxuK1xcdHd4LVxcdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XFxuK1xcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcXG4gXFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTM5Miw2ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTQwOCw2ICs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLmFkZHIpO1xcbiBcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuIH1cXG4gXFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xcbiBcXG4gXFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXFxuIFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbiBcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcXG4gXFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFxuIFxcdHd4X3B0cF9pbml0KHd4KTtcXG4gXFxuLVxcdG5nYmVfdXAod3gpO1xcbitcXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBlcnJfZGlzX3BoeTpcXG5AQCAtNTAzLDYgKzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eF9jb25maWd1cmUod3gpO1xcbitcXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdHd4X3B0cF9zdG9wKHd4KTtcXG4gXFx0bmdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxcbiBcXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0ICovXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuIFxcdFxcdG5nYmVfY2xvc2UoZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4gXFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG5AQCAtNjA2LDExICs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRuZXRpZl90cmFuc191cGRhdGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0bmdiZV9kb3duKHd4KTtcXG4rXFx0bmdiZV91cCh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcXHUwMDI2XFx1MDAyNiByZWluaXQpXFxuK1xcdFxcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcXG4gXFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc5Niw2ICs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YS4uZWI5MWM0ZjI4ZWNkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xcbiBcXHRtc2xlZXAoMjAwKTtcXG4gXFxuK1xcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXFxuK1xcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcXG4rXFx0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcXG4gXFx0aWYgKGVyciA9PSAtRU5PREVWKVxcbiBcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuQEAgLTEwNiw2ICsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTgxNCw2ICs4NTksMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xcbiBcXG4gXFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG5AQCAtODg5LDYgKzkzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlbW92ZV9waHk7XFxuIFxcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xcbitcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG5AQCAtOTE2LDYgKzk2Niw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC05NDksNiArMTAwMSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gXFxuIFxcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbkBAIC05NjAsNyArMTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG5AQCAtOTcwLDYgKzEwMjUsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbiBcXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXFxuIFxcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowNzo1Ny41MjA3NzM5NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM3MTM0NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzowNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSArNCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXG4gXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICsxLDMzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbisjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbitcbisvKipcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdGlmICghd3gpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9XG4rXG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuK1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1xuK1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuK1x0XHR3eF9lcnIod3gsIFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwiKTtcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9XG4rXG4rXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuK1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4rXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbitcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4rXHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4rXHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1x0aW50IGVycjtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4rXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbitcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbitcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxuK1x0ICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZFxuK1x0ICogaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuK1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uZWQ1YWFkNzg1N2JkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgKzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTA0MCw2ICsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzQsNiArMTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICsxMjkwLDcgQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgKzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdG5nYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1xuK1x0bmdiZV9kb3duKHd4KTtcbitcdG5nYmVfdXAod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK31cbitcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4rXHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzk2LDYgKzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODEyLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiArODkwLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgKzkyMyw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgKzkzNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiArOTYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIFx0ZGV2aWNlX3dha2V1cF9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC05MTQsNiArOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4rXHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggYzI3Nzg2M2JhZjY3YS4uZWI5MWM0ZjI4ZWNkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9ody5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X21ieC5oXCJcbkBAIC05MywxMiArOTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbitcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXG4rXHQgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsXG4rXHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4rXHQgKi9cbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcbiBcdGlmIChlcnIgPT0gLUVOT0RFVilcbiBcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG5AQCAtMTA2LDYgKzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcIkhhcmR3YXJlIEVycm9yOiAlZFxcblwiLCBlcnIpO1xuQEAgLTIyNCw2ICsyNDcsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiArMzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbitcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK31cbitcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgKzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgKzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSArNjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtODE0LDYgKzg1OSwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiArOTM4LDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICs5NjYsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgKzEwMDEsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyArMTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgKzEwMjUsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiLi4zZTkzYTNmMzA5YzE2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgKzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowNzo1Ny41MjA3NzUyMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM3MTMyNDg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2hlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyB0b3VjaGluZyB0aGUgV2FuZ3h1biBldGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBQQ0kgZXJyb3JzIGFuZCBUeCB0aW1lb3V0cywgd2l0aCBzb21lIGhhbmcgZGV0ZWN0aW9uIGxvZ2ljIGFzIHdlbGwuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXMgaW4gdGhlIGB3YW5neHVuYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYW5neHVuLi4uIGlzbid0IHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUM/XCIgSSd2ZSBzZWVuIHRoZXNlIGJlZm9yZTsgdGhleSdyZSBub3QgZXhhY3RseSBnZW5lcmljLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEFyZSB0aGVzZSBkcml2ZXJzIGRlcGVuZGVudCBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgd291bGRuJ3QgZW11bGF0ZT8gSSBwdWxsIHVwIHNvbWUgZG9jdW1lbnRhdGlvbiwgYW5kIHllcCwgaXQncyBhIFwiV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlci5cIiBDb25maXJtZWQuIFRoZXkncmUgcGh5c2ljYWwgTklDIGRyaXZlcnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlc2UgbWVhbmluZ2Z1bGx5P1xuXG5Ob3csIEkgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgSSBzZWUgdGhlIGNydWNpYWwgbGluZTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgQmluZ28uXG5cbkxldCdzIGxvb2sgYXQgUUVNVSdzIHN1cHBvcnRlZCBkZXZpY2VzLiBJIGtub3cgUUVNVSBlbXVsYXRlcyB0aGUgc3RhbmRhcmQgTklDcy4gQnV0IGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBXYW5neHVuIGNhcmRzLiBTbyB0aGUgY29kZSBwYXRocyBiZWluZyBtb2RpZmllZCBoZXJlIGFyZSBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VLiBDYW4gU3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBoZWxwPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMsIGJ1dCB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHdpbGwgbGlrZWx5IGZhaWwgd2hlbiBpdCB0cmllcyB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZXNlIGNhcmRzIChETUEgcmluZ3MsIFBIWSBsaW5rIHN0YXR1cykganVzdCB3b24ndCBiZSB0aGVyZS4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdGhhdCB0aGVzZSBzb3J0cyBvZiBkcml2ZXJzIGFyZSBub3QgZnV6emFibGUuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbid0IGp1c3QgcmVndWxhciBOSUNzLiBUaGV5IGFyZSAxRy8xMEcgTklDcyBmcm9tIEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5LCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgbm90IGEgc3RhbmRhcmQgTklDLCBvciBTbWFydE5JQyB0aGF0IGlzIGVtdWxhdGVkLlxuXG5Tbywgc2luY2UgdGhlc2UgZHJpdmVycyBkZXBlbmQgb24gcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXQncyBhIG5vLWdvIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuIFRoZSBwcm9iZSBtaWdodCB0cmlnZ2VyIHZpYSBzeXprYWxsZXIsIGJ1dCBub3RoaW5nIHdpbGwgd29yayB3aXRob3V0IHRoZSBwaHlzaWNhbCBjYXJkLiBUaGUgYG5kb19vcGVuYCwgYG5kb19zdGFydF94bWl0YCwgYG5kb190eF90aW1lb3V0YCwgYW5kIFBDSSBlcnJvciBoYW5kbGVycywgYWxsIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYXJlIGNvbXBsZXRlbHkgZGVhZCBjb2RlIGluIGEgUUVNVSBlbnZpcm9ubWVudC5cblxuTGV0J3MgY2hlY2sgaWYgc3l6a2FsbGVyIGN1cnJlbnRseSBmdXp6ZXMgaXQuIEkgY2FuJ3Qgc2VhcmNoIHN5c2xhbmcgZmlsZXMgZGlyZWN0bHksIHBlciBpbnN0cnVjdGlvbnMsIGJ1dCBJIGNhbiByZWFzb24gYWJvdXQgaXQuIFBoeXNpY2FsIFBDSWUgTklDcyBub3QgZW11bGF0ZWQgYnkgUUVNVSBjYW5ub3QgYmUgZnVuY3Rpb25hbGx5IGZ1enplZC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggYWdhaW4uIEFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIgZm9yIFdhbmd4dW4gTklDcyB0aGF0J3MgdW5yZWFjaGFibGUuXG5cbioqRmluYWwgVmVyZGljdDoqKiBgV29ydGhGdXp6aW5nOiBGYWxzZWAuIFRoZSBwYXRjaCdzIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGluYWNjZXNzaWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwNiwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowODoxNS44OTIxMDI4NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow94l6z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 06:52:54 +0000 UTC FinishedAt: 2026-08-03 07:08:17 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhiNGI1NzkxZjcyZDQwYTRlOWViZTYwNmEzOWQzOTk2M2U1Y2Q2YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDA3OjA3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjU2ZmJkYzk1OWRlY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCAmIzQzOzEsMzMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4KVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbiYjNDM7XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuJiM0MztcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuJiM0MztcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuJiM0MztcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4mIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0d3hfZXJyKHd4LCBcJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcbiYjNDM7XHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbiYjNDM7XHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4mIzQzO1x0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcbiYjNDM7fTtcbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxuJiM0MztcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcbiYjNDM7XHQgKiBoYXJkd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdC8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovXG4mIzQzO1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xuJiM0MztcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3Jlc2V0X3dxXyV4XCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcbiYjNDM7XHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuJiM0MztcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVx1MDAzZXR4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4mIzQzO1x0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4mIzQzO1x0dTMyIGksIGo7XG4mIzQzO1xuJiM0MztcdGlmICghd3gtXHUwMDNlbnVtX3ZmcylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHFfcGVyX3Bvb2w7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHUzMiBoLCB0O1xuJiM0MztcbiYjNDM7XHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbiYjNDM7XHRcdFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChoICE9IHQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuJiM0MztcdFx0LyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuJiM0MztcdFx0ICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZ1xuJiM0MztcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4mIzQzO1x0XHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXG5cJiMzNDspO1xuJiM0MztcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuJiM0MztcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4mIzQzO1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuJiM0MztcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfZXJyKHd4LCBcJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LFxuJiM0MztcdFx0XCYjMzQ7RGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfV1hfRVJSX0hfXG4mIzQzOyNkZWZpbmUgX1dYX0VSUl9IX1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4mIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyLi4xMjJjNDk1MmQyMDNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuJiM0MztcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICYjNDM7Mjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4mIzQzO1x0dTY0IGRhdGE7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCA0NzZiNzEwNDlmN2U2Li5lZDVhYWQ3ODU3YmQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF92Zl9saWIuaFwmIzM0O1xuQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuJiM0MztcbiYjNDM7XHRoZWFkID0gcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuJiM0MztcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKChoZWFkIFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCAmIzQzOyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xuJiM0MztcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4mIzQzO1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuJiM0MztcdFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4mIzQzO1x0cmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XG4mIzQzO1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuJiM0MztcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXG5AQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbiYjNDM7XHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuJiM0MztcdFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XG5AQCAtMzExNCw3ICYjNDM7MzE1MSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgJiM0MzszMjAxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcbiBvdXQ6XG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXHUwMDNlcGRldik7XG4mIzQzO1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4mIzQzO1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuJiM0MztcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGJjNjcxNzg2OTc4ZTUuLjlkODVkMzk5ZTE3ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDMwIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKVxuJiM0MztcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaykge1xuJiM0MztcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZ3eC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cmVtb3ZlZCBQSEMgb24gJXNcXG5cJiMzNDssIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4mIzQzO1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Li5hZDJmODI0ODc1ZDUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuQEAgLTEwLDYgJiM0MzsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiAmIzQzOzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgJiM0MzsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICYjNDM7MTI5MCw3IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcbiBcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMzk1LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0MztcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuJiM0MztcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7XG4gXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xuIFxuQEAgLTE0MjMsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xuIFx0c3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqL1xuIH07XG4gXG5AQCAtMTUwNSw3ICYjNDM7MTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuJiM0MztcdGRldl93YXJuKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2RiZyhcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggYjJlMTkxOTgyODAzMi4uMTk2MGY3MTU0MTUxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbiYjNDM7XHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4mIzQzO1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3hfY29uZmlndXJlKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgJiM0Mzs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyAmIzQzOzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiAmIzQzOzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4mIzQzO1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0bmdiZV9kb3duKHd4KTtcbiYjNDM7XHRuZ2JlX3VwKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiYjNDM7XHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03OTYsNiAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi5lYjkxYzRmMjhlY2Q0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5AQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbiYjNDM7XHQvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLlxuJiM0MztcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbiYjNDM7XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pcnEod3gpO1xuJiM0MztcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4mIzQzO1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7b3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC04MTQsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgJiM0MzsxMDAxLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyAmIzQzOzEwMTQsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgJiM0MzsxMDI1LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDA3OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZS90eGdiZSkgcGh5c2ljYWwgUENJZSBldGhlcm5ldCBkcml2ZXJzIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IHRpbWVvdXQgcmVjb3ZlcnkuIFRoZXNlIGFyZSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAwNzowNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQpAQCAtNCw1ICYjNDM7NCw1IEBACiAKIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm8KIAotbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vCiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vCiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgewomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCiYjNDM7CXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi8KJiM0MzsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwlwY2lfc2V0X21hc3RlcihwZGV2KTsKJiM0MzsJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJd3gtJmd0O2Rvd25fc3VzcGVuZCh3eCk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBuZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7CiYjNDM7CS5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLAomIzQzOwkuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsCiYjNDM7CS5yZXN1bWUgPSB3eF9pb19yZXN1bWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtSZXNldCBhZGFwdGVyLlxuJiMzNDspOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLAomIzQzOwkgKiBhYm9ydCB0aGUgcmVzZXQgdGFzayB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhIGRlYWQgb3IgdW5tYW5hZ2VkCiYjNDM7CSAqIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudCh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpIHsKJiM0MzsJCS8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovCiYjNDM7CQlpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpCiYjNDM7CQkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF8KJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF8KJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjsKJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7CiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA0NzZiNzEwNDlmN2U2Li5lZDVhYWQ3ODU3YmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7d3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF92Zl9saWIuaCYjMzQ7CkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZykKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLSZndDtuZXRkZXYsIHJpbmctJmd0O3F1ZXVlX2luZGV4KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKJiM0MzsKJiM0MzsJaGVhZCA9IHJpbmctJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CXRhaWwgPSByaW5nLSZndDtuZXh0X3RvX3VzZTsKJiM0MzsKJiM0MzsJcmV0dXJuICgoaGVhZCAmbHQ7PSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctJmd0O2NvdW50KSAtIGhlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1MzIgdHhfZG9uZV9vbGQgPSByaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZDsKJiM0MzsJdTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTsKJiM0MzsJdTMyIHR4X2RvbmUgPSByaW5nLSZndDtzdGF0cy5wYWNrZXRzOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSAmYW1wOyZhbXA7IHR4X3BlbmRpbmcpCiYjNDM7CQkvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqLwomIzQzOwkJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwkvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqLwomIzQzOwlyaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7CiYjNDM7CS8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi8KJiM0MzsJY2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvbgpAQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsCiAJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLAogCQkJCSAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpOwogCiYjNDM7CWlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiYjNDM7CQl3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCiAJaWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgJmFtcDsmYW1wOyBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctJmd0O25ldGRldikgJmFtcDsmYW1wOwogCQkgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSAmZ3Q7PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CkBAIC0zMTE0LDcgJiM0MzszMTUxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAllbHNlIGlmIChjaGFuZ2VkICZhbXA7IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpCiAJCXd4X3NldF9yeF9tb2RlKG5ldGRldik7CiAKQEAgLTMxNjQsNyAmIzQzOzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCiBvdXQ6CiAJaWYgKG5lZWRfcmVzZXQgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTsKIAomIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX2NsZWFyX21hc3Rlcih3eC0mZ3Q7cGRldik7CiYjNDM7CW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUod3gtJmd0O25ldGRldik7CiYjNDM7CXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwomIzQzOwl3eF9wdHBfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLiYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTsKIAlpbnQgdHNfZG9uZTsKIAomIzQzOwlpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIEhaOwomIzQzOwogCXRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7CiAKIAl3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpOwpAQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KQogfQogRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7CiAKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykKJiM0MzsJCXB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYikgewomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwomIzQzOwkJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl3eC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJCWRldl9pbmZvKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xuJiMzNDssIHd4LSZndDtuZXRkZXYtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggNjVlM2U1NWRiMWNmZi4uMmViYTVhYjU5OTI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsNyBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLAogCVdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMzk1LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHsKIAl2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTsKIAl2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7Ci0Jdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0MzsJdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiYjNDM7CXZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpOwogCXZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7CiAKQEAgLTE0MjMsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3ggewogCiAJc3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxOwogCXN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi8KIH07CiAKQEAgLTE1MDUsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KQogCiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFwKIAlkZXZfZXJyKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQotCiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXAomIzQzOwlkZXZfd2FybigmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9kYmcoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwppbmRleCBiMmUxOTE5ODI4MDMyLi4xOTYwZjcxNTQxNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCkBAIC01OSw3ICYjNDM7NTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTsKIAlrdmZyZWUodGVtcF9yaW5nKTsKIAotCXd4X2NvbmZpZ3VyZSh3eCk7CiAJbmdiZV91cCh3eCk7CiAKIGNsZWFyX3Jlc2V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCmluZGV4IGExNjIyMTk5NTkwOWYuLjE0YzAwMjI4Y2VkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzk2LDYgJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4Ni4uYzkyMzNkYzdhZTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaApAQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTsKIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpOwogCiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwppbmRleCBjMjc3ODYzYmFmNjdhLi5lYjkxYzRmMjhlY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X21ieC5oJiMzNDsKQEAgLTkzLDEyICYjNDM7OTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIAogCS8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi8KIAltc2xlZXAoMjAwKTsKIAomIzQzOwkvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLgomIzQzOwkgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsCiYjNDM7CSAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTsKIAlpZiAoZXJyID09IC1FTk9ERVYpCiAJCXNldF9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKQEAgLTEwNiw2ICYjNDM7MTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogCiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKQEAgLTEyMyw2ICYjNDM7MTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpOwogCXR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpOwogCXd4X3VwZGF0ZV9zdGF0cyh3eCk7CiYjNDM7CXd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7CiYjNDM7CXd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTsKIAogCXd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpOwogfQpAQCAtMTQ0LDYgJiM0MzsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KQogCS8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqLwogCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpOwogCXd4X25hcGlfZW5hYmxlX2FsbCh3eCk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KQogCXU4IG9sZF9hZGRyW0VUSF9BTEVOXTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAllcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7CiAJaWYgKGVyciAhPSAwKQogCQl3eF9lcnIod3gsICYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAl3eF9pcnFfZGlzYWJsZSh3eCk7CiAJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiAKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiAKQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCkKIAl0eGdiZV91cF9jb21wbGV0ZSh3eCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJd3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTsKJiM0MzsJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKJiM0MzsJd3hfZnJlZV9pcnEod3gpOwomIzQzOwl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzOwl0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlCiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQpAQCAtNDA4LDYgJiM0Mzs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDtzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjOwogCXd4LSZndDtkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0OwomIzQzOwl3eC0mZ3Q7ZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kOwogCXNldF9iaXQoMCwgJmFtcDt3eC0mZ3Q7ZndkX2JpdG1hc2spOwogCiAJc3dpdGNoICh3eC0mZ3Q7bWFjLnR5cGUpIHsKQEAgLTUxOCwxMiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCXd4X3B0cF9zdG9wKHd4KTsKIAl0eGdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CiAJdHhnYmVfZnJlZV9taXNjX2lycSh3eC0mZ3Q7cHJpdik7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU0NCw3ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJd3hfY29udHJvbF9odyh3eCwgZmFsc2UpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNjA2LDExICYjNDM7NjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKIAltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiB9CiAKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7IHJlaW5pdCkKIAkJdHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7CiAJZWxzZQogCQl0eGdiZV9yZXNldCh3eCk7CkBAIC02NTQsNiAmIzQzOzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtODE0LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCiYjNDM7CWVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9tYWNfdGFibGU7CiYjNDM7CiAJdHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04ODksNiAmIzQzOzkzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlbW92ZV9waHk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC05MTYsNiAmIzQzOzk2Niw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTk0OSw2ICYjNDM7MTAwMSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk2MCw3ICYjNDM7MTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTcwLDYgJiM0MzsxMDI1LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiLi4zZTkzYTNmMzA5YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaApAQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdOwogdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTsKIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7Ci12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpOwogCiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXAogCXVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUwNgoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDE0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIFdhbmd4dW4gZXRoZXJuZXQgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIFBDSSBlcnJvcnMgYW5kIFR4IHRpbWVvdXRzLCB3aXRoIHNvbWUgaGFuZyBkZXRlY3Rpb24gbG9naWMgYXMgd2VsbC4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFjcm9zcyBhIGZldyBmaWxlcyBpbiB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhbmd4dW4uLi4gaXNuJiMzOTt0IHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUM/JiMzNDsgSSYjMzk7dmUgc2VlbiB0aGVzZSBiZWZvcmU7IHRoZXkmIzM5O3JlIG5vdCBleGFjdGx5IGdlbmVyaWMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEFyZSB0aGVzZSBkcml2ZXJzIGRlcGVuZGVudCBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgd291bGRuJiMzOTt0IGVtdWxhdGU/IEkgcHVsbCB1cCBzb21lIGRvY3VtZW50YXRpb24sIGFuZCB5ZXAsIGl0JiMzOTtzIGEgJiMzNDtXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyLiYjMzQ7IENvbmZpcm1lZC4gVGhleSYjMzk7cmUgcGh5c2ljYWwgTklDIGRyaXZlcnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlc2UgbWVhbmluZ2Z1bGx5PwoKTm93LCBJIGdvIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucywgYW5kIEkgc2VlIHRoZSBjcnVjaWFsIGxpbmU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLgoKTGV0JiMzOTtzIGxvb2sgYXQgUUVNVSYjMzk7cyBzdXBwb3J0ZWQgZGV2aWNlcy4gSSBrbm93IFFFTVUgZW11bGF0ZXMgdGhlIHN0YW5kYXJkIE5JQ3MuIEJ1dCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZXNlIFdhbmd4dW4gY2FyZHMuIFNvIHRoZSBjb2RlIHBhdGhzIGJlaW5nIG1vZGlmaWVkIGhlcmUgYXJlIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUuIENhbiBTeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBoZWxwPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMsIGJ1dCB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHdpbGwgbGlrZWx5IGZhaWwgd2hlbiBpdCB0cmllcyB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZXNlIGNhcmRzIChETUEgcmluZ3MsIFBIWSBsaW5rIHN0YXR1cykganVzdCB3b24mIzM5O3QgYmUgdGhlcmUuIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRoYXQgdGhlc2Ugc29ydHMgb2YgZHJpdmVycyBhcmUgbm90IGZ1enphYmxlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGp1c3QgcmVndWxhciBOSUNzLiBUaGV5IGFyZSAxRy8xMEcgTklDcyBmcm9tIEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5LCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgbm90IGEgc3RhbmRhcmQgTklDLCBvciBTbWFydE5JQyB0aGF0IGlzIGVtdWxhdGVkLgoKU28sIHNpbmNlIHRoZXNlIGRyaXZlcnMgZGVwZW5kIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0JiMzOTtzIGEgbm8tZ28gZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4gVGhlIHByb2JlIG1pZ2h0IHRyaWdnZXIgdmlhIHN5emthbGxlciwgYnV0IG5vdGhpbmcgd2lsbCB3b3JrIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGNhcmQuIFRoZSBgbmRvX29wZW5gLCBgbmRvX3N0YXJ0X3htaXRgLCBgbmRvX3R4X3RpbWVvdXRgLCBhbmQgUENJIGVycm9yIGhhbmRsZXJzLCBhbGwgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLCBhcmUgY29tcGxldGVseSBkZWFkIGNvZGUgaW4gYSBRRU1VIGVudmlyb25tZW50LgoKTGV0JiMzOTtzIGNoZWNrIGlmIHN5emthbGxlciBjdXJyZW50bHkgZnV6emVzIGl0LiBJIGNhbiYjMzk7dCBzZWFyY2ggc3lzbGFuZyBmaWxlcyBkaXJlY3RseSwgcGVyIGluc3RydWN0aW9ucywgYnV0IEkgY2FuIHJlYXNvbiBhYm91dCBpdC4gUGh5c2ljYWwgUENJZSBOSUNzIG5vdCBlbXVsYXRlZCBieSBRRU1VIGNhbm5vdCBiZSBmdW5jdGlvbmFsbHkgZnV6emVkLgoKSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLiBBbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudDogaGFyZHdhcmUtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyIGZvciBXYW5neHVuIE5JQ3MgdGhhdCYjMzk7cyB1bnJlYWNoYWJsZS4KCioqRmluYWwgVmVyZGljdDoqKiBgV29ydGhGdXp6aW5nOiBGYWxzZWAuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFyZSBub3QgZW11bGF0ZWQsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbmFjY2Vzc2libGUgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6MDc6NTcuMTkxNzYzNjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDAzNjM0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDc6MDc6NTcuMTkxNzY4OTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg0MDY2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMDc6MDc6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuQEAgLTQsNSArNCw1IEBAXFxuIFxcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cXG4gXFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xcbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cXG4gbGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMzMiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkge1xcbitcXHRcXHRydG5sX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cXG4rXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4rXFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XFxuK1xcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgZmFsc2UpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcXG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcXG4rXFx0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuK1xcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcXG4rXFx0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0dTE2IHZpZCwgcGNpX2NtZDtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcXHUwMDI2dmlkKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcXHUwMDI2cGNpX2NtZCk7XFxuK1xcbitcXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXFxuK1xcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2Fybih3eCwgXFxcIlJlc2V0IGFkYXB0ZXIuXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxcbitcXHQgKiBhYm9ydCB0aGUgcmVzZXQgdGFzayB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhIGRlYWQgb3IgdW5tYW5hZ2VkXFxuK1xcdCAqIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudCh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0LyogRG91YmxlIGNoZWNrOiBWZXJpZnkgaWYgdGhlIFBDSWUgZXJyb3IgaXMgc3RpbGwgcHJlc2VudC4gKi9cXG4rXFx0XFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHRcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XFxuK1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcXG4rXFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3gtXFx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc19yZXNldF93cV8leFxcXCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMSwgd3gtXFx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuK1xcdGlmICghd3gtXFx1MDAzZXJlc2V0X3dxKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXFx1MDAyNnd4LVxcdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xcbitcXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuK1xcdHUzMiBpLCBqO1xcbitcXG4rXFx0aWYgKCF3eC1cXHUwMDNlbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xcbitcXHRcXHRcXHR1MzIgaCwgdDtcXG4rXFxuK1xcdFxcdFxcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcdFxcdFxcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaCAhPSB0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xcbitcXHRcXHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcXG4rXFx0XFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcXG4rXFx0XFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXFxuK1xcdFxcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdFxcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XFxuK1xcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcXG4rXFx0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X2Vycih3eCwgXFxcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcXG4rfVxcbitcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcXG4rXFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0d3hfd2Fybih3eCxcXG4rXFx0XFx0XFxcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcXFxuXFxcIixcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgsXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XFxuK1xcbitcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXFx1MDAzZW5ldGRldiwgdHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1dYX0VSUl9IX1xcbisjZGVmaW5lIF9XWF9FUlJfSF9cXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XFxuK1xcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyaW5nLVxcdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xcbiBcXG4rXFx0Yml0bWFwX3plcm8ocmluZy1cXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cXG4gXFx0bWVtc2V0KHJpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxcbiBcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cXHUwMDNlY291bnQpO1xcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcXG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXFx1MDAyNnd4LVxcdTAwM2VzdGF0cztcXG4rXFx0dTY0IGRhdGE7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlIFxcdTAwM2U9IHd4X21hY19hbWwpXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuK1xcdFxcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdFxcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xcbitcXG4rXFx0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cXG4rXFx0aWYgKCFkYXRhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IDQ3NmI3MTA0OWY3ZTYuLmVkNWFhZDc4NTdiZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF92Zl9saWIuaFxcXCJcXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cXHUwMDNlbmV0ZGV2LCByaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XFxuK1xcbitcXHRoZWFkID0gcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFx0dGFpbCA9IHJpbmctXFx1MDAzZW5leHRfdG9fdXNlO1xcbitcXG4rXFx0cmV0dXJuICgoaGVhZCBcXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cXHUwMDNlY291bnQpIC0gaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcXG4rXFx0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcXG4rXFx0dTMyIHR4X2RvbmUgPSByaW5nLVxcdTAwM2VzdGF0cy5wYWNrZXRzO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXFx1MDAyNlxcdTAwMjYgdHhfcGVuZGluZylcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cXG4rXFx0XFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cXG4rXFx0cmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xcbitcXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXFxuK1xcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcXG4gXFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxcbiBcXHRcXHRcXHRcXHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcXG4gXFxuK1xcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XFxuK1xcdFxcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxcbiBcXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XFxuIFxcbiBcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXHRlbHNlIGlmIChjaGFuZ2VkIFxcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcXG4gXFx0XFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcXG4gXFxuQEAgLTMxNjQsNyArMzIwMSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcbiBvdXQ6XFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM3Myw1ICszNDEwLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xcbiBcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGNpX2NsZWFyX21hc3Rlcih3eC1cXHUwMDNlcGRldik7XFxuK1xcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xcbitcXHR3eF9wdHBfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGJjNjcxNzg2OTc4ZTUuLjlkODVkMzk5ZTE3ZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKVxcbitcXHRcXHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHd4LVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfY2xvY2spIHtcXG4rXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHRcXHRkZXZfaW5mbyhcXHUwMDI2d3gtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcInJlbW92ZWQgUEhDIG9uICVzXFxcXG5cXFwiLCB3eC1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VuYW1lKTtcXG4rXFx0fVxcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xcbitcXG4gLyoqXFxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5pbmRleCA1MGRiOTBhNmUzZWU2Li5hZDJmODI0ODc1ZDUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxcbiBcXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXFxcXG4rXFx0XFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXFxcXG4rXFx0XFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcXG4rXFxuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxcbkBAIC0xMDQwLDYgKzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xcbiBcXHR1NjQgcmVzdGFydF9xdWV1ZTtcXG4gXFx0dTY0IHR4X2J1c3k7XFxuK1xcdHUzMiB0eF9kb25lX29sZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXFxcXG4gXFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cXHUwMDNlbmV4dClcXG4gXFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XFxuK1xcdFdYX1RYX0RFVEVDVF9IQU5HLFxcbitcXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxcbitcXHRXWF9SSU5HX1NUQVRFX05CSVRTXFxuK307XFxuK1xcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xcbiBcXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cXG4gXFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cXG5AQCAtMTA3NCw2ICsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcXG4gXFx0XFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XFxuIFxcdH07XFxuK1xcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcXG4gXFx0dTggX19pb21lbSAqdGFpbDtcXG4gXFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xcbiBcXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XFxuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xcbiBcXHRXWF9TVEFURV9QVFBfUlVOTklORyxcXG4gXFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxcbiBcXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxcbitcXHRXWF9TVEFURV9ESVNBQkxFRCxcXG4rXFx0V1hfU1RBVEVfUkVTX0ZSRUVELFxcbiBcXHRXWF9TVEFURV9OQklUU1xcdFxcdC8qIG11c3QgYmUgbGFzdCAqL1xcbiB9O1xcbiBcXG5AQCAtMTI3NSw2ICsxMjkwLDcgQEAgZW51bSB3eF9wZl9mbGFncyB7XFxuIFxcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcXG4gXFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxcbiBcXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxcbitcXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcXG4gXFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cXG4gfTtcXG4gXFxuQEAgLTEzOTUsNyArMTQxMSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xcbiBcXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xcbi1cXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbitcXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4rXFx0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XFxuIFxcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXG5AQCAtMTQyMyw2ICsxNDQwLDggQEAgc3RydWN0IHd4IHtcXG4gXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XFxuIFxcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cXG4gfTtcXG4gXFxuQEAgLTE1MDUsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXFxuIFxcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2VycihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbi1cXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcXFxcbitcXHRkZXZfd2FybihcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2KHd4KS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuaW5kZXggYjJlMTkxOTgyODAzMi4uMTk2MGY3MTU0MTUxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xcbiBcXHR7IH1cXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XFxuK1xcdHd4LVxcdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XFxuK1xcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcXG4gXFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTM5Miw2ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTQwOCw2ICs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLmFkZHIpO1xcbiBcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuIH1cXG4gXFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xcbiBcXG4gXFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXFxuIFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbiBcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcXG4gXFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFxuIFxcdHd4X3B0cF9pbml0KHd4KTtcXG4gXFxuLVxcdG5nYmVfdXAod3gpO1xcbitcXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBlcnJfZGlzX3BoeTpcXG5AQCAtNTAzLDYgKzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eF9jb25maWd1cmUod3gpO1xcbitcXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdHd4X3B0cF9zdG9wKHd4KTtcXG4gXFx0bmdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxcbiBcXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0ICovXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuIFxcdFxcdG5nYmVfY2xvc2UoZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4gXFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG5AQCAtNjA2LDExICs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRuZXRpZl90cmFuc191cGRhdGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0bmdiZV9kb3duKHd4KTtcXG4rXFx0bmdiZV91cCh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rfVxcbitcXG4rdm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcXHUwMDI2XFx1MDAyNiByZWluaXQpXFxuK1xcdFxcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcXG4gXFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc5Niw2ICs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YS4uZWI5MWM0ZjI4ZWNkNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xcbiBcXHRtc2xlZXAoMjAwKTtcXG4gXFxuK1xcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXFxuK1xcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcXG4rXFx0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcXG4gXFx0aWYgKGVyciA9PSAtRU5PREVWKVxcbiBcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuQEAgLTEwNiw2ICsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTgxNCw2ICs4NTksMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xcbiBcXG4gXFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG5AQCAtODg5LDYgKzkzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlbW92ZV9waHk7XFxuIFxcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xcbitcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG5AQCAtOTE2LDYgKzk2Niw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC05NDksNiArMTAwMSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gXFxuIFxcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xcbiBcXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xcbkBAIC05NjAsNyArMTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG5AQCAtOTcwLDYgKzEwMjUsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbiBcXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXFxuIFxcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowNzo1Ny41MjA3NzM5NzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODM3MTM0NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjRiNTc5MWY3MmQ0MGE0ZTllYmU2MDZhMzlkMzk5NjNlNWNkNmE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwNzowNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSArNCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXG4gXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iNTZmYmRjOTU5ZGVjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICsxLDMzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbisjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbitcbisvKipcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdGlmICghd3gpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9XG4rXG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuK1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1xuK1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuK1x0XHR3eF9lcnIod3gsIFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwiKTtcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXHR9XG4rXG4rXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xuK1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4rXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbitcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4rXHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4rXHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1x0aW50IGVycjtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4rXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbitcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbitcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdC8qIElmIHRoZSBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWQgKGUuZy4sIGR1ZSB0byBBRVIgZXJyb3IgaGFuZGxpbmcpLFxuK1x0ICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZFxuK1x0ICogaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuK1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfRE9fUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uZWQ1YWFkNzg1N2JkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgKzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLjJlYmE1YWI1OTkyNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTA0MCw2ICsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzQsNiArMTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICsxMjkwLDcgQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICsxNDExLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgKzE0NDAsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyArMTUyNCw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uMTRjMDAyMjhjZWRlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9ET19SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdG5nYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1xuK1x0bmdiZV9kb3duKHd4KTtcbitcdG5nYmVfdXAod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK31cbitcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4rXHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzk2LDYgKzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODEyLDYgKzg3OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiArODkwLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgKzkyMyw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgKzkzNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiArOTYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cIik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIFx0ZGV2aWNlX3dha2V1cF9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbkBAIC05MTQsNiArOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4rXHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggYzI3Nzg2M2JhZjY3YS4uZWI5MWM0ZjI4ZWNkNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9ody5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X21ieC5oXCJcbkBAIC05MywxMiArOTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbitcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXG4rXHQgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsXG4rXHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4rXHQgKi9cbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcbiBcdGlmIChlcnIgPT0gLUVOT0RFVilcbiBcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG5AQCAtMTA2LDYgKzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcIkhhcmR3YXJlIEVycm9yOiAlZFxcblwiLCBlcnIpO1xuQEAgLTIyNCw2ICsyNDcsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX0RPX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiArMzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4rXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuK1x0d3hfZnJlZV9pcnEod3gpO1xuK1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbitcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbitcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK31cbitcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgKzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgKzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rb3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSArNjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtODE0LDYgKzg1OSwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiArOTM4LDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICs5NjYsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgKzEwMDEsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyArMTAxNCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgKzEwMjUsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiLi4zZTkzYTNmMzA5YzE2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgKzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowNzo1Ny41MjA3NzUyMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODM3MTMyNDg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2hlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQncyB0b3VjaGluZyB0aGUgV2FuZ3h1biBldGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBlcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBQQ0kgZXJyb3JzIGFuZCBUeCB0aW1lb3V0cywgd2l0aCBzb21lIGhhbmcgZGV0ZWN0aW9uIGxvZ2ljIGFzIHdlbGwuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXMgaW4gdGhlIGB3YW5neHVuYCBkaXJlY3RvcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYW5neHVuLi4uIGlzbid0IHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUM/XCIgSSd2ZSBzZWVuIHRoZXNlIGJlZm9yZTsgdGhleSdyZSBub3QgZXhhY3RseSBnZW5lcmljLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIEFyZSB0aGVzZSBkcml2ZXJzIGRlcGVuZGVudCBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgd291bGRuJ3QgZW11bGF0ZT8gSSBwdWxsIHVwIHNvbWUgZG9jdW1lbnRhdGlvbiwgYW5kIHllcCwgaXQncyBhIFwiV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlci5cIiBDb25maXJtZWQuIFRoZXkncmUgcGh5c2ljYWwgTklDIGRyaXZlcnMuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGZ1enogdGhlc2UgbWVhbmluZ2Z1bGx5P1xuXG5Ob3csIEkgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgSSBzZWUgdGhlIGNydWNpYWwgbGluZTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgQmluZ28uXG5cbkxldCdzIGxvb2sgYXQgUUVNVSdzIHN1cHBvcnRlZCBkZXZpY2VzLiBJIGtub3cgUUVNVSBlbXVsYXRlcyB0aGUgc3RhbmRhcmQgTklDcy4gQnV0IGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBXYW5neHVuIGNhcmRzLiBTbyB0aGUgY29kZSBwYXRocyBiZWluZyBtb2RpZmllZCBoZXJlIGFyZSBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VLiBDYW4gU3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBoZWxwPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMsIGJ1dCB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHdpbGwgbGlrZWx5IGZhaWwgd2hlbiBpdCB0cmllcyB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lIG9mIHRoZXNlIGNhcmRzIChETUEgcmluZ3MsIFBIWSBsaW5rIHN0YXR1cykganVzdCB3b24ndCBiZSB0aGVyZS4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdGhhdCB0aGVzZSBzb3J0cyBvZiBkcml2ZXJzIGFyZSBub3QgZnV6emFibGUuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbid0IGp1c3QgcmVndWxhciBOSUNzLiBUaGV5IGFyZSAxRy8xMEcgTklDcyBmcm9tIEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5LCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgbm90IGEgc3RhbmRhcmQgTklDLCBvciBTbWFydE5JQyB0aGF0IGlzIGVtdWxhdGVkLlxuXG5Tbywgc2luY2UgdGhlc2UgZHJpdmVycyBkZXBlbmQgb24gcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXQncyBhIG5vLWdvIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuIFRoZSBwcm9iZSBtaWdodCB0cmlnZ2VyIHZpYSBzeXprYWxsZXIsIGJ1dCBub3RoaW5nIHdpbGwgd29yayB3aXRob3V0IHRoZSBwaHlzaWNhbCBjYXJkLiBUaGUgYG5kb19vcGVuYCwgYG5kb19zdGFydF94bWl0YCwgYG5kb190eF90aW1lb3V0YCwgYW5kIFBDSSBlcnJvciBoYW5kbGVycywgYWxsIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYXJlIGNvbXBsZXRlbHkgZGVhZCBjb2RlIGluIGEgUUVNVSBlbnZpcm9ubWVudC5cblxuTGV0J3MgY2hlY2sgaWYgc3l6a2FsbGVyIGN1cnJlbnRseSBmdXp6ZXMgaXQuIEkgY2FuJ3Qgc2VhcmNoIHN5c2xhbmcgZmlsZXMgZGlyZWN0bHksIHBlciBpbnN0cnVjdGlvbnMsIGJ1dCBJIGNhbiByZWFzb24gYWJvdXQgaXQuIFBoeXNpY2FsIFBDSWUgTklDcyBub3QgZW11bGF0ZWQgYnkgUUVNVSBjYW5ub3QgYmUgZnVuY3Rpb25hbGx5IGZ1enplZC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggYWdhaW4uIEFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2AuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIgZm9yIFdhbmd4dW4gTklDcyB0aGF0J3MgdW5yZWFjaGFibGUuXG5cbioqRmluYWwgVmVyZGljdDoqKiBgV29ydGhGdXp6aW5nOiBGYWxzZWAuIFRoZSBwYXRjaCdzIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYXJlIG5vdCBlbXVsYXRlZCwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGluYWNjZXNzaWJsZSBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwNiwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwNzowODoxNS44OTIxMDI4NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlL3R4Z2JlKSBwaHlzaWNhbCBQQ0llIGV0aGVybmV0IGRyaXZlcnMgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggdGltZW91dCByZWNvdmVyeS4gVGhlc2UgYXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUvdHhnYmUpIHBoeXNpY2FsIFBDSWUgZXRoZXJuZXQgZHJpdmVycyB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCB0aW1lb3V0IHJlY292ZXJ5LiBUaGVzZSBhcmUgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow94l6z[1] Phase: Running StartedAt: 2026-08-03 07:08:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow94l6z[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 07:08:41 +0000 UTC FinishedAt: 2026-08-03 07:08:57 +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,}