Name: series-workflow7r4h4 Phase: Failed StartedAt: 2026-08-01 13:26:35 +0000 UTC FinishedAt: 2026-08-01 13:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r4h4[0] Phase: Succeeded StartedAt: 2026-08-01 13:26:35 +0000 UTC FinishedAt: 2026-08-01 13:42:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r4h4[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 13:26:35 +0000 UTC FinishedAt: 2026-08-01 13:42:32 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICYjNDM7NCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZDkzYzM4MjFkNmQwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4mIzQzO1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4mIzQzO1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuJiM0MztcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuJiM0MztcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbiYjNDM7XHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHUxNiB2aWQsIHBjaV9jbWQ7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuJiM0MztcbiYjNDM7XHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJiMzOTt0IGFjY2VzcyAqL1xuJiM0MztcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2Fybih3eCwgXCYjMzQ7UmVzZXQgYWRhcHRlci5cXG5cJiMzNDspO1xuJiM0MztcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZCAoZS5nLiwgZHVlIHRvIEFFUiBlcnJvciBoYW5kbGluZyksXG4mIzQzO1x0ICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZFxuJiM0MztcdCAqIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuJiM0MztcdFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuJiM0MztcdFx0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXG4mIzQzO1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbiYjNDM7XHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXG4mIzQzO1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X2Vycih3eCwgXCYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuJiM0MztcdFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0d3hfd2Fybih3eCxcbiYjNDM7XHRcdFwmIzM0O0RldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcblwmIzM0OyxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XG4mIzQzO1xuJiM0MztcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcbiYjNDM7XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXG4gXHRlbHNlXG4gXHRcdHJpbmctXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcbiBcbiYjNDM7XHRiaXRtYXBfemVybyhyaW5nLVx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xuIFx0bWVtc2V0KHJpbmctXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXG4gXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cdTAwM2Vjb3VudCk7XG5AQCAtMjg1MSwxNiAmIzQzOzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuJiM0MztcdHU2NCBkYXRhO1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcdTAwMjZcdTAwMjZcbiBcdCAgICB3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAod3gtXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSB3eF9tYWNfYW1sKVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiYjNDM7XHRcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuIFx0ZWxzZVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTQsNyAmIzQzOzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2NCw3ICYjNDM7MzIwMSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgJiM0MzszNDEwLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1Li45ZDg1ZDM5OWUxN2Y0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgJiM0Mzs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OC4uM2VlYTY0N2M0NzQyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuJiM0MztcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBIWjtcbiYjNDM7XG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiAmIzQzOzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbiYjNDM7XHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdFx0ZGV2X2luZm8oXHUwMDI2d3gtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O3JlbW92ZWQgUEhDIG9uICVzXFxuXCYjMzQ7LCB3eC1cdTAwM2VuZXRkZXYtXHUwMDNlbmFtZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xuJiM0MztcbiAvKipcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA2NWUzZTU1ZGIxY2ZmLi5hYTM1N2UyNjBjNGM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgJiM0Mzs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MztcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDQwLDYgJiM0MzsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiAmIzQzOzEwNjEsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4mIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7XG4mIzQzO1x0V1hfVFhfREVURUNUX0hBTkcsXG4mIzQzO1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbiYjNDM7XHRXWF9SSU5HX1NUQVRFX05CSVRTXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3NCw2ICYjNDM7MTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiAmIzQzOzEyMjIsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbiYjNDM7XHRXWF9TVEFURV9ESVNBQkxFRCxcbiYjNDM7XHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuJiM0MztcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4mIzQzO1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgJiM0MzsxNTI1LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4mIzQzOyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyLi4xOTYwZjcxNTQxNTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbkBAIC01OSw3ICYjNDM7NTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuIFx0a3ZmcmVlKHRlbXBfcmluZyk7XG4gXG4tXHR3eF9jb25maWd1cmUod3gpO1xuIFx0bmdiZV91cCh3eCk7XG4gXG4gY2xlYXJfcmVzZXQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5pbmRleCBhMTYyMjE5OTU5MDlmLi41NmQ0YjYzMzg3ZmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi41ODJlZTU2N2U2YjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5AQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbiYjNDM7XHQvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLlxuJiM0MztcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbiYjNDM7XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pcnEod3gpO1xuJiM0MztcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4mIzQzO1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7b3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiAmIzQzOzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xuIFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICYjNDM7ODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiAmIzQzOzkzOSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuJiM0MztcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgJiM0Mzs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiAmIzQzOzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiAmIzQzOzEwMjYsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQppbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ5M2MzODIxZDZkMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CXd4X3NvZnRfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuCiYjNDM7ICoKJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJcGNpX3NldF9tYXN0ZXIocGRldik7CiYjNDM7CXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwomIzQzOwlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpICZhbXA7JmFtcDsgd3gtJmd0O2Rvd25fc3VzcGVuZCkKJiM0MzsJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIGZhbHNlKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJdTE2IHZpZCwgcGNpX2NtZDsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQod3gtJmd0O3BkZXYsIFBDSV9WRU5ET1JfSUQsICZhbXA7dmlkKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQod3gtJmd0O3BkZXYsIFBDSV9DT01NQU5ELCAmYW1wO3BjaV9jbWQpOwomIzQzOwomIzQzOwkvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJiMzOTt0IGFjY2VzcyAqLwomIzQzOwlpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kICZhbXA7IFBDSV9DT01NQU5EX01FTU9SWSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsICYjMzQ7UmVzZXQgYWRhcHRlci5cbiYjMzQ7KTsKJiM0MzsJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCXd4LSZndDtkb19yZXNldCh3eC0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRldGFjaGVkIChlLmcuLCBkdWUgdG8gQUVSIGVycm9yIGhhbmRsaW5nKSwKJiM0MzsJICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZAomIzQzOwkgKiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpIHsKJiM0MzsJCS8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovCiYjNDM7CQlpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpCiYjNDM7CQkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF8KJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF8KJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjsKJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7CiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA0NzZiNzEwNDlmN2U2Li43ZTFjZTA4YTc5N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7d3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF92Zl9saWIuaCYjMzQ7CkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZykKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLSZndDtuZXRkZXYsIHJpbmctJmd0O3F1ZXVlX2luZGV4KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKJiM0MzsKJiM0MzsJaGVhZCA9IHJpbmctJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CXRhaWwgPSByaW5nLSZndDtuZXh0X3RvX3VzZTsKJiM0MzsKJiM0MzsJcmV0dXJuICgoaGVhZCAmbHQ7PSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctJmd0O2NvdW50KSAtIGhlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1MzIgdHhfZG9uZV9vbGQgPSByaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZDsKJiM0MzsJdTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTsKJiM0MzsJdTMyIHR4X2RvbmUgPSByaW5nLSZndDtzdGF0cy5wYWNrZXRzOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSAmYW1wOyZhbXA7IHR4X3BlbmRpbmcpCiYjNDM7CQkvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqLwomIzQzOwkJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwkvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqLwomIzQzOwlyaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7CiYjNDM7CS8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi8KJiM0MzsJY2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvbgpAQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsCiAJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLAogCQkJCSAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpOwogCiYjNDM7CWlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiYjNDM7CQl3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCiAJaWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgJmFtcDsmYW1wOyBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctJmd0O25ldGRldikgJmFtcDsmYW1wOwogCQkgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSAmZ3Q7PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CkBAIC0zMTE0LDcgJiM0MzszMTUxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAllbHNlIGlmIChjaGFuZ2VkICZhbXA7IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpCiAJCXd4X3NldF9yeF9tb2RlKG5ldGRldik7CiAKQEAgLTMxNjQsNyAmIzQzOzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCiBvdXQ6CiAJaWYgKG5lZWRfcmVzZXQgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTsKIAomIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX2NsZWFyX21hc3Rlcih3eC0mZ3Q7cGRldik7CiYjNDM7CW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUod3gtJmd0O25ldGRldik7CiYjNDM7CXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwomIzQzOwl3eF9wdHBfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLiYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTsKIAlpbnQgdHNfZG9uZTsKIAomIzQzOwlpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIEhaOwomIzQzOwogCXRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7CiAKIAl3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpOwpAQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KQogfQogRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7CiAKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykKJiM0MzsJCXB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYikgewomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwomIzQzOwkJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl3eC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJCWRldl9pbmZvKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xuJiMzNDssIHd4LSZndDtuZXRkZXYtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggNjVlM2U1NWRiMWNmZi4uYWEzNTdlMjYwYzRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwogCWt2ZnJlZSh0ZW1wX3JpbmcpOwogCi0Jd3hfY29uZmlndXJlKHd4KTsKIAluZ2JlX3VwKHd4KTsKIAogY2xlYXJfcmVzZXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKaW5kZXggYTE2MjIxOTk1OTA5Zi4uNTZkNGI2MzM4N2ZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmgmIzM0OwpAQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHsKIAl7IH0KIH07CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJd3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTsKJiM0MzsJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKJiM0MzsJd3hfZnJlZV9pcnEod3gpOwomIzQzOwl3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlCiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQpAQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O21ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7CiAJd3gtJmd0O3NldHVwX3RjID0gbmdiZV9zZXR1cF90YzsKJiM0MzsJd3gtJmd0O2RvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDsKJiM0MzsJd3gtJmd0O2Rvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kOwogCXNldF9iaXQoMCwgJmFtcDt3eC0mZ3Q7ZndkX2JpdG1hc2spOwogCiAJcmV0dXJuIDA7CkBAIC0xNDcsNiAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTsKIAogCXd4X3VwZGF0ZV9zdGF0cyh3eCk7CiYjNDM7CXd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7CiYjNDM7CXd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTsKIAogCXd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpOwogfQpAQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwogCkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAogc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJd3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLmFkZHIpOwogCWlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKQEAgLTQyMywxMyAmIzQzOzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KQogCXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiB9CiAKLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIHsKIAl3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7CiAKIAkvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKTsKIAl3eF9uYXBpX2VuYWJsZV9hbGwod3gpOwogCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwpAQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCiAJd3hfcHRwX2luaXQod3gpOwogCi0JbmdiZV91cCh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwogCiAJcmV0dXJuIDA7CiBlcnJfZGlzX3BoeToKQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJd3hfY29uZmlndXJlKHd4KTsKJiM0MzsJbmdiZV91cF9jb21wbGV0ZSh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZQogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNTE4LDEyICYjNDM7NTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJbmdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTU1LDcgJiM0Mzs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCiAJKmVuYWJsZV93YWtlID0gISF3dWZjOwogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNTkwLDYgJiM0Mzs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAkgKi8KIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQluZ2JlX2Nsb3NlKGRldik7CiYjNDM7CWVsc2UKJiM0MzsJCW5nYmVfcmVzZXQod3gpOwogCiAJd3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7CiAKQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJbmV0aWZfdHJhbnNfdXBkYXRlKHd4LSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7d3gtJmd0O3Jlc2V0X2xvY2spOwomIzQzOwlzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJbmdiZV9kb3duKHd4KTsKJiM0MzsJbmdiZV91cCh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJmFtcDsmYW1wOyByZWluaXQpCiYjNDM7CQluZ2JlX3JlaW5pdF9sb2NrZWQod3gpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbiwKIAkubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03MDAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAl3eC0mZ3Q7ZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lOwogCW5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtuZ2JlX25ldGRldl9vcHM7CiYjNDM7CW5ldGRldi0mZ3Q7d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8CkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCW5nYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04MTIsNiAmIzQzOzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCXJldHVybiAwOwogCkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIGVycl9jYW5jZWxfc2VydmljZToKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKHd4LSZndDtyZXNldF93cSk7CiBlcnJfZnJlZV9tYWNfdGFibGU6CiAJa2ZyZWUod3gtJmd0O3Jzc19rZXkpOwogCWtmcmVlKHd4LSZndDttYWNfdGFibGUpOwpAQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJcGh5bGlua19kZXN0cm95KHd4LSZndDtwaHlsaW5rKTsKIAlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsCkBAIC04NjMsNyAmIzQzOzkzNSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWtmcmVlKHd4LSZndDttYWNfdGFibGUpOwogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXd4X2Vycih3eCwgJiMzNDtDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJZGV2aWNlX3dha2V1cF9kaXNhYmxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIApAQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7CiAJLnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsCiAJLnNodXRkb3duID0gbmdiZV9zaHV0ZG93biwKIAkuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSwKJiM0MzsJLmVycl9oYW5kbGVyID0gJmFtcDt3eF9lcnJfaGFuZGxlciwKIH07CiAKIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaAppbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IGMyNzc4NjNiYWY2N2EuLjU4MmVlNTY3ZTZiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogCiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwpAQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJLyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqLwogCW1zbGVlcCgyMDApOwogCiYjNDM7CS8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuCiYjNDM7CSAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCwKJiM0MzsJICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAllcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpOwogCWlmIChlcnIgPT0gLUVOT0RFVikKIAkJc2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwpAQCAtMTA2LDYgJiM0MzsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyNDcsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDksNiAmIzQzOzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXR4Z2JlX3JlbW92ZV9waHkodHhnYmUpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CkBAIC05NjAsNyAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CiAJd3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKQEAgLTk3MCw2ICYjNDM7MTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7CiAJLnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLAogCS5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLAomIzQzOwkuZXJyX2hhbmRsZXIgPSAmYW1wO3d4X2Vycl9oYW5kbGVyLAogfTsKIAogbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7CiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKIAogI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFwKIAl1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgZm9jdXNlcyBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIFBDSWUgcmVjb3Zlcnkgd2l0aGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBgbmdiZWAgYW5kIGB0eGdiZWAuIFRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGEgbmV3IGB3eF9lcnIuY2Agd2l0aGluIGBsaWJ3eGAgd2hpY2ggc2VlbXMgdG8gY29udGFpbiBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGB3eF9pb19zbG90X3Jlc2V0YCwgYW5kIHRoZSBhbGwtaW1wb3J0YW50IGhhbmcgZGV0ZWN0aW9uLiBGcm9tIGEgUENJIGRyaXZlciBwZXJzcGVjdGl2ZSwgdGhleSBhcmUgaG9va2luZyB1cCBhIG5ldyBgd3hfZXJyX2hhbmRsZXJgIHRvIHRoZSBQQ0kgZHJpdmVyJiMzOTtzIGBlcnJfaGFuZGxlcmAsIGFuZCBzZXR0aW5nIHVwIGBuZG9fdHhfdGltZW91dGAgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgUENJZSBpc3N1ZXMuIEl0IGxvb2tzIGxpa2UgdGhleSBhbHNvIGhhdmUgYSByZXNldCB3b3JrcXVldWUgYW5kIHRhc2sgbm93LCB3aGljaCBpcyBhIGdvb2QgYWRkaXRpb24gZm9yIGFzeW5jaHJvbm91cyByZWNvdmVyeS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0LCBob3dldmVyLCBnb2VzIHRvIGZ1enppbmcuIFRoZXNlIGRyaXZlcnMgYXJlIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzLCBhcmVuJiMzOTt0IHRoZXk/IFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2UgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLiBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgaWYgYG5nYmVgIG9yIGB0eGdiZWAgYXJlIGVtdWxhdGVkIGluIFFFTVUuIFVuZm9ydHVuYXRlbHksIEkgZG9uJiMzOTt0IGhhdmUgdGhlIFFFTVUgc291cmNlIGNvZGUgaGFuZHkgaGVyZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgdG8gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBRRU1VIHNvdXJjZSBmb3IgdGhvc2UgZHJpdmVyIG5hbWVzLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHBvdGVudGlhbCBodXJkbGUuIFR5cGljYWxseSwgaWYgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSAobGlrZSBpbiB0aGUgY2FzZSBvZiBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgZXRjLiwgd2hpY2ggYXJlIGVtdWxhdGVkLCBvciBgdmlydGlvLW5ldGAsIGB2bXhuZXQzYCwgYHBjbmV0YCwgZXRjLiwgd2hpY2ggYXJlIGFsc28gZW11bGF0ZWQpLCBlZmZlY3RpdmVseSBmdXp6aW5nIHRoZXNlIGRyaXZlcnMgYmVjb21lcyBleHRyZW1lbHkgY2hhbGxlbmdpbmcuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCB0aGUgYHByb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGRyaXZlciB3b24mIzM5O3QgZmluZCB0aGUgbmVjZXNzYXJ5IFBDSSBkZXZpY2UsIHdoaWNoIG1lYW5zIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIG5ldmVyIGdldHMgcmVnaXN0ZXJlZCwgc2V2ZXJlbHkgbGltaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseS4KClRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIGFzc29jaWF0ZWQgd2l0aCBgbmdiZWAgYW5kIGB0eGdiZWAuIEtub3dpbmcgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyB3aWxsIGFsbG93IG1lIHRvIGNoZWNrIHF1aWNrbHkgaWYgdGhlcmUmIzM5O3MgYW55IFFFTVUgZW11bGF0aW9uIHN1cHBvcnQgZm9yIHRoZXNlIHNwZWNpZmljIGNhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9WRU5ET1JfSURfV0FOR1hVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmM9MjQ3Mj1pbnQgd3hfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYy0yNDg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jOjI0OTA6XHRpZiAod3gtXHUwMDNlb2VtX3N2aWQgPT0gUENJX1ZFTkRPUl9JRF9XQU5HWFVOIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMtMjQ5MS1cdCAgICBwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19lbmFibGVkIHtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVx0LyogV2FuZ3h1biBuaWNzICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0Olx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDUtXHR7IDAgfVxuLS1cbmluY2x1ZGUvbGludXgvcGNpX2lkcy5oLTMxNjItXG5pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaDozMTYzOiNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XQU5HWFVOXHRcdDB4ODA4OFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2NC1cbi0tXG5ydXN0L2tlcm5lbC9wY2kvaWQucnM9MTcyPSAgICBmbiBmbXQoXHUwMDI2c2VsZiwgZjogXHUwMDI2bXV0IGZtdDo6Rm9ybWF0dGVyXHUwMDNjJiMzOTtfXHUwMDNlKSAtXHUwMDNlIGZtdDo6UmVzdWx0IHtcbi0tXG5ydXN0L2tlcm5lbC9wY2kvaWQucnMtNTYzLSAgICBJTlRFTCAgICAgICAgICAgICAgICAgICAgPSBiaW5kaW5nczo6UENJX1ZFTkRPUl9JRF9JTlRFTCwgICAgICAgICAgICAgICAgICAgIC8vIDB4ODA4NlxucnVzdC9rZXJuZWwvcGNpL2lkLnJzOjU2NDogICAgV0FOR1hVTiAgICAgICAgICAgICAgICAgID0gYmluZGluZ3M6OlBDSV9WRU5ET1JfSURfV0FOR1hVTiwgICAgICAgICAgICAgICAgICAvLyAweDgwODhcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycy01NjUtICAgIFNDQUxFTVAgICAgICAgICAgICAgICAgICA9IGJpbmRpbmdzOjpQQ0lfVkVORE9SX0lEX1NDQUxFTVAsICAgICAgICAgICAgICAgICAgLy8gMHg4Njg2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzMKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBjb25zaWRlcmVkIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhcmdldHMgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc2V0IGxvZ2ljIHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBuZ2JlYCBhbmQgYHR4Z2JlYC4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSBjYXJkcywgbm90aGluZyBlbXVsYXRlZC4gQ3J1Y2lhbGx5LCB0aGV5IGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG15IHZpcnR1YWxpemVkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgR0NFLiBHaXZlbiB0aGlzLCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlLCBpbiBlc3NlbmNlLCB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGNvbmZpZ3VyYXRpb25zIEkgdHlwaWNhbGx5IHV0aWxpemUuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IHJlcHJlc2VudGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0JiMzOTtzIHNpbXBseSBub3QgcHJhY3RpY2FsIHRvIGZ1enogdGhpcyB3aXRob3V0IHRoZSBwcm9wZXIgcGh5c2ljYWwgZXF1aXBtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcsIHJlc2V0LCBhbmQgdGltZW91dCBsb2dpYyBpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpLiBUaGVzZSBkcml2ZXJzIGFyZSBmb3IgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDI6MDcuNjI1ODIxODc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzc3OTk0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjowNy42MjU4MjcxNDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTgzNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhjNzdjNWExYWYxOTcxZTkzMzNlYTgwMDlmYTA5ODNiMDMyOTJkNDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo0MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkOTNjMzgyMWQ2ZDBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbkBAIC0wLDAgKzEsMzM1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXFxuKy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Flci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuK1xcbisvKipcXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xcbisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFxuK1xcdGlmICghd3gpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0bmV0ZGV2ID0gd3gtXFx1MDAzZW5ldGRldjtcXG4rXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFxuK1xcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9XFxuK1xcbitcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR1MTYgdmlkLCBwY2lfY21kO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2aWQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFxcdTAwMjZwY2lfY21kKTtcXG4rXFxuK1xcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cXG4rXFx0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXJuKHd4LCBcXFwiUmVzZXQgYWRhcHRlci5cXFxcblxcXCIpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXG4rXFx0LyogSWYgdGhlIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZCAoZS5nLiwgZHVlIHRvIEFFUiBlcnJvciBoYW5kbGluZyksXFxuK1xcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcXG4rXFx0ICogaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xcbitcXHRcXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXFxuK1xcdFxcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcXG4rXFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xcbitcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eC1cXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzX3Jlc2V0X3dxXyV4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCB3eC1cXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXFx1MDAzZXBkZXYpKTtcXG4rXFx0aWYgKCF3eC1cXHUwMDNlcmVzZXRfd3EpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcXHUwMDI2d3gtXFx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XFxuK1xcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4rXFx0dTMyIGksIGo7XFxuK1xcbitcXHRpZiAoIXd4LVxcdTAwM2VudW1fdmZzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XFxuK1xcdFxcdFxcdHUzMiBoLCB0O1xcbitcXG4rXFx0XFx0XFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFx0XFx0XFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChoICE9IHQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XFxuK1xcdFxcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxcbitcXHRcXHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xcbitcXHRcXHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cXG4rXFx0XFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXFxcblxcXCIpO1xcbitcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcXG4rXFx0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfV1hfRVJSX0hfXFxuKyNkZWZpbmUgX1dYX0VSUl9IX1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcXG4rXFxuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCAyMjAzN2YwMTVkZWQxLi45NDBkMmU1OTg3NmM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gfVxcbiBcXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAyNjBlMTRkNWQ1NDEyLi4xMjJjNDk1MmQyMDNmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3ZmX2xpYi5oXFxcIlxcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbiBcXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVxcdTAwM2VuZXRkZXYsIHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcXG4rXFxuK1xcdGhlYWQgPSByaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR0YWlsID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuK1xcbitcXHRyZXR1cm4gKChoZWFkIFxcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVxcdTAwM2Vjb3VudCkgLSBoZWFkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xcbitcXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xcbitcXHR1MzIgdHhfZG9uZSA9IHJpbmctXFx1MDAzZXN0YXRzLnBhY2tldHM7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcXHUwMDI2XFx1MDAyNiB0eF9wZW5kaW5nKVxcbitcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xcbitcXHRcXHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xcbitcXHRyaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XFxuK1xcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cXG4rXFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxcbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxcbiBcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXFxuIFxcdFxcdFxcdFxcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xcbiBcXG4rXFx0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcXG4rXFx0XFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFxcdTAwMjZcXHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XFxuQEAgLTMxMTQsNyArMzE1MSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcdGVsc2UgaWYgKGNoYW5nZWQgXFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxcbiBcXHRcXHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xcbiBcXG5AQCAtMzE2NCw3ICszMjAxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFxuIG91dDpcXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XFxuIFxcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVxcdTAwM2VwZGV2KTtcXG4rXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuK1xcdHd4X3B0cF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xcbitcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjguLjNlZWE2NDdjNDc0MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5AQCAtMzIxLDYgKzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xcbiBcXHRpbnQgdHNfZG9uZTtcXG4gXFxuK1xcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBIWjtcXG4rXFxuIFxcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XFxuIFxcbiBcXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xcbkBAIC04NDIsNiArODQ1LDMwIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcXG4gXFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfY2xvY2spXFxuK1xcdFxcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaykge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdFxcdGRldl9pbmZvKFxcdTAwMjZ3eC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwicmVtb3ZlZCBQSEMgb24gJXNcXFxcblxcXCIsIHd4LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XFxuK1xcbiAvKipcXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggNjVlM2U1NWRiMWNmZi4uYWEzNTdlMjYwYzRjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbiBcXHRrdmZyZWUodGVtcF9yaW5nKTtcXG4gXFxuLVxcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuIFxcdG5nYmVfdXAod3gpO1xcbiBcXG4gY2xlYXJfcmVzZXQ6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbmluZGV4IGExNjIyMTk5NTkwOWYuLjU2ZDRiNjMzODdmZDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcXG4gXFx0eyB9XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XFxuK1xcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuK1xcdHd4X2ZyZWVfaXJxKHd4KTtcXG4rXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xcbiBcXHR3eC1cXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xcbitcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XFxuIFxcdHNldF9iaXQoMCwgXFx1MDAyNnd4LVxcdTAwM2Vmd2RfYml0bWFzayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XFxuIFxcbiBcXHR3eF91cGRhdGVfc3RhdHMod3gpO1xcbitcXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xcbitcXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XFxuIFxcbiBcXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcXG4gfVxcbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbiBcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuIFxcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5hZGRyKTtcXG4gXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbiB9XFxuIFxcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHR3eF9wdHBfaW5pdCh3eCk7XFxuIFxcbi1cXHRuZ2JlX3VwKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX2Rpc19waHk6XFxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3hfY29uZmlndXJlKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXFxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdG5nYmVfZG93bih3eCk7XFxuIFxcdHd4X2ZyZWVfaXJxKHd4KTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcXG4gXFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdCAqL1xcbiBcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRuZ2JlX2Nsb3NlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuIFxcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbitcXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdG5nYmVfZG93bih3eCk7XFxuK1xcdG5nYmVfdXAod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbitcXHRcXHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxcbiBcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXFxuK1xcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbiBcXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YS4uNTgyZWU1NjdlNmI5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xcbiBcXHRtc2xlZXAoMjAwKTtcXG4gXFxuK1xcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXFxuK1xcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcXG4rXFx0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcXG4gXFx0aWYgKGVyciA9PSAtRU5PREVWKVxcbiBcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuQEAgLTEwNiw2ICsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3OTAsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg2MCwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTM5LDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTY3LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OSw2ICsxMDAyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcXG4gXFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXFxuIFxcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxcbitcXHQuZXJyX2hhbmRsZXIgPSBcXHUwMDI2d3hfZXJyX2hhbmRsZXIsXFxuIH07XFxuIFxcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbiBcXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXFxcXG4gXFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjA3Ljk1ODI4ODI4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNzA1MzI3NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZywgcmVzZXQsIGFuZCB0aW1lb3V0IGxvZ2ljIGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkuIFRoZXNlIGRyaXZlcnMgYXJlIGZvciB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZi4uYzg3MjRiYjEyOWFhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgKzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ5M2MzODIxZDZkMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbitcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHUxNiB2aWQsIHBjaV9jbWQ7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuK1xuK1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xuK1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2Fybih3eCwgXCJSZXNldCBhZGFwdGVyLlxcblwiKTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRldGFjaGVkIChlLmcuLCBkdWUgdG8gQUVSIGVycm9yIGhhbmRsaW5nKSxcbitcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcbitcdCAqIGhhcmR3YXJlLlxuK1x0ICovXG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuK1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgKzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLmFhMzU3ZTI2MGM0YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTA0MCw2ICsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzQsNiArMTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICsxMjkwLDggQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICsxNDEyLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgKzE0NDEsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyArMTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uNTZkNGI2MzM4N2ZkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdG5nYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1xuK1x0bmdiZV9kb3duKHd4KTtcbitcdG5nYmVfdXAod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK31cbitcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4rXHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbiBcdG5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0bmdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHBoeWxpbmtfZGVzdHJveSh3eC1cdTAwM2VwaHlsaW5rKTtcbiBcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldixcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHR3eF9lcnIod3gsIFwiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwiKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuaW5kZXggNzA3N2EwZGE0Yzk4Ni4uYzkyMzNkYzdhZTUwNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgKzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi41ODJlZTU2N2U2YjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi9cbiBcdG1zbGVlcCgyMDApO1xuIFxuK1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbitcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbitcdCAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiArMTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgKzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiArMTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxuXCIsIGVycik7XG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiArNDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgKzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiArNzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgKzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiArMTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjA3Ljk1ODI4OTU3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTcxMDI3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGZvY3VzZXMgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBQQ0llIHJlY292ZXJ5IHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYG5nYmVgIGFuZCBgdHhnYmVgLiBUaGV5J3ZlIGltcGxlbWVudGVkIGEgbmV3IGB3eF9lcnIuY2Agd2l0aGluIGBsaWJ3eGAgd2hpY2ggc2VlbXMgdG8gY29udGFpbiBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGB3eF9pb19zbG90X3Jlc2V0YCwgYW5kIHRoZSBhbGwtaW1wb3J0YW50IGhhbmcgZGV0ZWN0aW9uLiBGcm9tIGEgUENJIGRyaXZlciBwZXJzcGVjdGl2ZSwgdGhleSBhcmUgaG9va2luZyB1cCBhIG5ldyBgd3hfZXJyX2hhbmRsZXJgIHRvIHRoZSBQQ0kgZHJpdmVyJ3MgYGVycl9oYW5kbGVyYCwgYW5kIHNldHRpbmcgdXAgYG5kb190eF90aW1lb3V0YCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBQQ0llIGlzc3Vlcy4gSXQgbG9va3MgbGlrZSB0aGV5IGFsc28gaGF2ZSBhIHJlc2V0IHdvcmtxdWV1ZSBhbmQgdGFzayBub3csIHdoaWNoIGlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgYXN5bmNocm9ub3VzIHJlY292ZXJ5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCwgaG93ZXZlciwgZ29lcyB0byBmdXp6aW5nLiBUaGVzZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcywgYXJlbid0IHRoZXk/IFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2UgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgd291bGQgbmVlZCB0byBmaW5kIG91dCBpZiBgbmdiZWAgb3IgYHR4Z2JlYCBhcmUgZW11bGF0ZWQgaW4gUUVNVS4gVW5mb3J0dW5hdGVseSwgSSBkb24ndCBoYXZlIHRoZSBRRU1VIHNvdXJjZSBjb2RlIGhhbmR5IGhlcmUuIE15IHVzdWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgUUVNVSBzb3VyY2UgZm9yIHRob3NlIGRyaXZlciBuYW1lcy5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGEgcG90ZW50aWFsIGh1cmRsZS4gVHlwaWNhbGx5LCBpZiBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgaW4gdGhlIGNhc2Ugb2YgYGUxMDAwZWAsIGBpZ2JgLCBgcnRsODEzOWAsIGV0Yy4sIHdoaWNoIGFyZSBlbXVsYXRlZCwgb3IgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBwY25ldGAsIGV0Yy4sIHdoaWNoIGFyZSBhbHNvIGVtdWxhdGVkKSwgZWZmZWN0aXZlbHkgZnV6emluZyB0aGVzZSBkcml2ZXJzIGJlY29tZXMgZXh0cmVtZWx5IGNoYWxsZW5naW5nLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGBwcm9iZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIgd29uJ3QgZmluZCB0aGUgbmVjZXNzYXJ5IFBDSSBkZXZpY2UsIHdoaWNoIG1lYW5zIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIG5ldmVyIGdldHMgcmVnaXN0ZXJlZCwgc2V2ZXJlbHkgbGltaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseS5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIFBDSSBJRHMgYXNzb2NpYXRlZCB3aXRoIGBuZ2JlYCBhbmQgYHR4Z2JlYC4gS25vd2luZyB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHdpbGwgYWxsb3cgbWUgdG8gY2hlY2sgcXVpY2tseSBpZiB0aGVyZSdzIGFueSBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciB0aGVzZSBzcGVjaWZpYyBjYXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjoxNS43MTUzOTY2NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDYwMTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQ0lfVkVORE9SX0lEX1dBTkdYVU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jPTI0NzI9aW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYy0yNDg5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYzoyNDkwOlxcdGlmICh3eC1cXHUwMDNlb2VtX3N2aWQgPT0gUENJX1ZFTkRPUl9JRF9XQU5HWFVOIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jLTI0OTEtXFx0ICAgIHBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2Mi1cXG5pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaDozMTYzOiNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XQU5HWFVOXFx0XFx0MHg4MDg4XFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2NC1cXG4tLVxcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycz0xNzI9ICAgIGZuIGZtdChcXHUwMDI2c2VsZiwgZjogXFx1MDAyNm11dCBmbXQ6OkZvcm1hdHRlclxcdTAwM2MnX1xcdTAwM2UpIC1cXHUwMDNlIGZtdDo6UmVzdWx0IHtcXG4tLVxcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycy01NjMtICAgIElOVEVMICAgICAgICAgICAgICAgICAgICA9IGJpbmRpbmdzOjpQQ0lfVkVORE9SX0lEX0lOVEVMLCAgICAgICAgICAgICAgICAgICAgLy8gMHg4MDg2XFxucnVzdC9rZXJuZWwvcGNpL2lkLnJzOjU2NDogICAgV0FOR1hVTiAgICAgICAgICAgICAgICAgID0gYmluZGluZ3M6OlBDSV9WRU5ET1JfSURfV0FOR1hVTiwgICAgICAgICAgICAgICAgICAvLyAweDgwODhcXG5ydXN0L2tlcm5lbC9wY2kvaWQucnMtNTY1LSAgICBTQ0FMRU1QICAgICAgICAgICAgICAgICAgPSBiaW5kaW5nczo6UENJX1ZFTkRPUl9JRF9TQ0FMRU1QLCAgICAgICAgICAgICAgICAgIC8vIDB4ODY4NlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjoxNy4zNzAwMDQ1NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkzNTg1OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgY29uc2lkZXJlZCBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyB0YXJnZXRzIGVycm9yIGhhbmRsaW5nIGFuZCByZXNldCBsb2dpYyB3aXRoaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCBgbmdiZWAgYW5kIGB0eGdiZWAuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciAqcGh5c2ljYWwqIFBDSWUgaGFyZHdhcmUgY2FyZHMsIG5vdGhpbmcgZW11bGF0ZWQuIENydWNpYWxseSwgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG15IHZpcnR1YWxpemVkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgR0NFLiBHaXZlbiB0aGlzLCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlLCBpbiBlc3NlbmNlLCB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGNvbmZpZ3VyYXRpb25zIEkgdHlwaWNhbGx5IHV0aWxpemUuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlIHRoYXQncyBub3QgcmVwcmVzZW50ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSXQncyBzaW1wbHkgbm90IHByYWN0aWNhbCB0byBmdXp6IHRoaXMgd2l0aG91dCB0aGUgcHJvcGVyIHBoeXNpY2FsIGVxdWlwbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzMsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjIxLjY2MzU5MzYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcsIHJlc2V0LCBhbmQgdGltZW91dCBsb2dpYyBpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpLiBUaGVzZSBkcml2ZXJzIGFyZSBmb3IgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7r4h4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 13:26:35 +0000 UTC FinishedAt: 2026-08-01 13:42:22 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICYjNDM7NCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZDkzYzM4MjFkNmQwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4mIzQzO1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4mIzQzO1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuJiM0MztcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuJiM0MztcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbiYjNDM7XHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHUxNiB2aWQsIHBjaV9jbWQ7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuJiM0MztcbiYjNDM7XHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJiMzOTt0IGFjY2VzcyAqL1xuJiM0MztcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2Fybih3eCwgXCYjMzQ7UmVzZXQgYWRhcHRlci5cXG5cJiMzNDspO1xuJiM0MztcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZCAoZS5nLiwgZHVlIHRvIEFFUiBlcnJvciBoYW5kbGluZyksXG4mIzQzO1x0ICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZFxuJiM0MztcdCAqIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuJiM0MztcdFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuJiM0MztcdFx0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXG4mIzQzO1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbiYjNDM7XHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXG4mIzQzO1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X2Vycih3eCwgXCYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuJiM0MztcdFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0d3hfd2Fybih3eCxcbiYjNDM7XHRcdFwmIzM0O0RldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcblwmIzM0OyxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XG4mIzQzO1xuJiM0MztcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcbiYjNDM7XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXG4gXHRlbHNlXG4gXHRcdHJpbmctXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcbiBcbiYjNDM7XHRiaXRtYXBfemVybyhyaW5nLVx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xuIFx0bWVtc2V0KHJpbmctXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXG4gXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cdTAwM2Vjb3VudCk7XG5AQCAtMjg1MSwxNiAmIzQzOzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuJiM0MztcdHU2NCBkYXRhO1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcdTAwMjZcdTAwMjZcbiBcdCAgICB3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAod3gtXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSB3eF9tYWNfYW1sKVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiYjNDM7XHRcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuIFx0ZWxzZVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cbiYjNDM7XHRpZiAoIWRhdGEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTQsNyAmIzQzOzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2NCw3ICYjNDM7MzIwMSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgJiM0MzszNDEwLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1Li45ZDg1ZDM5OWUxN2Y0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgJiM0Mzs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OC4uM2VlYTY0N2M0NzQyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuJiM0MztcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBIWjtcbiYjNDM7XG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiAmIzQzOzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbiYjNDM7XHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xuJiM0MztcdFx0ZGV2X2luZm8oXHUwMDI2d3gtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O3JlbW92ZWQgUEhDIG9uICVzXFxuXCYjMzQ7LCB3eC1cdTAwM2VuZXRkZXYtXHUwMDNlbmFtZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xuJiM0MztcbiAvKipcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxuICAqIEB3eDogcG9pbnRlciB0byB3eCBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxuaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA2NWUzZTU1ZGIxY2ZmLi5hYTM1N2UyNjBjNGM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgJiM0Mzs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MztcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDQwLDYgJiM0MzsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiAmIzQzOzEwNjEsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4mIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7XG4mIzQzO1x0V1hfVFhfREVURUNUX0hBTkcsXG4mIzQzO1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbiYjNDM7XHRXWF9SSU5HX1NUQVRFX05CSVRTXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3NCw2ICYjNDM7MTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiAmIzQzOzEyMjIsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbiYjNDM7XHRXWF9TVEFURV9ESVNBQkxFRCxcbiYjNDM7XHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuJiM0MztcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4mIzQzO1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgJiM0MzsxNTI1LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4mIzQzOyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyLi4xOTYwZjcxNTQxNTFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbkBAIC01OSw3ICYjNDM7NTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuIFx0a3ZmcmVlKHRlbXBfcmluZyk7XG4gXG4tXHR3eF9jb25maWd1cmUod3gpO1xuIFx0bmdiZV91cCh3eCk7XG4gXG4gY2xlYXJfcmVzZXQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5pbmRleCBhMTYyMjE5OTU5MDlmLi41NmQ0YjYzMzg3ZmQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODYuLmM5MjMzZGM3YWU1MDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi41ODJlZTU2N2U2YjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5AQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXG4gXHRtc2xlZXAoMjAwKTtcbiBcbiYjNDM7XHQvKiBSZS1jaGVjayBzdGF0ZSB0byBhdm9pZCByYWNpbmcgd2l0aCBkb3duL3Jlc2V0IHBhdGhzLlxuJiM0MztcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbiYjNDM7XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtMTg3LDYgJiM0MzsyMDcsOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7SGFyZHdhcmUgRXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTIyNCw2ICYjNDM7MjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICYjNDM7MzE2LDIwIEBAIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eClcbiBcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pcnEod3gpO1xuJiM0MztcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4mIzQzO1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YztcbiBcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7b3V0OlxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuIFx0XHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiBcdGVsc2VcbiBcdFx0dHhnYmVfcmVzZXQod3gpO1xuQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiAmIzQzOzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xuIFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICYjNDM7ODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHR0eGdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04ODksNiAmIzQzOzkzOSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuJiM0MztcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgJiM0Mzs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIGVycl9jYW5jZWxfc2VydmljZTpcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiAmIzQzOzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiAmIzQzOzEwMjYsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQppbmRleCBhNzFiMGFkNzdkZTNmLi5jODcyNGJiMTI5YWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ5M2MzODIxZDZkMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CXd4X3NvZnRfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuCiYjNDM7ICoKJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJcGNpX3NldF9tYXN0ZXIocGRldik7CiYjNDM7CXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwomIzQzOwlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpICZhbXA7JmFtcDsgd3gtJmd0O2Rvd25fc3VzcGVuZCkKJiM0MzsJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIGZhbHNlKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJdTE2IHZpZCwgcGNpX2NtZDsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQod3gtJmd0O3BkZXYsIFBDSV9WRU5ET1JfSUQsICZhbXA7dmlkKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQod3gtJmd0O3BkZXYsIFBDSV9DT01NQU5ELCAmYW1wO3BjaV9jbWQpOwomIzQzOwomIzQzOwkvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJiMzOTt0IGFjY2VzcyAqLwomIzQzOwlpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kICZhbXA7IFBDSV9DT01NQU5EX01FTU9SWSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsICYjMzQ7UmVzZXQgYWRhcHRlci5cbiYjMzQ7KTsKJiM0MzsJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCXd4LSZndDtkb19yZXNldCh3eC0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRldGFjaGVkIChlLmcuLCBkdWUgdG8gQUVSIGVycm9yIGhhbmRsaW5nKSwKJiM0MzsJICogYWJvcnQgdGhlIHJlc2V0IHRhc2sgdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYSBkZWFkIG9yIHVubWFuYWdlZAomIzQzOwkgKiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpIHsKJiM0MzsJCS8qIERvdWJsZSBjaGVjazogVmVyaWZ5IGlmIHRoZSBQQ0llIGVycm9yIGlzIHN0aWxsIHByZXNlbnQuICovCiYjNDM7CQlpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpCiYjNDM7CQkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF8KJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF8KJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjsKJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7CiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfV1hfRVJSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDIyMDM3ZjAxNWRlZDEuLjk0MGQyZTU5ODc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA0NzZiNzEwNDlmN2U2Li43ZTFjZTA4YTc5N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7d3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF92Zl9saWIuaCYjMzQ7CkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZykKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLSZndDtuZXRkZXYsIHJpbmctJmd0O3F1ZXVlX2luZGV4KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKJiM0MzsKJiM0MzsJaGVhZCA9IHJpbmctJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CXRhaWwgPSByaW5nLSZndDtuZXh0X3RvX3VzZTsKJiM0MzsKJiM0MzsJcmV0dXJuICgoaGVhZCAmbHQ7PSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctJmd0O2NvdW50KSAtIGhlYWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpCiYjNDM7ewomIzQzOwl1MzIgdHhfZG9uZV9vbGQgPSByaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZDsKJiM0MzsJdTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTsKJiM0MzsJdTMyIHR4X2RvbmUgPSByaW5nLSZndDtzdGF0cy5wYWNrZXRzOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSAmYW1wOyZhbXA7IHR4X3BlbmRpbmcpCiYjNDM7CQkvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqLwomIzQzOwkJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwkvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqLwomIzQzOwlyaW5nLSZndDt0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7CiYjNDM7CS8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi8KJiM0MzsJY2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qKgogICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvbgpAQCAtODY2LDYgJiM0Mzs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsCiAJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLAogCQkJCSAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpOwogCiYjNDM7CWlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CiYjNDM7CQl3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCiAJaWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgJmFtcDsmYW1wOyBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctJmd0O25ldGRldikgJmFtcDsmYW1wOwogCQkgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSAmZ3Q7PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CkBAIC0zMTE0LDcgJiM0MzszMTUxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAllbHNlIGlmIChjaGFuZ2VkICZhbXA7IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpCiAJCXd4X3NldF9yeF9tb2RlKG5ldGRldik7CiAKQEAgLTMxNjQsNyAmIzQzOzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCiBvdXQ6CiAJaWYgKG5lZWRfcmVzZXQgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNzMsNSAmIzQzOzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTsKIAomIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX2NsZWFyX21hc3Rlcih3eC0mZ3Q7cGRldik7CiYjNDM7CW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfY2Fycmllcl9vZmYod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUod3gtJmd0O25ldGRldik7CiYjNDM7CXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwomIzQzOwl3eF9wdHBfcXVpZXNjZSh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7CiYjNDM7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLiYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTsKIAlpbnQgdHNfZG9uZTsKIAomIzQzOwlpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuIEhaOwomIzQzOwogCXRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7CiAKIAl3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpOwpAQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KQogfQogRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7CiAKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykKJiM0MzsJCXB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX3R4X3NrYikgewomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkod3gtJmd0O3B0cF90eF9za2IpOwomIzQzOwkJd3gtJmd0O3B0cF90eF9za2IgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF9jbG9jaykgewomIzQzOwkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIod3gtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl3eC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJCWRldl9pbmZvKCZhbXA7d3gtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xuJiMzNDssIHd4LSZndDtuZXRkZXYtJmd0O25hbWUpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNi4uYWQyZjgyNDg3NWQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKaW5kZXggNjVlM2U1NWRiMWNmZi4uYWEzNTdlMjYwYzRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwogCWt2ZnJlZSh0ZW1wX3JpbmcpOwogCi0Jd3hfY29uZmlndXJlKHd4KTsKIAluZ2JlX3VwKHd4KTsKIAogY2xlYXJfcmVzZXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKaW5kZXggYTE2MjIxOTk1OTA5Zi4uNTZkNGI2MzM4N2ZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmgmIzM0OwpAQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHsKIAl7IH0KIH07CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJd3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTsKJiM0MzsJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKJiM0MzsJd3hfZnJlZV9pcnEod3gpOwomIzQzOwl3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlCiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQpAQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O21ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7CiAJd3gtJmd0O3NldHVwX3RjID0gbmdiZV9zZXR1cF90YzsKJiM0MzsJd3gtJmd0O2RvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDsKJiM0MzsJd3gtJmd0O2Rvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kOwogCXNldF9iaXQoMCwgJmFtcDt3eC0mZ3Q7ZndkX2JpdG1hc2spOwogCiAJcmV0dXJuIDA7CkBAIC0xNDcsNiAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTsKIAogCXd4X3VwZGF0ZV9zdGF0cyh3eCk7CiYjNDM7CXd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7CiYjNDM7CXd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTsKIAogCXd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpOwogfQpAQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwogCkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAogc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJd3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLmFkZHIpOwogCWlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKQEAgLTQyMywxMyAmIzQzOzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KQogCXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiB9CiAKLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIHsKIAl3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7CiAKIAkvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKTsKIAl3eF9uYXBpX2VuYWJsZV9hbGwod3gpOwogCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwpAQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCiAJd3hfcHRwX2luaXQod3gpOwogCi0JbmdiZV91cCh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwogCiAJcmV0dXJuIDA7CiBlcnJfZGlzX3BoeToKQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJd3hfY29uZmlndXJlKHd4KTsKJiM0MzsJbmdiZV91cF9jb21wbGV0ZSh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZQogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNTE4LDEyICYjNDM7NTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJbmdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTU1LDcgJiM0Mzs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCiAJKmVuYWJsZV93YWtlID0gISF3dWZjOwogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNTkwLDYgJiM0Mzs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAkgKi8KIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQluZ2JlX2Nsb3NlKGRldik7CiYjNDM7CWVsc2UKJiM0MzsJCW5nYmVfcmVzZXQod3gpOwogCiAJd3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7CiAKQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJbmV0aWZfdHJhbnNfdXBkYXRlKHd4LSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7d3gtJmd0O3Jlc2V0X2xvY2spOwomIzQzOwlzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJbmdiZV9kb3duKHd4KTsKJiM0MzsJbmdiZV91cCh3eCk7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJmFtcDsmYW1wOyByZWluaXQpCiYjNDM7CQluZ2JlX3JlaW5pdF9sb2NrZWQod3gpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbiwKIAkubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03MDAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAl3eC0mZ3Q7ZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lOwogCW5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtuZ2JlX25ldGRldl9vcHM7CiYjNDM7CW5ldGRldi0mZ3Q7d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAKIAluZXRkZXYtJmd0O2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8CkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCW5nYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04MTIsNiAmIzQzOzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCXJldHVybiAwOwogCkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIGVycl9jYW5jZWxfc2VydmljZToKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKHd4LSZndDtyZXNldF93cSk7CiBlcnJfZnJlZV9tYWNfdGFibGU6CiAJa2ZyZWUod3gtJmd0O3Jzc19rZXkpOwogCWtmcmVlKHd4LSZndDttYWNfdGFibGUpOwpAQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJcGh5bGlua19kZXN0cm95KHd4LSZndDtwaHlsaW5rKTsKIAlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsCkBAIC04NjMsNyAmIzQzOzkzNSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWtmcmVlKHd4LSZndDttYWNfdGFibGUpOwogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXd4X2Vycih3eCwgJiMzNDtDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJZGV2aWNlX3dha2V1cF9kaXNhYmxlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIApAQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7CiAJLnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsCiAJLnNodXRkb3duID0gbmdiZV9zaHV0ZG93biwKIAkuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSwKJiM0MzsJLmVycl9oYW5kbGVyID0gJmFtcDt3eF9lcnJfaGFuZGxlciwKIH07CiAKIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaAppbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IGMyNzc4NjNiYWY2N2EuLjU4MmVlNTY3ZTZiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogCiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwpAQCAtOTMsMTIgJiM0Mzs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJLyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqLwogCW1zbGVlcCgyMDApOwogCiYjNDM7CS8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuCiYjNDM7CSAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCwKJiM0MzsJICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAllcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpOwogCWlmIChlcnIgPT0gLUVOT0RFVikKIAkJc2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwpAQCAtMTA2LDYgJiM0MzsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyNDcsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7Njk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDksNiAmIzQzOzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXR4Z2JlX3JlbW92ZV9waHkodHhnYmUpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CkBAIC05NjAsNyAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CiAJd3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKQEAgLTk3MCw2ICYjNDM7MTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7CiAJLnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLAogCS5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLAomIzQzOwkuZXJyX2hhbmRsZXIgPSAmYW1wO3d4X2Vycl9oYW5kbGVyLAogfTsKIAogbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgKQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7CiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKIAogI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFwKIAl1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgZm9jdXNlcyBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIFBDSWUgcmVjb3Zlcnkgd2l0aGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBgbmdiZWAgYW5kIGB0eGdiZWAuIFRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGEgbmV3IGB3eF9lcnIuY2Agd2l0aGluIGBsaWJ3eGAgd2hpY2ggc2VlbXMgdG8gY29udGFpbiBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGB3eF9pb19zbG90X3Jlc2V0YCwgYW5kIHRoZSBhbGwtaW1wb3J0YW50IGhhbmcgZGV0ZWN0aW9uLiBGcm9tIGEgUENJIGRyaXZlciBwZXJzcGVjdGl2ZSwgdGhleSBhcmUgaG9va2luZyB1cCBhIG5ldyBgd3hfZXJyX2hhbmRsZXJgIHRvIHRoZSBQQ0kgZHJpdmVyJiMzOTtzIGBlcnJfaGFuZGxlcmAsIGFuZCBzZXR0aW5nIHVwIGBuZG9fdHhfdGltZW91dGAgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgUENJZSBpc3N1ZXMuIEl0IGxvb2tzIGxpa2UgdGhleSBhbHNvIGhhdmUgYSByZXNldCB3b3JrcXVldWUgYW5kIHRhc2sgbm93LCB3aGljaCBpcyBhIGdvb2QgYWRkaXRpb24gZm9yIGFzeW5jaHJvbm91cyByZWNvdmVyeS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0LCBob3dldmVyLCBnb2VzIHRvIGZ1enppbmcuIFRoZXNlIGRyaXZlcnMgYXJlIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzLCBhcmVuJiMzOTt0IHRoZXk/IFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2UgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLiBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgaWYgYG5nYmVgIG9yIGB0eGdiZWAgYXJlIGVtdWxhdGVkIGluIFFFTVUuIFVuZm9ydHVuYXRlbHksIEkgZG9uJiMzOTt0IGhhdmUgdGhlIFFFTVUgc291cmNlIGNvZGUgaGFuZHkgaGVyZS4gTXkgdXN1YWwgYXBwcm9hY2ggd291bGQgYmUgdG8gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBRRU1VIHNvdXJjZSBmb3IgdGhvc2UgZHJpdmVyIG5hbWVzLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHBvdGVudGlhbCBodXJkbGUuIFR5cGljYWxseSwgaWYgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSAobGlrZSBpbiB0aGUgY2FzZSBvZiBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgZXRjLiwgd2hpY2ggYXJlIGVtdWxhdGVkLCBvciBgdmlydGlvLW5ldGAsIGB2bXhuZXQzYCwgYHBjbmV0YCwgZXRjLiwgd2hpY2ggYXJlIGFsc28gZW11bGF0ZWQpLCBlZmZlY3RpdmVseSBmdXp6aW5nIHRoZXNlIGRyaXZlcnMgYmVjb21lcyBleHRyZW1lbHkgY2hhbGxlbmdpbmcuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCB0aGUgYHByb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGRyaXZlciB3b24mIzM5O3QgZmluZCB0aGUgbmVjZXNzYXJ5IFBDSSBkZXZpY2UsIHdoaWNoIG1lYW5zIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIG5ldmVyIGdldHMgcmVnaXN0ZXJlZCwgc2V2ZXJlbHkgbGltaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseS4KClRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBQQ0kgSURzIGFzc29jaWF0ZWQgd2l0aCBgbmdiZWAgYW5kIGB0eGdiZWAuIEtub3dpbmcgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEcyB3aWxsIGFsbG93IG1lIHRvIGNoZWNrIHF1aWNrbHkgaWYgdGhlcmUmIzM5O3MgYW55IFFFTVUgZW11bGF0aW9uIHN1cHBvcnQgZm9yIHRoZXNlIHNwZWNpZmljIGNhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9WRU5ET1JfSURfV0FOR1hVTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmM9MjQ3Mj1pbnQgd3hfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYy0yNDg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jOjI0OTA6XHRpZiAod3gtXHUwMDNlb2VtX3N2aWQgPT0gUENJX1ZFTkRPUl9JRF9XQU5HWFVOIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMtMjQ5MS1cdCAgICBwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuLS1cbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19lbmFibGVkIHtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQzLVx0LyogV2FuZ3h1biBuaWNzICovXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0Olx0eyBQQ0lfVkVORE9SX0lEX1dBTkdYVU4sIFBDSV9BTllfSUQsIHBjaV9xdWlya193YW5neHVuX25pY19hY3MgfSxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUyNDUtXHR7IDAgfVxuLS1cbmluY2x1ZGUvbGludXgvcGNpX2lkcy5oLTMxNjItXG5pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaDozMTYzOiNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XQU5HWFVOXHRcdDB4ODA4OFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2NC1cbi0tXG5ydXN0L2tlcm5lbC9wY2kvaWQucnM9MTcyPSAgICBmbiBmbXQoXHUwMDI2c2VsZiwgZjogXHUwMDI2bXV0IGZtdDo6Rm9ybWF0dGVyXHUwMDNjJiMzOTtfXHUwMDNlKSAtXHUwMDNlIGZtdDo6UmVzdWx0IHtcbi0tXG5ydXN0L2tlcm5lbC9wY2kvaWQucnMtNTYzLSAgICBJTlRFTCAgICAgICAgICAgICAgICAgICAgPSBiaW5kaW5nczo6UENJX1ZFTkRPUl9JRF9JTlRFTCwgICAgICAgICAgICAgICAgICAgIC8vIDB4ODA4NlxucnVzdC9rZXJuZWwvcGNpL2lkLnJzOjU2NDogICAgV0FOR1hVTiAgICAgICAgICAgICAgICAgID0gYmluZGluZ3M6OlBDSV9WRU5ET1JfSURfV0FOR1hVTiwgICAgICAgICAgICAgICAgICAvLyAweDgwODhcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycy01NjUtICAgIFNDQUxFTVAgICAgICAgICAgICAgICAgICA9IGJpbmRpbmdzOjpQQ0lfVkVORE9SX0lEX1NDQUxFTVAsICAgICAgICAgICAgICAgICAgLy8gMHg4Njg2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNzMKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBjb25zaWRlcmVkIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhcmdldHMgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc2V0IGxvZ2ljIHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIOKAkyBzcGVjaWZpY2FsbHksIGBuZ2JlYCBhbmQgYHR4Z2JlYC4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSBjYXJkcywgbm90aGluZyBlbXVsYXRlZC4gQ3J1Y2lhbGx5LCB0aGV5IGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG15IHZpcnR1YWxpemVkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgR0NFLiBHaXZlbiB0aGlzLCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlLCBpbiBlc3NlbmNlLCB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGNvbmZpZ3VyYXRpb25zIEkgdHlwaWNhbGx5IHV0aWxpemUuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IHJlcHJlc2VudGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0JiMzOTtzIHNpbXBseSBub3QgcHJhY3RpY2FsIHRvIGZ1enogdGhpcyB3aXRob3V0IHRoZSBwcm9wZXIgcGh5c2ljYWwgZXF1aXBtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcsIHJlc2V0LCBhbmQgdGltZW91dCBsb2dpYyBpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpLiBUaGVzZSBkcml2ZXJzIGFyZSBmb3IgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDI6MDcuNjI1ODIxODc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzc3OTk0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjowNy42MjU4MjcxNDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTgzNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhjNzdjNWExYWYxOTcxZTkzMzNlYTgwMDlmYTA5ODNiMDMyOTJkNDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo0MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2YuLmM4NzI0YmIxMjlhYTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFkOTNjMzgyMWQ2ZDBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbkBAIC0wLDAgKzEsMzM1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXFxuKy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Flci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuK1xcbisvKipcXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xcbisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFxuK1xcdGlmICghd3gpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0bmV0ZGV2ID0gd3gtXFx1MDAzZW5ldGRldjtcXG4rXFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFxuK1xcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9XFxuK1xcbitcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR1MTYgdmlkLCBwY2lfY21kO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2aWQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFxcdTAwMjZwY2lfY21kKTtcXG4rXFxuK1xcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cXG4rXFx0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXJuKHd4LCBcXFwiUmVzZXQgYWRhcHRlci5cXFxcblxcXCIpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXG4rXFx0LyogSWYgdGhlIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZCAoZS5nLiwgZHVlIHRvIEFFUiBlcnJvciBoYW5kbGluZyksXFxuK1xcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcXG4rXFx0ICogaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xcbitcXHRcXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXFxuK1xcdFxcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcXG4rXFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xcbitcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eC1cXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzX3Jlc2V0X3dxXyV4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCB3eC1cXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXFx1MDAzZXBkZXYpKTtcXG4rXFx0aWYgKCF3eC1cXHUwMDNlcmVzZXRfd3EpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcXHUwMDI2d3gtXFx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XFxuK1xcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4rXFx0dTMyIGksIGo7XFxuK1xcbitcXHRpZiAoIXd4LVxcdTAwM2VudW1fdmZzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XFxuK1xcdFxcdFxcdHUzMiBoLCB0O1xcbitcXG4rXFx0XFx0XFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFx0XFx0XFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChoICE9IHQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XFxuK1xcdFxcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxcbitcXHRcXHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xcbitcXHRcXHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cXG4rXFx0XFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXFxcblxcXCIpO1xcbitcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcXG4rXFx0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfV1hfRVJSX0hfXFxuKyNkZWZpbmUgX1dYX0VSUl9IX1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcXG4rXFxuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCAyMjAzN2YwMTVkZWQxLi45NDBkMmU1OTg3NmM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gfVxcbiBcXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAyNjBlMTRkNWQ1NDEyLi4xMjJjNDk1MmQyMDNmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3ZmX2xpYi5oXFxcIlxcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbiBcXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVxcdTAwM2VuZXRkZXYsIHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcXG4rXFxuK1xcdGhlYWQgPSByaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR0YWlsID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuK1xcbitcXHRyZXR1cm4gKChoZWFkIFxcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVxcdTAwM2Vjb3VudCkgLSBoZWFkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xcbitcXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xcbitcXHR1MzIgdHhfZG9uZSA9IHJpbmctXFx1MDAzZXN0YXRzLnBhY2tldHM7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcXHUwMDI2XFx1MDAyNiB0eF9wZW5kaW5nKVxcbitcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xcbitcXHRcXHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xcbitcXHRyaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XFxuK1xcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cXG4rXFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxcbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxcbiBcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXFxuIFxcdFxcdFxcdFxcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xcbiBcXG4rXFx0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcXG4rXFx0XFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFxcdTAwMjZcXHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XFxuQEAgLTMxMTQsNyArMzE1MSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcdGVsc2UgaWYgKGNoYW5nZWQgXFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxcbiBcXHRcXHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xcbiBcXG5AQCAtMzE2NCw3ICszMjAxLDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFxuIG91dDpcXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XFxuIFxcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVxcdTAwM2VwZGV2KTtcXG4rXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuK1xcdHd4X3B0cF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xcbitcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjguLjNlZWE2NDdjNDc0MmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG5AQCAtMzIxLDYgKzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xcbiBcXHRpbnQgdHNfZG9uZTtcXG4gXFxuK1xcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBIWjtcXG4rXFxuIFxcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XFxuIFxcbiBcXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xcbkBAIC04NDIsNiArODQ1LDMwIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcXG4gXFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHd4LVxcdTAwM2VwdHBfY2xvY2spXFxuK1xcdFxcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF90eF9za2IpIHtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXFx1MDAzZXB0cF90eF9za2IpO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaykge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0d3gtXFx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XFxuK1xcdFxcdGRldl9pbmZvKFxcdTAwMjZ3eC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwicmVtb3ZlZCBQSEMgb24gJXNcXFxcblxcXCIsIHd4LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XFxuK1xcbiAvKipcXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuaW5kZXggNjVlM2U1NWRiMWNmZi4uYWEzNTdlMjYwYzRjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXFxuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbiBcXHRrdmZyZWUodGVtcF9yaW5nKTtcXG4gXFxuLVxcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuIFxcdG5nYmVfdXAod3gpO1xcbiBcXG4gY2xlYXJfcmVzZXQ6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbmluZGV4IGExNjIyMTk5NTkwOWYuLjU2ZDRiNjMzODdmZDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuQEAgLTQ2LDYgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcXG4gXFx0eyB9XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XFxuK1xcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XFxuK1xcdHd4X2ZyZWVfaXJxKHd4KTtcXG4rXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xcbiBcXHR3eC1cXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xcbitcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XFxuIFxcdHNldF9iaXQoMCwgXFx1MDAyNnd4LVxcdTAwM2Vmd2RfYml0bWFzayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XFxuIFxcbiBcXHR3eF91cGRhdGVfc3RhdHMod3gpO1xcbitcXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xcbitcXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XFxuIFxcbiBcXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcXG4gfVxcbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xcbiBcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuIFxcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5hZGRyKTtcXG4gXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbiB9XFxuIFxcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcXG4gXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG5AQCAtNDkwLDcgKzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcbiBcXHR3eF9wdHBfaW5pdCh3eCk7XFxuIFxcbi1cXHRuZ2JlX3VwKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gZXJyX2Rpc19waHk6XFxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3hfY29uZmlndXJlKHd4KTtcXG4rXFx0bmdiZV91cF9jb21wbGV0ZSh3eCk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXFxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdG5nYmVfZG93bih3eCk7XFxuIFxcdHd4X2ZyZWVfaXJxKHd4KTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTU1LDcgKzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcXG4gXFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXFxuIFxcdCAqL1xcbiBcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbiBcXHRcXHRuZ2JlX2Nsb3NlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmdiZV9yZXNldCh3eCk7XFxuIFxcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbitcXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdG5nYmVfZG93bih3eCk7XFxuK1xcdG5nYmVfdXAod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbitcXHRcXHRuZ2JlX3JlaW5pdF9sb2NrZWQod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxcbiBcXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXFxuK1xcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbiBcXHRuZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdG5nYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIGVycl9jYW5jZWxfc2VydmljZTpcXG4gXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGFzayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rXFx0ZGVzdHJveV93b3JrcXVldWUod3gtXFx1MDAzZXJlc2V0X3dxKTtcXG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuIFxcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4gXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIFxcdGRldmljZV93YWtldXBfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxcbiBcXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxcbiBcXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcXG4rXFx0LmVycl9oYW5kbGVyID0gXFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcXG5pbmRleCA3MDc3YTBkYTRjOTg2Li5jOTIzM2RjN2FlNTA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YS4uNTgyZWU1NjdlNmI5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xcbiBcXHRtc2xlZXAoMjAwKTtcXG4gXFxuK1xcdC8qIFJlLWNoZWNrIHN0YXRlIHRvIGF2b2lkIHJhY2luZyB3aXRoIGRvd24vcmVzZXQgcGF0aHMuXFxuK1xcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcXG4rXFx0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcXG4gXFx0aWYgKGVyciA9PSAtRU5PREVWKVxcbiBcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuQEAgLTEwNiw2ICsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTQwLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzIwNyw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3OTAsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg2MCwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTM5LDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTY3LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OSw2ICsxMDAyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbi1cXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuIFxcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcXG4gXFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXFxuIFxcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxcbitcXHQuZXJyX2hhbmRsZXIgPSBcXHUwMDI2d3hfZXJyX2hhbmRsZXIsXFxuIH07XFxuIFxcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuaW5kZXggODc3MjM0ZTNmZGMyYi4uM2U5M2EzZjMwOWMxNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgdHhnYmVfdXAoc3RydWN0IHd4ICp3eCk7XFxuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbiBcXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXFxcXG4gXFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjA3Ljk1ODI4ODI4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNzA1MzI3NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZywgcmVzZXQsIGFuZCB0aW1lb3V0IGxvZ2ljIGluIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkuIFRoZXNlIGRyaXZlcnMgYXJlIGZvciB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM3N2M1YTFhZjE5NzFlOTMzM2VhODAwOWZhMDk4M2IwMzI5MmQ0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZi4uYzg3MjRiYjEyOWFhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgKzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWQ5M2MzODIxZDZkMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbitcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHUxNiB2aWQsIHBjaV9jbWQ7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuK1xuK1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xuK1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2Fybih3eCwgXCJSZXNldCBhZGFwdGVyLlxcblwiKTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGRldGFjaGVkIChlLmcuLCBkdWUgdG8gQUVSIGVycm9yIGhhbmRsaW5nKSxcbitcdCAqIGFib3J0IHRoZSByZXNldCB0YXNrIHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGEgZGVhZCBvciB1bm1hbmFnZWRcbitcdCAqIGhhcmR3YXJlLlxuK1x0ICovXG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBEb3VibGUgY2hlY2s6IFZlcmlmeSBpZiB0aGUgUENJZSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LiAqL1xuK1x0XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcdFx0ZWxzZVxuK1x0XHRcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggMjIwMzdmMDE1ZGVkMS4uOTQwZDJlNTk4NzZjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMi4uMTIyYzQ5NTJkMjAzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggNDc2YjcxMDQ5ZjdlNi4uN2UxY2UwOGE3OTdhYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTE0LDcgKzMxNTEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTY0LDcgKzMyMDEsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzczLDUgKzM0MTAsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYmM2NzE3ODY5NzhlNS4uOWQ4NWQzOTllMTdmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Li4zZWVhNjQ3YzQ3NDJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTYuLmFkMmY4MjQ4NzVkNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IDY1ZTNlNTVkYjFjZmYuLmFhMzU3ZTI2MGM0YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiArNDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUge1xuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfSEVBRF9XQiAgICAgICAgIEJJVCgyNylcbiBcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbitcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICsgKHZmX3FfaW5kZXgpKSlcbitcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXG5AQCAtMTA0MCw2ICsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbitcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG4gI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcXFxuIFx0Zm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS1cdTAwM2VuZXh0KVxuIFxuK2VudW0gd3hfcmluZ19zdGF0ZSB7XG4rXHRXWF9UWF9ERVRFQ1RfSEFORyxcbitcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXG4rXHRXWF9SSU5HX1NUQVRFX05CSVRTXG4rfTtcbitcbiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIge1xuIFx0c3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovXG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xuQEAgLTEwNzQsNiArMTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbitcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XG4gXHRXWF9TVEFURV9QVFBfUlVOTklORyxcbiBcdFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUyxcbiBcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXG4rXHRXWF9TVEFURV9ESVNBQkxFRCxcbitcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICsxMjkwLDggQEAgZW51bSB3eF9wZl9mbGFncyB7XG4gXHRXWF9GTEFHX05FRURfRE9fUkVTRVQsXG4gXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXG4gXHRXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELFxuK1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuK1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICsxNDEyLDggQEAgc3RydWN0IHd4IHtcbiBcdHZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpO1xuIFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7XG4tXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuK1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4rXHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgKzE0NDEsOCBAQCBzdHJ1Y3Qgd3gge1xuIFxuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyArMTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpXG4gXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2VycihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuLVxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4rXHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzIuLjE5NjBmNzE1NDE1MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5Zi4uNTZkNGI2MzM4N2ZkNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiArNTQ4LDE2IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdG5nYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyArNTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiArNjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rXHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1xuK1x0bmdiZV9kb3duKHd4KTtcbitcdG5nYmVfdXAod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK31cbitcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4rXHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4rXHRlbHNlXG4rXHRcdG5nYmVfcmVzZXQod3gpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuK1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbiBcdG5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0bmdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4rXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTgyMyw2ICs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC04NTQsNiArOTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHBoeWxpbmtfZGVzdHJveSh3eC1cdTAwM2VwaHlsaW5rKTtcbiBcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldixcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHR3eF9lcnIod3gsIFwiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwiKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbitcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTkxNCw2ICs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuaW5kZXggNzA3N2EwZGE0Yzk4Ni4uYzkyMzNkYzdhZTUwNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgKzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCk7XG4gaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCBjMjc3ODYzYmFmNjdhLi41ODJlZTU2N2U2YjljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi9cbiBcdG1zbGVlcCgyMDApO1xuIFxuK1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbitcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbitcdCAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiArMTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgKzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiArMTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxuXCIsIGVycik7XG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiArNDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgKzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiArNzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgKzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiArMTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmIuLjNlOTNhM2YzMDljMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjA3Ljk1ODI4OTU3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTcxMDI3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGZvY3VzZXMgb24gaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBQQ0llIHJlY292ZXJ5IHdpdGhpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYG5nYmVgIGFuZCBgdHhnYmVgLiBUaGV5J3ZlIGltcGxlbWVudGVkIGEgbmV3IGB3eF9lcnIuY2Agd2l0aGluIGBsaWJ3eGAgd2hpY2ggc2VlbXMgdG8gY29udGFpbiBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGB3eF9pb19zbG90X3Jlc2V0YCwgYW5kIHRoZSBhbGwtaW1wb3J0YW50IGhhbmcgZGV0ZWN0aW9uLiBGcm9tIGEgUENJIGRyaXZlciBwZXJzcGVjdGl2ZSwgdGhleSBhcmUgaG9va2luZyB1cCBhIG5ldyBgd3hfZXJyX2hhbmRsZXJgIHRvIHRoZSBQQ0kgZHJpdmVyJ3MgYGVycl9oYW5kbGVyYCwgYW5kIHNldHRpbmcgdXAgYG5kb190eF90aW1lb3V0YCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBQQ0llIGlzc3Vlcy4gSXQgbG9va3MgbGlrZSB0aGV5IGFsc28gaGF2ZSBhIHJlc2V0IHdvcmtxdWV1ZSBhbmQgdGFzayBub3csIHdoaWNoIGlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgYXN5bmNocm9ub3VzIHJlY292ZXJ5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCwgaG93ZXZlciwgZ29lcyB0byBmdXp6aW5nLiBUaGVzZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcywgYXJlbid0IHRoZXk/IFRoZSBiaWcgcXVlc3Rpb24gaXM6IGNhbiB3ZSByZWFsaXN0aWNhbGx5IGZ1enogdGhlc2UgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgd291bGQgbmVlZCB0byBmaW5kIG91dCBpZiBgbmdiZWAgb3IgYHR4Z2JlYCBhcmUgZW11bGF0ZWQgaW4gUUVNVS4gVW5mb3J0dW5hdGVseSwgSSBkb24ndCBoYXZlIHRoZSBRRU1VIHNvdXJjZSBjb2RlIGhhbmR5IGhlcmUuIE15IHVzdWFsIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgUUVNVSBzb3VyY2UgZm9yIHRob3NlIGRyaXZlciBuYW1lcy5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGEgcG90ZW50aWFsIGh1cmRsZS4gVHlwaWNhbGx5LCBpZiBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgaW4gdGhlIGNhc2Ugb2YgYGUxMDAwZWAsIGBpZ2JgLCBgcnRsODEzOWAsIGV0Yy4sIHdoaWNoIGFyZSBlbXVsYXRlZCwgb3IgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBwY25ldGAsIGV0Yy4sIHdoaWNoIGFyZSBhbHNvIGVtdWxhdGVkKSwgZWZmZWN0aXZlbHkgZnV6emluZyB0aGVzZSBkcml2ZXJzIGJlY29tZXMgZXh0cmVtZWx5IGNoYWxsZW5naW5nLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGBwcm9iZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIgd29uJ3QgZmluZCB0aGUgbmVjZXNzYXJ5IFBDSSBkZXZpY2UsIHdoaWNoIG1lYW5zIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIG5ldmVyIGdldHMgcmVnaXN0ZXJlZCwgc2V2ZXJlbHkgbGltaXRpbmcgb3VyIGFiaWxpdHkgdG8gZnV6eiBlZmZlY3RpdmVseS5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIFBDSSBJRHMgYXNzb2NpYXRlZCB3aXRoIGBuZ2JlYCBhbmQgYHR4Z2JlYC4gS25vd2luZyB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHdpbGwgYWxsb3cgbWUgdG8gY2hlY2sgcXVpY2tseSBpZiB0aGVyZSdzIGFueSBRRU1VIGVtdWxhdGlvbiBzdXBwb3J0IGZvciB0aGVzZSBzcGVjaWZpYyBjYXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjoxNS43MTUzOTY2NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDYwMTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQ0lfVkVORE9SX0lEX1dBTkdYVU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jPTI0NzI9aW50IHd4X3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYy0yNDg5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYzoyNDkwOlxcdGlmICh3eC1cXHUwMDNlb2VtX3N2aWQgPT0gUENJX1ZFTkRPUl9JRF9XQU5HWFVOIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jLTI0OTEtXFx0ICAgIHBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2Mi1cXG5pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaDozMTYzOiNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XQU5HWFVOXFx0XFx0MHg4MDg4XFxuaW5jbHVkZS9saW51eC9wY2lfaWRzLmgtMzE2NC1cXG4tLVxcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycz0xNzI9ICAgIGZuIGZtdChcXHUwMDI2c2VsZiwgZjogXFx1MDAyNm11dCBmbXQ6OkZvcm1hdHRlclxcdTAwM2MnX1xcdTAwM2UpIC1cXHUwMDNlIGZtdDo6UmVzdWx0IHtcXG4tLVxcbnJ1c3Qva2VybmVsL3BjaS9pZC5ycy01NjMtICAgIElOVEVMICAgICAgICAgICAgICAgICAgICA9IGJpbmRpbmdzOjpQQ0lfVkVORE9SX0lEX0lOVEVMLCAgICAgICAgICAgICAgICAgICAgLy8gMHg4MDg2XFxucnVzdC9rZXJuZWwvcGNpL2lkLnJzOjU2NDogICAgV0FOR1hVTiAgICAgICAgICAgICAgICAgID0gYmluZGluZ3M6OlBDSV9WRU5ET1JfSURfV0FOR1hVTiwgICAgICAgICAgICAgICAgICAvLyAweDgwODhcXG5ydXN0L2tlcm5lbC9wY2kvaWQucnMtNTY1LSAgICBTQ0FMRU1QICAgICAgICAgICAgICAgICAgPSBiaW5kaW5nczo6UENJX1ZFTkRPUl9JRF9TQ0FMRU1QLCAgICAgICAgICAgICAgICAgIC8vIDB4ODY4NlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MjoxNy4zNzAwMDQ1NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkzNTg1OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgY29uc2lkZXJlZCBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyB0YXJnZXRzIGVycm9yIGhhbmRsaW5nIGFuZCByZXNldCBsb2dpYyB3aXRoaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCBgbmdiZWAgYW5kIGB0eGdiZWAuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciAqcGh5c2ljYWwqIFBDSWUgaGFyZHdhcmUgY2FyZHMsIG5vdGhpbmcgZW11bGF0ZWQuIENydWNpYWxseSwgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIG9mIG15IHZpcnR1YWxpemVkIHRlc3RpbmcgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgR0NFLiBHaXZlbiB0aGlzLCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYXJlLCBpbiBlc3NlbmNlLCB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGNvbmZpZ3VyYXRpb25zIEkgdHlwaWNhbGx5IHV0aWxpemUuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlIHRoYXQncyBub3QgcmVwcmVzZW50ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSXQncyBzaW1wbHkgbm90IHByYWN0aWNhbCB0byBmdXp6IHRoaXMgd2l0aG91dCB0aGUgcHJvcGVyIHBoeXNpY2FsIGVxdWlwbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzMsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQyOjIxLjY2MzU5MzYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcsIHJlc2V0LCBhbmQgdGltZW91dCBsb2dpYyBpbiB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpLiBUaGVzZSBkcml2ZXJzIGFyZSBmb3IgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nLCByZXNldCwgYW5kIHRpbWVvdXQgbG9naWMgaW4gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KS4gVGhlc2UgZHJpdmVycyBhcmUgZm9yIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7r4h4[1] Phase: Running StartedAt: 2026-08-01 13:42:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r4h4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 13:42:32 +0000 UTC FinishedAt: 2026-08-01 13:42:37 +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,}