Name: series-workflowc5dgp Phase: Failed StartedAt: 2026-07-25 14:14:42 +0000 UTC FinishedAt: 2026-07-25 14:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5dgp[0] Phase: Succeeded StartedAt: 2026-07-25 14:14:42 +0000 UTC FinishedAt: 2026-07-25 14:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5dgp[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 14:14:42 +0000 UTC FinishedAt: 2026-07-25 14:37:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjNhMzczMmVjMTU3MTY3ZWFjOThiOWJiN2M1NDYxNzFlZjFmYWY3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjM3OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICYjNDM7NCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzkzNjg0NWMyODk0YzFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbkBAIC0wLDAgJiM0MzsxLDMxOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9lcnIuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcbiYjNDM7ICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3eClcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkge1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbiYjNDM7XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbiYjNDM7XHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuJiM0MztcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDIyMDM3ZjAxNWRlZDE5Li45NDBkMmU1OTg3NmM3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IDMxNTcyZjU5YjljZTJjLi5mMzJmMTI0NjM4NjM1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTIsNyAmIzQzOzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2Miw3ICYjNDM7MzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzcxLDUgJiM0MzszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1NC4uOWQ4NWQzOTllMTdmNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Zi4uM2VlYTY0N2M0NzQyYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMzIxLDYgJiM0MzszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gSFo7XG4mIzQzO1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcbiBcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4mIzQzO1x0XHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbiYjNDM7XHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbiYjNDM7XHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xcblwmIzM0Oywgd3gtXHUwMDNlbmV0ZGV2LVx1MDAzZW5hbWUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA2NWUzZTU1ZGIxY2ZmYi4uYWEzNTdlMjYwYzRjNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiAmIzQzOzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgJiM0MzsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICYjNDM7MTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICYjNDM7MTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgJiM0MzsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyAmIzQzOzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IGMyNzc4NjNiYWY2N2EyLi41ODJlZTU2N2U2YjljMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDEyICYjNDM7OTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xuIFx0bXNsZWVwKDIwMCk7XG4gXG4mIzQzO1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbiYjNDM7XHQgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsXG4mIzQzO1x0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcbiBcdGlmIChlcnIgPT0gLUVOT0RFVilcbiBcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG5AQCAtMTA2LDYgJiM0MzsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg2MCwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTY3LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgJiM0MzsxMDAyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgJiM0MzsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNhMzczMmVjMTU3MTY3ZWFjOThiOWJiN2M1NDYxNzFlZjFmYWY3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDE0OjM3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc5MzY4NDVjMjg5NGMxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgewomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCiYjNDM7CXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi8KJiM0MzsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwlwY2lfc2V0X21hc3RlcihwZGV2KTsKJiM0MzsJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJd3gtJmd0O2Rvd25fc3VzcGVuZCh3eCk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBuZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7CiYjNDM7CS5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLAomIzQzOwkuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsCiYjNDM7CS5yZXN1bWUgPSB3eF9pb19yZXN1bWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsICYjMzQ7UmVzZXQgYWRhcHRlci5cbiYjMzQ7KTsKJiM0MzsJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCXd4LSZndDtkb19yZXNldCh3eC0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQl3eF9zb2Z0X3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXUxNiB2aWQsIHBjaV9jbWQ7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LSZndDtwZGV2LCBQQ0lfVkVORE9SX0lELCAmYW1wO3ZpZCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LSZndDtwZGV2LCBQQ0lfQ09NTUFORCwgJmFtcDtwY2lfY21kKTsKJiM0MzsKJiM0MzsJLyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi8KJiM0MzsJaWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWUKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVIKJiM0MzsJICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZAomIzQzOwkgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC4KJiM0MzsJICovCiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CXd4X2Vycih3eCwgJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcbiYjMzQ7KTsKJiM0MzsJd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKQomIzQzOwkJd3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7CiYjNDM7CWVsc2UKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVzZXQod3gpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpOwomIzQzOwomIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsCiYjNDM7CQkmIzM0O0RldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxuJiMzNDssCiYjNDM7CQl0eF9yaW5nLSZndDtxdWV1ZV9pbmRleCwKJiM0MzsJCXJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctJmd0O3JlZ19pZHgpKSwKJiM0MzsJCXJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctJmd0O3JlZ19pZHgpKSwKJiM0MzsJCXR4X3JpbmctJmd0O25leHRfdG9fdXNlLCBuZXh0LAomIzQzOwkJdHhfcmluZy0mZ3Q7dHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7CiYjNDM7CiYjNDM7CW5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy0mZ3Q7bmV0ZGV2LCB0eF9yaW5nLSZndDtxdWV1ZV9pbmRleCk7CiYjNDM7CiYjNDM7CXd4X3R4X3RpbWVvdXRfcmVzZXQod3gpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmgKQEAgLTAsMCAmIzQzOzEsMTggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfV1hfRVJSX0hfCiYjNDM7I2RlZmluZSBfV1hfRVJSX0hfCiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpOwomIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwppbmRleCAyMjAzN2YwMTVkZWQxOS4uOTQwZDJlNTk4NzZjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCwKIAllbHNlCiAJCXJpbmctJmd0O2F0cl9zYW1wbGVfcmF0ZSA9IDA7CiAKJiM0MzsJYml0bWFwX3plcm8ocmluZy0mZ3Q7c3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpOwogCS8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqLwogCW1lbXNldChyaW5nLSZndDt0eF9idWZmZXJfaW5mbywgMCwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy0mZ3Q7Y291bnQpOwpAQCAtMjg1MSwxNiAmIzQzOzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpOwogc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpCiB7CiAJc3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gJmFtcDt3eC0mZ3Q7c3RhdHM7CiYjNDM7CXU2NCBkYXRhOwomIzQzOwlpbnQgaTsKIAogCWlmICh3eC0mZ3Q7ZmMubW9kZSAhPSB3eF9mY19mdWxsICZhbXA7JmFtcDsKIAkgICAgd3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpCiAJCXJldHVybjsKIAogCWlmICh3eC0mZ3Q7bWFjLnR5cGUgJmd0Oz0gd3hfbWFjX2FtbCkKLQkJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCwKLQkJCQkJICAgICAgICZhbXA7d3gtJmd0O2xhc3Rfc3RhdHMubHhvZmZyeGMpOwomIzQzOwkJZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCwKJiM0MzsJCQkJICZhbXA7d3gtJmd0O2xhc3Rfc3RhdHMubHhvZmZyeGMpOwogCWVsc2UKLQkJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CQlkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTsKJiM0MzsJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IGRhdGE7CiYjNDM7CiYjNDM7CS8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovCiYjNDM7CWlmICghZGF0YSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCmluZGV4IDMxNTcyZjU5YjljZTJjLi5mMzJmMTI0NjM4NjM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogCiAjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfdmZfbGliLmgmIzM0OwpAQCAtNzQyLDYgJiM0Mzs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpCiAJcmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy0mZ3Q7bmV0ZGV2LCByaW5nLSZndDtxdWV1ZV9pbmRleCk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7CiYjNDM7CiYjNDM7CWhlYWQgPSByaW5nLSZndDtuZXh0X3RvX2NsZWFuOwomIzQzOwl0YWlsID0gcmluZy0mZ3Q7bmV4dF90b191c2U7CiYjNDM7CiYjNDM7CXJldHVybiAoKGhlYWQgJmx0Oz0gdGFpbCkgPyB0YWlsIDogdGFpbCAmIzQzOyByaW5nLSZndDtjb3VudCkgLSBoZWFkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKQomIzQzO3sKJiM0MzsJdTMyIHR4X2RvbmVfb2xkID0gcmluZy0mZ3Q7dHhfc3RhdHMudHhfZG9uZV9vbGQ7CiYjNDM7CXUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7CiYjNDM7CXUzMiB0eF9kb25lID0gcmluZy0mZ3Q7c3RhdHMucGFja2V0czsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgJmFtcDsmYW1wOyB0eF9wZW5kaW5nKQomIzQzOwkJLyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi8KJiM0MzsJCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJLyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi8KJiM0MzsJcmluZy0mZ3Q7dHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lOwomIzQzOwkvKiByZXNldCB0aGUgY291bnRkb3duICovCiYjNDM7CWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwogICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb24KQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLAogCW5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSwKIAkJCQkgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTsKIAomIzQzOwlpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkgewomIzQzOwkJd3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQogCWlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzICZhbXA7JmFtcDsgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgJmd0Oz0gVFhfV0FLRV9USFJFU0hPTEQpKSkgewpAQCAtMzExMiw3ICYjNDM7MzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IGZlYXR1cmVzOwogCiAJaWYgKGNoYW5nZWQgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAJZWxzZSBpZiAoY2hhbmdlZCAmYW1wOyAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKQogCQl3eF9zZXRfcnhfbW9kZShuZXRkZXYpOwogCkBAIC0zMTYyLDcgJiM0MzszMTk5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAogb3V0OgogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMzcxLDUgJiM0MzszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7CiAKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBjaV9jbGVhcl9tYXN0ZXIod3gtJmd0O3BkZXYpOwomIzQzOwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX2NhcnJpZXJfb2ZmKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl90eF9kaXNhYmxlKHd4LSZndDtuZXRkZXYpOwomIzQzOwl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKJiM0MzsJd3hfcHRwX3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpOwomIzQzOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy4mIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCmluZGV4IGJjNjcxNzg2OTc4ZTU0Li45ZDg1ZDM5OWUxN2Y0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Zi4uM2VlYTY0N2M0NzQyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMzIxLDYgJiM0MzszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpOwogCWludCB0c19kb25lOwogCiYjNDM7CWlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gSFo7CiYjNDM7CiAJdHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTsKIAogCXd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7CkBAIC04NDIsNiAmIzQzOzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTsKIAomIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX2Nsb2NrKQomIzQzOwkJcHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfdHhfc2tiKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueSh3eC0mZ3Q7cHRwX3R4X3NrYik7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX2Nsb2NrKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXd4LSZndDtwdHBfY2xvY2sgPSBOVUxMOwomIzQzOwkJZGV2X2luZm8oJmFtcDt3eC0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlbW92ZWQgUEhDIG9uICVzXG4mIzM0Oywgd3gtJmd0O25ldGRldi0mZ3Q7bmFtZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IGMyNzc4NjNiYWY2N2EyLi41ODJlZTU2N2U2YjljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05MywxMiAmIzQzOzk0LDI0IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogewogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovCiAJbXNsZWVwKDIwMCk7CiAKJiM0MzsJLyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy4KJiM0MzsJICogTW9kdWxlIGlkZW50aWZpY2F0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHVwIGV2ZW50LAomIzQzOwkgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX2lkZW50aWZ5X21vZHVsZSh3eCk7CiAJaWYgKGVyciA9PSAtRU5PREVWKQogCQlzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncyk7CkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIAogc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuOwogCkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTsKIAl0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTsKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIAkvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKTsKIAl3eF9uYXBpX2VuYWJsZV9hbGwod3gpOwogCiAJc3dpdGNoICh3eC0mZ3Q7bWFjLnR5cGUpIHsKQEAgLTE4Nyw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIAl1OCBvbGRfYWRkcltFVEhfQUxFTl07CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpOwogCWlmIChlcnIgIT0gMCkKIAkJd3hfZXJyKHd4LCAmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxuJiMzNDssIGVycik7CkBAIC0yMjQsNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAJd3hfaXJxX2Rpc2FibGUod3gpOwogCXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwogCiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwogCkBAIC0yOTIsNiAmIzQzOzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpCiAJdHhnYmVfdXBfY29tcGxldGUod3gpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBoeWxpbmtfc3RvcCh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJdHhnYmVfZnJlZV9taXNjX2lycSh3eC0mZ3Q7cHJpdik7CiYjNDM7CXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKJiM0MzsJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTQwOCw2ICYjNDM7NDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpCiAKIAl3eC0mZ3Q7c2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YzsKIAl3eC0mZ3Q7ZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDsKJiM0MzsJd3gtJmd0O2Rvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC01MTgsMTIgJiM0Mzs1NTcsMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJdHhnYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwogCXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKIAl0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTsKJiM0MztvdXQ6CiAJd3hfY29udHJvbF9odyh3eCwgZmFsc2UpOwogCiAJcmV0dXJuIDA7CkBAIC01NDQsNyAmIzQzOzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7d3gtJmd0O3Jlc2V0X2xvY2spOwogfQogCi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJmFtcDsmYW1wOyByZWluaXQpCiAJCXR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpOwogCWVsc2UKIAkJdHhnYmVfcmVzZXQod3gpOwpAQCAtNjU0LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSwKIAkubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsCiAJLm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLAomIzQzOwkubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsCiAJLm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcywKIAkubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcywKQEAgLTc0NSw2ICYjNDM7NzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAl3eC0mZ3Q7ZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTsKIAl0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO3R4Z2JlX25ldGRldl9vcHM7CiYjNDM7CW5ldGRldi0mZ3Q7d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJbmV0ZGV2LSZndDt1ZHBfdHVubmVsX25pY19pbmZvID0gJmFtcDt0eGdiZV91ZHBfdHVubmVsczsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpAQCAtODE0LDYgJiM0Mzs4NjAsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCiYjNDM7CWVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9tYWNfdGFibGU7CiYjNDM7CiAJdHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04ODksNiAmIzQzOzkzOSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlbW92ZV9waHk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC05MTYsNiAmIzQzOzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTk0OSw2ICYjNDM7MTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk2MCw3ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTcwLDYgJiM0MzsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMg4oCTIGBsaWJ3eGAsIGBuZ2JlYCwgYW5kIGB0eGdiZWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc2V0IGxvZ2ljLCB3aGljaCBpcyBnb29kLiBTcGVjaWZpY2FsbHksIGEgbmV3IGB3eF9lcnIuY2AgZmlsZSBpbXBsZW1lbnRzIFBDSWUgZXJyb3IgaGFuZGxlcnMgKGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGV0Yy4pLCBUeCB0aW1lb3V0IGhhbmRsaW5nIChgd3hfdHhfdGltZW91dGApLCBUeCBoYW5nIGRldGVjdGlvbiAoYHd4X2hhbmRsZV90eF9oYW5nYCksIGFuZCBzb21lIHJlc2V0IHRhc2tzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5nYmVgIGFuZCBgdHhnYmVgIHRvIHVzZSB0aGVzZSBoYW5kbGVycyBieSBhZGRpbmcgdGhlIGVycm9yIGhhbmRsZXIgYW5kIHRpbWVvdXQgaGFuZGxlciBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgcmVsZXZhbnQgZHJpdmVyIHN0cnVjdHVyZXMuCgpOb3csIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBXYW5neHVuIGRyaXZlcnMsIGFuZCB0aGVzZSBhcmUgZm9yICpwaHlzaWNhbCogUENJZSBjYXJkcywgcmlnaHQ/IFRoZSBxdWVzdGlvbiBpcywgYXJlIFdhbmd4dW4gY2FyZHMgZXZlbiBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGZvciBmdXp6ZXIgdXNlLiBJIGRvbiYjMzk7dCBoYXZlIHRoZSBRRU1VIHNvdXJjZSByaWdodCBpbiBmcm9udCBvZiBtZSB0byBjaGVjaywgYW5kIGl0JiMzOTtzIG5vdCBsb29raW5nIGxpa2UgYSBzdGFuZGFyZCBkcml2ZXIgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBpbiBRRU1VIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UuCgpBaCwgdGhlIHByb21wdCByZW1pbmRzIG1lIHRoYXQgdGhlIHRhcmdldCBpcyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24uIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZ1enogdGhlc2UuCgpNb3N0IG9mIHRoZSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIEkgd29yayB3aXRoLCBsaWtlIEludGVsIChlMTAwMGUsIGlnYikgb3IgUmVhbHRlayAocnRsODEzOSksIGFyZSBnZW5lcmFsbHkgd2VsbC1zdXBwb3J0ZWQgYW5kIGVtdWxhdGVkIGluIFFFTVUuIFdhbmd4dW4/IFByb2JhYmx5IG5vdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZHJpdmVycyBhcmUgZXZlbiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjaGVjayBvbiB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGRyaXZlciBkaXJlY3RvcnkgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkdCRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mjg6Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODU6Y29uZmlnIE5HQkVWRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIEFkYXB0ZXJzKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGEgcGF0Y2ggaW52b2x2aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIGlzIHdvcnRoIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdC4gV2FuZ3h1biBpcyBhIENoaW5lc2UgdmVuZG9yOyB0aGV5JiMzOTtyZSBub3QgYSB3aWRlbHkgZW11bGF0ZWQgaGFyZHdhcmUgcGxhdGZvcm0sIGVzcGVjaWFsbHkgbm90IHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhciBvbiB0aGlzIHBvaW50LiBJdCBzcGVjaWZpY2FsbHkgZmxhZ3MgY29kZSBwYXRocyB0aGF0IGFyZSBpbmFjY2Vzc2libGUgaW4gdmlydHVhbGl6YXRpb24sIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgYW5kIGNpdGVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgYXMgZXhhbXBsZXMuIFdhbmd4dW4sIHdpdGggdGhlaXIgbmdiZSBhbmQgdHhnYmUgZHJpdmVycywgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byByZXF1aXJlIGEgcGh5c2ljYWwgY2FyZCwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gUUVNVS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBoYXJkd2FyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLCBidXQgSSYjMzk7bSBub3Qgb3B0aW1pc3RpYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzMwCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0llIE5ldHdvcmsgQ2FyZCBEcml2ZXIqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgKmp1c3QqIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBOb3RoaW5nIGZhbmN5LCBub3RoaW5nIGVtdWxhdGVkLiBJdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlIG9uIGEgcGh5c2ljYWwgbWFjaGluZSwgbm90IGEgdmlydHVhbCBvbmUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSBpdCYjMzk7cyBub3QgdGhlIHNvcnQgb2YgdGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBlbXVsYXRlZCBpbiBzb21ldGhpbmcgbGlrZSBRRU1VLiBHaXZlbiBpdHMgbmF0dXJlIGFuZCBpdHMgdGFyZ2V0IGVudmlyb25tZW50LCB0aGVyZSYjMzk7cyBubyByZWFsIGJlbmVmaXQgaW4gZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlciAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZSwgdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzowNC4yNTExNjEzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njk2MTQ4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZSwgdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MDQuMjUxMTgwMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODc5MTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzYTM3MzJlYzE1NzE2N2VhYzk4YjliYjdjNTQ2MTcxZWYxZmFmNzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6Mzc6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTM2ODQ1YzI4OTRjMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTAsMCArMSwzMTkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4rXFxuKy8qKlxcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXFxuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0aWYgKCF3eClcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfc29mdF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXFxuK1xcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXG4rXFx0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXFxuK1xcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuK1xcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xcbitcXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG93bl9zdXNwZW5kKVxcbitcXHRcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIGZhbHNlKTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XFxuKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2ID0gd3gtXFx1MDAzZW5ldGRldjtcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0ZXJyID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XFxuK1xcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxcbitcXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXFxuK1xcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xcbitcXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2Fybih3eCwgXFxcIlJlc2V0IGFkYXB0ZXIuXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0d3hfc29mdF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XFxuK1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcXG4rXFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3gtXFx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc19yZXNldF93cV8leFxcXCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMSwgd3gtXFx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuK1xcdGlmICghd3gtXFx1MDAzZXJlc2V0X3dxKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXFx1MDAyNnd4LVxcdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xcbitcXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuK1xcdHUzMiBpLCBqO1xcbitcXG4rXFx0aWYgKCF3eC1cXHUwMDNlbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xcbitcXHRcXHRcXHR1MzIgaCwgdDtcXG4rXFxuK1xcdFxcdFxcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcdFxcdFxcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaCAhPSB0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xcbitcXHRcXHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcXG4rXFx0XFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcXG4rXFx0XFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXFxuK1xcdFxcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdFxcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XFxuK1xcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0dTE2IHZpZCwgcGNpX2NtZDtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcXHUwMDI2dmlkKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcXHUwMDI2cGNpX2NtZCk7XFxuK1xcbitcXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXFxuK1xcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXFxuK1xcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9lcnIod3gsIFxcXCJQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4rXFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4rXFx0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXFxuK1xcdFxcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XFxuK1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdHd4X3dhcm4od3gsXFxuK1xcdFxcdFxcXCJEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4LFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UsIG5leHQsXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xcbitcXG4rXFx0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVxcdTAwM2VuZXRkZXYsIHR4X3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFxuK1xcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1dYX0VSUl9IX1xcbisjZGVmaW5lIF9XWF9FUlJfSF9cXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XFxuK1xcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggMjIwMzdmMDE1ZGVkMTkuLjk0MGQyZTU5ODc2YzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gfVxcbiBcXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuQEAgLTE5MzIsNiArMTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXFxuIFxcdGVsc2VcXG4gXFx0XFx0cmluZy1cXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcXG4gXFxuK1xcdGJpdG1hcF96ZXJvKHJpbmctXFx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcXG4gXFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXFxuIFxcdG1lbXNldChyaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcXG4gXFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXFx1MDAzZWNvdW50KTtcXG5AQCAtMjg1MSwxNiArMjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XFxuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFxcdTAwMjZ3eC1cXHUwMDNlc3RhdHM7XFxuK1xcdHU2NCBkYXRhO1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB3eC1cXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VtYWMudHlwZSBcXHUwMDNlPSB3eF9tYWNfYW1sKVxcbi1cXHRcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbitcXHRcXHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRcXHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcXG4rXFxuK1xcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5pbmRleCAzMTU3MmY1OWI5Y2UyYy4uZjMyZjEyNDYzODYzNTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF92Zl9saWIuaFxcXCJcXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cXHUwMDNlbmV0ZGV2LCByaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XFxuK1xcbitcXHRoZWFkID0gcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFx0dGFpbCA9IHJpbmctXFx1MDAzZW5leHRfdG9fdXNlO1xcbitcXG4rXFx0cmV0dXJuICgoaGVhZCBcXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cXHUwMDNlY291bnQpIC0gaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcXG4rXFx0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcXG4rXFx0dTMyIHR4X2RvbmUgPSByaW5nLVxcdTAwM2VzdGF0cy5wYWNrZXRzO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXFx1MDAyNlxcdTAwMjYgdHhfcGVuZGluZylcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cXG4rXFx0XFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cXG4rXFx0cmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xcbitcXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXFxuK1xcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcXG4gXFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxcbiBcXHRcXHRcXHRcXHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcXG4gXFxuK1xcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XFxuK1xcdFxcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxcbiBcXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xcbkBAIC0zMTEyLDcgKzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XFxuIFxcbiBcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXHRlbHNlIGlmIChjaGFuZ2VkIFxcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcXG4gXFx0XFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcXG4gXFxuQEAgLTMxNjIsNyArMzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcbiBvdXQ6XFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM3MSw1ICszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xcbiBcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGNpX2NsZWFyX21hc3Rlcih3eC1cXHUwMDNlcGRldik7XFxuK1xcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xcbitcXHR3eF9wdHBfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGJjNjcxNzg2OTc4ZTU0Li45ZDg1ZDM5OWUxN2Y0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi4zZWVhNjQ3YzQ3NDJjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XFxuIFxcdGludCB0c19kb25lO1xcbiBcXG4rXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIEhaO1xcbitcXG4gXFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcXG4gXFxuIFxcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XFxuQEAgLTg0Miw2ICs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xcbiBcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaylcXG4rXFx0XFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNnd4LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZW1vdmVkIFBIQyBvbiAlc1xcXFxuXFxcIiwgd3gtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmFtZSk7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHRuZ2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK291dDpcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YTIuLjU4MmVlNTY3ZTZiOWMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsMTIgKzk0LDI0IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXFxuIFxcdG1zbGVlcCgyMDApO1xcbiBcXG4rXFx0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cXG4rXFx0ICogTW9kdWxlIGlkZW50aWZpY2F0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHVwIGV2ZW50LFxcbitcXHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xcbiBcXHRpZiAoZXJyID09IC1FTk9ERVYpXFxuIFxcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG5AQCAtMTA2LDYgKzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEyMyw2ICsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xcbiBcXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMTQ0LDYgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4gXFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XFxuIFxcdGlmIChlcnIgIT0gMClcXG4gXFx0XFx0d3hfZXJyKHd4LCBcXFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC0yMjQsNiArMjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtMjkyLDYgKzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK1xcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNDA4LDYgKzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XFxuIFxcdHd4LVxcdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtNTE4LDEyICs1NTcsMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdHR4Z2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTYwNiwxMSArNjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuIH1cXG4gXFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbiBcXHRcXHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0eGdiZV9yZXNldCh3eCk7XFxuQEAgLTY1NCw2ICs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzQ1LDYgKzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xcbiBcXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdG5ldGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFxcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcXG4gXFxuIFxcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xcbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXG4rXFx0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xcbitcXG4gXFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfcGh5O1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFxuQEAgLTkxNiw2ICs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtOTQ5LDYgKzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTYwLDcgKzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk3MCw2ICsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzowNS4xNzEwMTAyMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjc3NjI5MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYTM3MzJlYzE1NzE2N2VhYzk4YjliYjdjNTQ2MTcxZWYxZmFmNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDozNzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTM2ODQ1YzI4OTRjMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMTkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbitcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuK1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbitcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiJXNfcmVzZXRfd3FfJXhcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4rXHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuK1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuK1x0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbitcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuK1x0dTMyIGksIGo7XG4rXG4rXHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcbitcdFx0XHR1MzIgaCwgdDtcbitcbitcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXG4rXHRcdFx0aWYgKGggIT0gdClcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4rXHRcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuK1x0XHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xuK1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbitcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbitcdFx0ICovXG4rXHRcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCIpO1xuK1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4rXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1dYX0VSUl9IX1xuKyNkZWZpbmUgX1dYX0VSUl9IX1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4rXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCAyMjAzN2YwMTVkZWQxOS4uOTQwZDJlNTk4NzZjN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gfVxuIFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggMzE1NzJmNTliOWNlMmMuLmYzMmYxMjQ2Mzg2MzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCJ3eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuK1xuK1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuK1xuK1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbitcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4rXHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbitcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4rXHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4rXHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbitcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuK1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuK1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbitcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4rXHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTIsNyArMzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjIsNyArMzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNzEsNSArMzQwOCwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuK1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4rXHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuK1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1NC4uOWQ4NWQzOTllMTdmNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSArNDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjNlZWE2NDdjNDc0MmMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCByZXN0YXJ0X3F1ZXVlO1xuIFx0dTY0IHR4X2J1c3k7XG4rXHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xuK1x0V1hfVFhfREVURUNUX0hBTkcsXG4rXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuK1x0V1hfUklOR19TVEFURV9OQklUU1xuK307XG4rXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XG4gXHRcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xuIFx0XHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcbiBcdH07XG4rXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuK1x0V1hfU1RBVEVfRElTQUJMRUQsXG4rXHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiArMTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbitcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcbitcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyArMTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbitcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuK1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbisjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuK1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9zcmlvdi5oXCJcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbitcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5hZGRyKTtcbiBcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4X2NvbmZpZ3VyZSh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbit9XG4rXG4gLyoqXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggYzI3Nzg2M2JhZjY3YTIuLjU4MmVlNTY3ZTZiOWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi9cbiBcdG1zbGVlcCgyMDApO1xuIFxuK1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbitcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbitcdCAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiArMTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgKzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiArMTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxuXCIsIGVycik7XG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiArNDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgKzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiArNzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgKzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiArMTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MDUuMTcxMDEyNzAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTY4NDk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyDigJMgYGxpYnd4YCwgYG5nYmVgLCBhbmQgYHR4Z2JlYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIGFuZCByZXNldCBsb2dpYywgd2hpY2ggaXMgZ29vZC4gU3BlY2lmaWNhbGx5LCBhIG5ldyBgd3hfZXJyLmNgIGZpbGUgaW1wbGVtZW50cyBQQ0llIGVycm9yIGhhbmRsZXJzIChgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBldGMuKSwgVHggdGltZW91dCBoYW5kbGluZyAoYHd4X3R4X3RpbWVvdXRgKSwgVHggaGFuZyBkZXRlY3Rpb24gKGB3eF9oYW5kbGVfdHhfaGFuZ2ApLCBhbmQgc29tZSByZXNldCB0YXNrcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZ2JlYCBhbmQgYHR4Z2JlYCB0byB1c2UgdGhlc2UgaGFuZGxlcnMgYnkgYWRkaW5nIHRoZSBlcnJvciBoYW5kbGVyIGFuZCB0aW1lb3V0IGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIHJlbGV2YW50IGRyaXZlciBzdHJ1Y3R1cmVzLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXZSdyZSB0YWxraW5nIGFib3V0IFdhbmd4dW4gZHJpdmVycywgYW5kIHRoZXNlIGFyZSBmb3IgKnBoeXNpY2FsKiBQQ0llIGNhcmRzLCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgV2FuZ3h1biBjYXJkcyBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBmb3IgZnV6emVyIHVzZS4gSSBkb24ndCBoYXZlIHRoZSBRRU1VIHNvdXJjZSByaWdodCBpbiBmcm9udCBvZiBtZSB0byBjaGVjaywgYW5kIGl0J3Mgbm90IGxvb2tpbmcgbGlrZSBhIHN0YW5kYXJkIGRyaXZlciBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGluIFFFTVUgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZS5cblxuQWgsIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0aGF0IHRoZSB0YXJnZXQgaXMgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZ1enogdGhlc2UuXG5cbk1vc3Qgb2YgdGhlIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgSSB3b3JrIHdpdGgsIGxpa2UgSW50ZWwgKGUxMDAwZSwgaWdiKSBvciBSZWFsdGVrIChydGw4MTM5KSwgYXJlIGdlbmVyYWxseSB3ZWxsLXN1cHBvcnRlZCBhbmQgZW11bGF0ZWQgaW4gUUVNVS4gV2FuZ3h1bj8gUHJvYmFibHkgbm90LiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBkcml2ZXJzIGFyZSBldmVuIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgaG93LiBMZXQncyBzdGFydCB3aXRoIGEgY2hlY2sgb24gdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IHRvIHNlZSBob3cgdGhleSdyZSBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzoxMi41NjA3MDAxOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDUyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5HQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjM3OjEyLjYyNjQwOTY0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzIzNDIyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIEFkYXB0ZXJzKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYSBwYXRjaCBpbnZvbHZpbmcgV2FuZ3h1biBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgaXMgd29ydGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90LiBXYW5neHVuIGlzIGEgQ2hpbmVzZSB2ZW5kb3I7IHRoZXkncmUgbm90IGEgd2lkZWx5IGVtdWxhdGVkIGhhcmR3YXJlIHBsYXRmb3JtLCBlc3BlY2lhbGx5IG5vdCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXIgb24gdGhpcyBwb2ludC4gSXQgc3BlY2lmaWNhbGx5IGZsYWdzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemF0aW9uLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUsIGFuZCBjaXRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFzIGV4YW1wbGVzLiBXYW5neHVuLCB3aXRoIHRoZWlyIG5nYmUgYW5kIHR4Z2JlIGRyaXZlcnMsIGNsZWFybHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5IG9mIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIGRyaXZlci4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byByZXF1aXJlIGEgcGh5c2ljYWwgY2FyZCwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBoYXJkd2FyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLCBidXQgSSdtIG5vdCBvcHRpbWlzdGljLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCdzIGhpZ2hseSB1bmxpa2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MTcuOTU4NzU0ODkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzEzODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbmd4dW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzoxOC4wMTY0NzMxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMwODAxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJZSBOZXR3b3JrIENhcmQgRHJpdmVyKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgKmp1c3QqIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBOb3RoaW5nIGZhbmN5LCBub3RoaW5nIGVtdWxhdGVkLiBJdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbWVhbnMgaXQncyBkZXNpZ25lZCB0byBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSBvbiBhIHBoeXNpY2FsIG1hY2hpbmUsIG5vdCBhIHZpcnR1YWwgb25lLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgaXQncyBub3QgdGhlIHNvcnQgb2YgdGhpbmcgSSdkIGV4cGVjdCB0byBmaW5kIGVtdWxhdGVkIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIEdpdmVuIGl0cyBuYXR1cmUgYW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQsIHRoZXJlJ3Mgbm8gcmVhbCBiZW5lZml0IGluIGZ1enppbmcgdGhpcy4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyICpub3QqIGVtdWxhdGVkIGluIFFFTVUuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTczMCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjM3OjIxLjk0NzI3NzE2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc5dgp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 14:14:42 +0000 UTC FinishedAt: 2026-07-25 14:37:23 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjNhMzczMmVjMTU3MTY3ZWFjOThiOWJiN2M1NDYxNzFlZjFmYWY3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjM3OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICYjNDM7NCw1IEBAXG4gXG4gb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICYjNDM7PSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzkzNjg0NWMyODk0YzFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcbkBAIC0wLDAgJiM0MzsxLDMxOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9lcnIuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcbiYjNDM7ICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3eClcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkge1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbiYjNDM7XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbiYjNDM7XHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuJiM0MztcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDIyMDM3ZjAxNWRlZDE5Li45NDBkMmU1OTg3NmM3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IDMxNTcyZjU5YjljZTJjLi5mMzJmMTI0NjM4NjM1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTIsNyAmIzQzOzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2Miw3ICYjNDM7MzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzcxLDUgJiM0MzszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1NC4uOWQ4NWQzOTllMTdmNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgaW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Zi4uM2VlYTY0N2M0NzQyYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMzIxLDYgJiM0MzszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gSFo7XG4mIzQzO1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgJiM0Mzs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTtcbiBcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfUFRQX1BQU19FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4mIzQzO1x0XHRwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cdTAwM2VwdHBfdHhfc2tiKTtcbiYjNDM7XHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcbiYjNDM7XHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZW1vdmVkIFBIQyBvbiAlc1xcblwmIzM0Oywgd3gtXHUwMDNlbmV0ZGV2LVx1MDAzZW5hbWUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCA2NWUzZTU1ZGIxY2ZmYi4uYWEzNTdlMjYwYzRjNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiAmIzQzOzEwNDUsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgJiM0MzsxMDg2LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NSw2ICYjNDM7MTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NSw3ICYjNDM7MTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIzLDYgJiM0MzsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDUsNyAmIzQzOzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OSwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IGMyNzc4NjNiYWY2N2EyLi41ODJlZTU2N2U2YjljMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDEyICYjNDM7OTQsMjQgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogd2FpdCBmb3IgU0ZGIG1vZHVsZSByZWFkeSAqL1xuIFx0bXNsZWVwKDIwMCk7XG4gXG4mIzQzO1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbiYjNDM7XHQgKiBNb2R1bGUgaWRlbnRpZmljYXRpb24gaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdXAgZXZlbnQsXG4mIzQzO1x0ICogc28gaXQgaXMgc2FmZSB0byBiYWlsIG91dCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHd4KTtcbiBcdGlmIChlcnIgPT0gLUVOT0RFVilcbiBcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG5AQCAtMTA2LDYgJiM0MzsxMTksMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0NDYsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg2MCwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTY3LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ5LDYgJiM0MzsxMDAyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NjAsNyAmIzQzOzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTcwLDYgJiM0MzsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNhMzczMmVjMTU3MTY3ZWFjOThiOWJiN2M1NDYxNzFlZjFmYWY3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDE0OjM3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc5MzY4NDVjMjg5NGMxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgewomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCiYjNDM7CXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi8KJiM0MzsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwlwY2lfc2V0X21hc3RlcihwZGV2KTsKJiM0MzsJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJd3gtJmd0O2Rvd25fc3VzcGVuZCh3eCk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgomIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBuZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7CiYjNDM7CS5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLAomIzQzOwkuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsCiYjNDM7CS5yZXN1bWUgPSB3eF9pb19yZXN1bWUsCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsICYjMzQ7UmVzZXQgYWRhcHRlci5cbiYjMzQ7KTsKJiM0MzsJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCXd4LSZndDtkb19yZXNldCh3eC0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQl3eF9zb2Z0X3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpOwomIzQzOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7CiYjNDM7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4LSZndDtyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3Jlc2V0X3dxXyV4JiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLAomIzQzOwkJCQkgICAgICAgMSwgd3gtJmd0O2RyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LSZndDtwZGV2KSk7CiYjNDM7CWlmICghd3gtJmd0O3Jlc2V0X3dxKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfV09SSygmYW1wO3d4LSZndDtyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC0mZ3Q7dHhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWlmICh0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLSZndDtuZXh0X3RvX2NsZWFuKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9ICZhbXA7d3gtJmd0O3JpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07CiYjNDM7CXUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLSZndDttYXNrKTsKJiM0MzsJdTMyIGksIGo7CiYjNDM7CiYjNDM7CWlmICghd3gtJmd0O251bV92ZnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXUzMiBoLCB0OwomIzQzOwomIzQzOwkJCWggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CQkJdCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTsKJiM0MzsKJiM0MzsJCQlpZiAoaCAhPSB0KQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChuZXRpZl9jYXJyaWVyX29rKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkgewomIzQzOwkJLyogV2UmIzM5O3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAomIzQzOwkJICogYnV0IHdlJiMzOTt2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCYjMzk7cyBuZXZlciBnb2luZwomIzQzOwkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiYjNDM7CQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgomIzQzOwkJICovCiYjNDM7CQl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xuJiMzNDspOwomIzQzOwkJc2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7CiYjNDM7CXd4X2RldGVjdF90eF9oYW5nKHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXUxNiB2aWQsIHBjaV9jbWQ7CiYjNDM7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LSZndDtwZGV2LCBQQ0lfVkVORE9SX0lELCAmYW1wO3ZpZCk7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LSZndDtwZGV2LCBQQ0lfQ09NTUFORCwgJmFtcDtwY2lfY21kKTsKJiM0MzsKJiM0MzsJLyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi8KJiM0MzsJaWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWUKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVIKJiM0MzsJICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZAomIzQzOwkgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC4KJiM0MzsJICovCiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncyk7CiYjNDM7CXd4X2Vycih3eCwgJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXF1ZXVlX3dvcmsod3gtJmd0O3Jlc2V0X3dxLCAmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcbiYjMzQ7KTsKJiM0MzsJd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKQomIzQzOwkJd3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7CiYjNDM7CWVsc2UKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVzZXQod3gpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpOwomIzQzOwomIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CXd4X3dhcm4od3gsCiYjNDM7CQkmIzM0O0RldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxuJiMzNDssCiYjNDM7CQl0eF9yaW5nLSZndDtxdWV1ZV9pbmRleCwKJiM0MzsJCXJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctJmd0O3JlZ19pZHgpKSwKJiM0MzsJCXJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctJmd0O3JlZ19pZHgpKSwKJiM0MzsJCXR4X3JpbmctJmd0O25leHRfdG9fdXNlLCBuZXh0LAomIzQzOwkJdHhfcmluZy0mZ3Q7dHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7CiYjNDM7CiYjNDM7CW5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy0mZ3Q7bmV0ZGV2LCB0eF9yaW5nLSZndDtxdWV1ZV9pbmRleCk7CiYjNDM7CiYjNDM7CXd4X3R4X3RpbWVvdXRfcmVzZXQod3gpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmgKQEAgLTAsMCAmIzQzOzEsMTggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfV1hfRVJSX0hfCiYjNDM7I2RlZmluZSBfV1hfRVJSX0hfCiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7CiYjNDM7CiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpOwomIzQzO3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwppbmRleCAyMjAzN2YwMTVkZWQxOS4uOTQwZDJlNTk4NzZjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eCkKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqLwogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogfQogCiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCwKIAllbHNlCiAJCXJpbmctJmd0O2F0cl9zYW1wbGVfcmF0ZSA9IDA7CiAKJiM0MzsJYml0bWFwX3plcm8ocmluZy0mZ3Q7c3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpOwogCS8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqLwogCW1lbXNldChyaW5nLSZndDt0eF9idWZmZXJfaW5mbywgMCwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy0mZ3Q7Y291bnQpOwpAQCAtMjg1MSwxNiAmIzQzOzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpOwogc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpCiB7CiAJc3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gJmFtcDt3eC0mZ3Q7c3RhdHM7CiYjNDM7CXU2NCBkYXRhOwomIzQzOwlpbnQgaTsKIAogCWlmICh3eC0mZ3Q7ZmMubW9kZSAhPSB3eF9mY19mdWxsICZhbXA7JmFtcDsKIAkgICAgd3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpCiAJCXJldHVybjsKIAogCWlmICh3eC0mZ3Q7bWFjLnR5cGUgJmd0Oz0gd3hfbWFjX2FtbCkKLQkJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCwKLQkJCQkJICAgICAgICZhbXA7d3gtJmd0O2xhc3Rfc3RhdHMubHhvZmZyeGMpOwomIzQzOwkJZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCwKJiM0MzsJCQkJICZhbXA7d3gtJmd0O2xhc3Rfc3RhdHMubHhvZmZyeGMpOwogCWVsc2UKLQkJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CQlkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTsKJiM0MzsJaHdzdGF0cy0mZ3Q7bHhvZmZyeGMgJiM0Mzs9IGRhdGE7CiYjNDM7CiYjNDM7CS8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovCiYjNDM7CWlmICghZGF0YSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC0mZ3Q7dHhfcmluZ1tpXS0mZ3Q7c3RhdGUpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCmluZGV4IDMxNTcyZjU5YjljZTJjLi5mMzJmMTI0NjM4NjM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogCiAjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X2xpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X2Vyci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfdmZfbGliLmgmIzM0OwpAQCAtNzQyLDYgJiM0Mzs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpCiAJcmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy0mZ3Q7bmV0ZGV2LCByaW5nLSZndDtxdWV1ZV9pbmRleCk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7CiYjNDM7CiYjNDM7CWhlYWQgPSByaW5nLSZndDtuZXh0X3RvX2NsZWFuOwomIzQzOwl0YWlsID0gcmluZy0mZ3Q7bmV4dF90b191c2U7CiYjNDM7CiYjNDM7CXJldHVybiAoKGhlYWQgJmx0Oz0gdGFpbCkgPyB0YWlsIDogdGFpbCAmIzQzOyByaW5nLSZndDtjb3VudCkgLSBoZWFkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKQomIzQzO3sKJiM0MzsJdTMyIHR4X2RvbmVfb2xkID0gcmluZy0mZ3Q7dHhfc3RhdHMudHhfZG9uZV9vbGQ7CiYjNDM7CXUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7CiYjNDM7CXUzMiB0eF9kb25lID0gcmluZy0mZ3Q7c3RhdHMucGFja2V0czsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgJmFtcDsmYW1wOyB0eF9wZW5kaW5nKQomIzQzOwkJLyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi8KJiM0MzsJCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctJmd0O3N0YXRlKTsKJiM0MzsKJiM0MzsJLyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi8KJiM0MzsJcmluZy0mZ3Q7dHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lOwomIzQzOwkvKiByZXNldCB0aGUgY291bnRkb3duICovCiYjNDM7CWNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwogICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb24KQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLAogCW5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSwKIAkJCQkgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTsKIAomIzQzOwlpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkgewomIzQzOwkJd3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQogCWlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzICZhbXA7JmFtcDsgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKIAkJICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgJmd0Oz0gVFhfV0FLRV9USFJFU0hPTEQpKSkgewpAQCAtMzExMiw3ICYjNDM7MzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IGZlYXR1cmVzOwogCiAJaWYgKGNoYW5nZWQgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggJmFtcDsmYW1wOyB3eC0mZ3Q7ZG9fcmVzZXQpCi0JCXd4LSZndDtkb19yZXNldChuZXRkZXYpOwomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7CiAJZWxzZSBpZiAoY2hhbmdlZCAmYW1wOyAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKQogCQl3eF9zZXRfcnhfbW9kZShuZXRkZXYpOwogCkBAIC0zMTYyLDcgJiM0MzszMTk5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIAogb3V0OgogCWlmIChuZWVkX3Jlc2V0ICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMzcxLDUgJiM0MzszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7CiAKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBjaV9jbGVhcl9tYXN0ZXIod3gtJmd0O3BkZXYpOwomIzQzOwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtJmd0O25ldGRldik7CiYjNDM7CW5ldGlmX2NhcnJpZXJfb2ZmKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl90eF9kaXNhYmxlKHd4LSZndDtuZXRkZXYpOwomIzQzOwl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKJiM0MzsJd3hfcHRwX3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpOwomIzQzOwogTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7Q29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy4mIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCmluZGV4IGJjNjcxNzg2OTc4ZTU0Li45ZDg1ZDM5OWUxN2Y0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC00MSw1ICYjNDM7NDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiAKICNlbmRpZiAvKiBfV1hfTElCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwppbmRleCA0NGYzZTY1MDUyNDY4Zi4uM2VlYTY0N2M0NzQyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwpAQCAtMzIxLDYgJiM0MzszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpOwogCWludCB0c19kb25lOwogCiYjNDM7CWlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gSFo7CiYjNDM7CiAJdHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTsKIAogCXd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7CkBAIC04NDIsNiAmIzQzOzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3B0cF9zdG9wKTsKIAomIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX2Nsb2NrKQomIzQzOwkJcHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfdHhfc2tiKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueSh3eC0mZ3Q7cHRwX3R4X3NrYik7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CWlmICh3eC0mZ3Q7cHRwX2Nsb2NrKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih3eC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXd4LSZndDtwdHBfY2xvY2sgPSBOVUxMOwomIzQzOwkJZGV2X2luZm8oJmFtcDt3eC0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O3JlbW92ZWQgUEhDIG9uICVzXG4mIzM0Oywgd3gtJmd0O25ldGRldi0mZ3Q7bmFtZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IGMyNzc4NjNiYWY2N2EyLi41ODJlZTU2N2U2YjljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05MywxMiAmIzQzOzk0LDI0IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogewogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovCiAJbXNsZWVwKDIwMCk7CiAKJiM0MzsJLyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy4KJiM0MzsJICogTW9kdWxlIGlkZW50aWZpY2F0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHVwIGV2ZW50LAomIzQzOwkgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX2lkZW50aWZ5X21vZHVsZSh3eCk7CiAJaWYgKGVyciA9PSAtRU5PREVWKQogCQlzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncyk7CkBAIC0xMDYsNiAmIzQzOzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIAogc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQogewomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuOwogCkBAIC0xMjMsNiAmIzQzOzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTsKIAl0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTsKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTE0NCw2ICYjNDM7MTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIAkvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAljbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKTsKIAl3eF9uYXBpX2VuYWJsZV9hbGwod3gpOwogCiAJc3dpdGNoICh3eC0mZ3Q7bWFjLnR5cGUpIHsKQEAgLTE4Nyw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIAl1OCBvbGRfYWRkcltFVEhfQUxFTl07CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpOwogCWlmIChlcnIgIT0gMCkKIAkJd3hfZXJyKHd4LCAmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxuJiMzNDssIGVycik7CkBAIC0yMjQsNiAmIzQzOzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAJd3hfaXJxX2Rpc2FibGUod3gpOwogCXd4X25hcGlfZGlzYWJsZV9hbGwod3gpOwogCiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncyk7CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwogCkBAIC0yOTIsNiAmIzQzOzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpCiAJdHhnYmVfdXBfY29tcGxldGUod3gpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBoeWxpbmtfc3RvcCh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJdHhnYmVfZnJlZV9taXNjX2lycSh3eC0mZ3Q7cHJpdik7CiYjNDM7CXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKJiM0MzsJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTQwOCw2ICYjNDM7NDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpCiAKIAl3eC0mZ3Q7c2V0dXBfdGMgPSB0eGdiZV9zZXR1cF90YzsKIAl3eC0mZ3Q7ZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDsKJiM0MzsJd3gtJmd0O2Rvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC01MTgsMTIgJiM0Mzs1NTcsMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJdHhnYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwogCXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKIAl0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTsKJiM0MztvdXQ6CiAJd3hfY29udHJvbF9odyh3eCwgZmFsc2UpOwogCiAJcmV0dXJuIDA7CkBAIC01NDQsNyAmIzQzOzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTYwNiwxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7d3gtJmd0O3Jlc2V0X2xvY2spOwogfQogCi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJmFtcDsmYW1wOyByZWluaXQpCiAJCXR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpOwogCWVsc2UKIAkJdHhnYmVfcmVzZXQod3gpOwpAQCAtNjU0LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSwKIAkubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsCiAJLm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLAomIzQzOwkubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsCiAJLm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcywKIAkubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcywKQEAgLTc0NSw2ICYjNDM7NzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAl3eC0mZ3Q7ZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTsKIAl0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtJmd0O25ldGRldl9vcHMgPSAmYW1wO3R4Z2JlX25ldGRldl9vcHM7CiYjNDM7CW5ldGRldi0mZ3Q7d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJbmV0ZGV2LSZndDt1ZHBfdHVubmVsX25pY19pbmZvID0gJmFtcDt0eGdiZV91ZHBfdHVubmVsczsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpAQCAtODE0LDYgJiM0Mzs4NjAsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCiYjNDM7CWVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9tYWNfdGFibGU7CiYjNDM7CiAJdHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTsKIAogCWVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7CkBAIC04ODksNiAmIzQzOzkzOSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlbW92ZV9waHk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpOwomIzQzOwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC05MTYsNiAmIzQzOzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTk0OSw2ICYjNDM7MTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk2MCw3ICYjNDM7MTAxNSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTcwLDYgJiM0MzsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMg4oCTIGBsaWJ3eGAsIGBuZ2JlYCwgYW5kIGB0eGdiZWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgY3JpdGljYWwgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc2V0IGxvZ2ljLCB3aGljaCBpcyBnb29kLiBTcGVjaWZpY2FsbHksIGEgbmV3IGB3eF9lcnIuY2AgZmlsZSBpbXBsZW1lbnRzIFBDSWUgZXJyb3IgaGFuZGxlcnMgKGB3eF9pb19lcnJvcl9kZXRlY3RlZGAsIGV0Yy4pLCBUeCB0aW1lb3V0IGhhbmRsaW5nIChgd3hfdHhfdGltZW91dGApLCBUeCBoYW5nIGRldGVjdGlvbiAoYHd4X2hhbmRsZV90eF9oYW5nYCksIGFuZCBzb21lIHJlc2V0IHRhc2tzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5nYmVgIGFuZCBgdHhnYmVgIHRvIHVzZSB0aGVzZSBoYW5kbGVycyBieSBhZGRpbmcgdGhlIGVycm9yIGhhbmRsZXIgYW5kIHRpbWVvdXQgaGFuZGxlciBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgcmVsZXZhbnQgZHJpdmVyIHN0cnVjdHVyZXMuCgpOb3csIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBXYW5neHVuIGRyaXZlcnMsIGFuZCB0aGVzZSBhcmUgZm9yICpwaHlzaWNhbCogUENJZSBjYXJkcywgcmlnaHQ/IFRoZSBxdWVzdGlvbiBpcywgYXJlIFdhbmd4dW4gY2FyZHMgZXZlbiBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGZvciBmdXp6ZXIgdXNlLiBJIGRvbiYjMzk7dCBoYXZlIHRoZSBRRU1VIHNvdXJjZSByaWdodCBpbiBmcm9udCBvZiBtZSB0byBjaGVjaywgYW5kIGl0JiMzOTtzIG5vdCBsb29raW5nIGxpa2UgYSBzdGFuZGFyZCBkcml2ZXIgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBpbiBRRU1VIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UuCgpBaCwgdGhlIHByb21wdCByZW1pbmRzIG1lIHRoYXQgdGhlIHRhcmdldCBpcyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24uIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZ1enogdGhlc2UuCgpNb3N0IG9mIHRoZSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIEkgd29yayB3aXRoLCBsaWtlIEludGVsIChlMTAwMGUsIGlnYikgb3IgUmVhbHRlayAocnRsODEzOSksIGFyZSBnZW5lcmFsbHkgd2VsbC1zdXBwb3J0ZWQgYW5kIGVtdWxhdGVkIGluIFFFTVUuIFdhbmd4dW4/IFByb2JhYmx5IG5vdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZHJpdmVycyBhcmUgZXZlbiBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjaGVjayBvbiB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGRyaXZlciBkaXJlY3RvcnkgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkdCRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mjg6Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODU6Y29uZmlnIE5HQkVWRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIEFkYXB0ZXJzKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGEgcGF0Y2ggaW52b2x2aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIGlzIHdvcnRoIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdC4gV2FuZ3h1biBpcyBhIENoaW5lc2UgdmVuZG9yOyB0aGV5JiMzOTtyZSBub3QgYSB3aWRlbHkgZW11bGF0ZWQgaGFyZHdhcmUgcGxhdGZvcm0sIGVzcGVjaWFsbHkgbm90IHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhciBvbiB0aGlzIHBvaW50LiBJdCBzcGVjaWZpY2FsbHkgZmxhZ3MgY29kZSBwYXRocyB0aGF0IGFyZSBpbmFjY2Vzc2libGUgaW4gdmlydHVhbGl6YXRpb24sIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgYW5kIGNpdGVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgYXMgZXhhbXBsZXMuIFdhbmd4dW4sIHdpdGggdGhlaXIgbmdiZSBhbmQgdHhnYmUgZHJpdmVycywgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byByZXF1aXJlIGEgcGh5c2ljYWwgY2FyZCwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gUUVNVS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBoYXJkd2FyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLCBidXQgSSYjMzk7bSBub3Qgb3B0aW1pc3RpYy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzMwCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgZGVzY3JpYmVkOgoKKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0llIE5ldHdvcmsgQ2FyZCBEcml2ZXIqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgKmp1c3QqIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBOb3RoaW5nIGZhbmN5LCBub3RoaW5nIGVtdWxhdGVkLiBJdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlIG9uIGEgcGh5c2ljYWwgbWFjaGluZSwgbm90IGEgdmlydHVhbCBvbmUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSBpdCYjMzk7cyBub3QgdGhlIHNvcnQgb2YgdGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBlbXVsYXRlZCBpbiBzb21ldGhpbmcgbGlrZSBRRU1VLiBHaXZlbiBpdHMgbmF0dXJlIGFuZCBpdHMgdGFyZ2V0IGVudmlyb25tZW50LCB0aGVyZSYjMzk7cyBubyByZWFsIGJlbmVmaXQgaW4gZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlciAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZSwgdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzowNC4yNTExNjEzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njk2MTQ4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biAobmdiZSwgdHhnYmUpIGV0aGVybmV0IGRyaXZlcnMsIHdoaWNoIGFyZSBmb3IgcGh5c2ljYWwgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MDQuMjUxMTgwMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODc5MTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzYTM3MzJlYzE1NzE2N2VhYzk4YjliYjdjNTQ2MTcxZWYxZmFmNzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6Mzc6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTM2ODQ1YzI4OTRjMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTAsMCArMSwzMTkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4rXFxuKy8qKlxcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXFxuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0aWYgKCF3eClcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfc29mdF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXFxuK1xcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXG4rXFx0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXFxuK1xcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuK1xcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xcbitcXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG93bl9zdXNwZW5kKVxcbitcXHRcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIGZhbHNlKTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XFxuKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2ID0gd3gtXFx1MDAzZW5ldGRldjtcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0ZXJyID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XFxuK1xcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxcbitcXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXFxuK1xcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXFxuK307XFxuK0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xcbitcXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2Fybih3eCwgXFxcIlJlc2V0IGFkYXB0ZXIuXFxcXG5cXFwiKTtcXG4rXFx0aWYgKHd4LVxcdTAwM2Vkb19yZXNldClcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KHd4LVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0d3hfc29mdF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XFxuK1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcXG4rXFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0d3gtXFx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc19yZXNldF93cV8leFxcXCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMSwgd3gtXFx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuK1xcdGlmICghd3gtXFx1MDAzZXJlc2V0X3dxKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVxcdTAwM2V0eF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0aWYgKHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXFx1MDAzZW5leHRfdG9fY2xlYW4pXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXFx1MDAyNnd4LVxcdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xcbitcXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cXHUwMDNlbWFzayk7XFxuK1xcdHUzMiBpLCBqO1xcbitcXG4rXFx0aWYgKCF3eC1cXHUwMDNlbnVtX3ZmcylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdmZzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xcbitcXHRcXHRcXHR1MzIgaCwgdDtcXG4rXFxuK1xcdFxcdFxcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcdFxcdFxcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaCAhPSB0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xcbitcXHRcXHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcXG4rXFx0XFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcXG4rXFx0XFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXFxuK1xcdFxcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxcXG5cXFwiKTtcXG4rXFx0XFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdFxcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XFxuK1xcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0dTE2IHZpZCwgcGNpX2NtZDtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcXHUwMDI2dmlkKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcXHUwMDI2cGNpX2NtZCk7XFxuK1xcbitcXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXFxuK1xcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXFxuK1xcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9lcnIod3gsIFxcXCJQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4rXFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxcXG5cXFwiKTtcXG4rXFx0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XFxuK31cXG4rXFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXFxuK1xcdFxcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XFxuK1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdHd4X3dhcm4od3gsXFxuK1xcdFxcdFxcXCJEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4LFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UsIG5leHQsXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xcbitcXG4rXFx0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVxcdTAwM2VuZXRkZXYsIHR4X3JpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFxuK1xcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1dYX0VSUl9IX1xcbisjZGVmaW5lIF9XWF9FUlJfSF9cXG4rXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XFxuK1xcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggMjIwMzdmMDE1ZGVkMTkuLjk0MGQyZTU5ODc2YzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtMzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gfVxcbiBcXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuQEAgLTE5MzIsNiArMTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXFxuIFxcdGVsc2VcXG4gXFx0XFx0cmluZy1cXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcXG4gXFxuK1xcdGJpdG1hcF96ZXJvKHJpbmctXFx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcXG4gXFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXFxuIFxcdG1lbXNldChyaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcXG4gXFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXFx1MDAzZWNvdW50KTtcXG5AQCAtMjg1MSwxNiArMjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XFxuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFxcdTAwMjZ3eC1cXHUwMDNlc3RhdHM7XFxuK1xcdHU2NCBkYXRhO1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB3eC1cXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VtYWMudHlwZSBcXHUwMDNlPSB3eF9tYWNfYW1sKVxcbi1cXHRcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbitcXHRcXHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRcXHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcXG4rXFxuK1xcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXFxuK1xcdGlmICghZGF0YSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXFxuK1xcdFxcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5pbmRleCAzMTU3MmY1OWI5Y2UyYy4uZjMyZjEyNDYzODYzNTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInd4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF92Zl9saWIuaFxcXCJcXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cXHUwMDNlbmV0ZGV2LCByaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XFxuK1xcbitcXHRoZWFkID0gcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFx0dGFpbCA9IHJpbmctXFx1MDAzZW5leHRfdG9fdXNlO1xcbitcXG4rXFx0cmV0dXJuICgoaGVhZCBcXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cXHUwMDNlY291bnQpIC0gaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcXG4rXFx0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcXG4rXFx0dTMyIHR4X2RvbmUgPSByaW5nLVxcdTAwM2VzdGF0cy5wYWNrZXRzO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXFx1MDAyNlxcdTAwMjYgdHhfcGVuZGluZylcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cXG4rXFx0XFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cXG4rXFx0cmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xcbitcXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXFxuK1xcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcXG4gXFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxcbiBcXHRcXHRcXHRcXHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcXG4gXFxuK1xcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XFxuK1xcdFxcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxcbiBcXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcXHUwMDI2XFx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xcbkBAIC0zMTEyLDcgKzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XFxuIFxcbiBcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXHRlbHNlIGlmIChjaGFuZ2VkIFxcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcXG4gXFx0XFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcXG4gXFxuQEAgLTMxNjIsNyArMzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcbiBvdXQ6XFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMzM3MSw1ICszNDA4LDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xcbiBcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGNpX2NsZWFyX21hc3Rlcih3eC1cXHUwMDNlcGRldik7XFxuK1xcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xcbitcXHR3eF9wdHBfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcXG4rXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGJjNjcxNzg2OTc4ZTU0Li45ZDg1ZDM5OWUxN2Y0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC00MSw1ICs0MSw2IEBAIGludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi4zZWVhNjQ3YzQ3NDJjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XFxuIFxcdGludCB0c19kb25lO1xcbiBcXG4rXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIEhaO1xcbitcXG4gXFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcXG4gXFxuIFxcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XFxuQEAgLTg0Miw2ICs4NDUsMzAgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xcbiBcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaylcXG4rXFx0XFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX2Nsb2NrKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVxcdTAwM2VwdHBfY2xvY2spO1xcbitcXHRcXHR3eC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNnd4LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZW1vdmVkIFBIQyBvbiAlc1xcXFxuXFxcIiwgd3gtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmFtZSk7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHRuZ2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK291dDpcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggYzI3Nzg2M2JhZjY3YTIuLjU4MmVlNTY3ZTZiOWMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsMTIgKzk0LDI0IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiB3YWl0IGZvciBTRkYgbW9kdWxlIHJlYWR5ICovXFxuIFxcdG1zbGVlcCgyMDApO1xcbiBcXG4rXFx0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cXG4rXFx0ICogTW9kdWxlIGlkZW50aWZpY2F0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHVwIGV2ZW50LFxcbitcXHQgKiBzbyBpdCBpcyBzYWZlIHRvIGJhaWwgb3V0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xcbiBcXHRpZiAoZXJyID09IC1FTk9ERVYpXFxuIFxcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG5AQCAtMTA2LDYgKzExOSwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEyMyw2ICsxNDAsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xcbiBcXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMTQ0LDYgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xcbiBcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4gXFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4gXFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XFxuIFxcdGlmIChlcnIgIT0gMClcXG4gXFx0XFx0d3hfZXJyKHd4LCBcXFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC0yMjQsNiArMjQ3LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfaXJxX2Rpc2FibGUod3gpO1xcbiBcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtMjkyLDYgKzMxNiwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHR4Z2JlX3VwX2NvbXBsZXRlKHd4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwaHlsaW5rX3N0b3Aod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbitcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuK1xcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNDA4LDYgKzQ0Niw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XFxuIFxcdHd4LVxcdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xcbitcXHR3eC1cXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtNTE4LDEyICs1NTcsMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHR3eF9wdHBfc3RvcCh3eCk7XFxuIFxcdHR4Z2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXFx1MDAzZXByaXYpO1xcbiBcXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XFxuIFxcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xcbitvdXQ6XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTYwNiwxMSArNjUwLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuIH1cXG4gXFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXFx1MDAyNlxcdTAwMjYgcmVpbml0KVxcbiBcXHRcXHR0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0eGdiZV9yZXNldCh3eCk7XFxuQEAgLTY1NCw2ICs2OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzQ1LDYgKzc5MCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSA9IHR4Z2JlX2RyaXZlcl9uYW1lO1xcbiBcXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdG5ldGRldi1cXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFxcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcXG4gXFxuIFxcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xcbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXG4rXFx0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xcbitcXG4gXFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gXFxuIFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfcGh5O1xcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4rXFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFxuQEAgLTkxNiw2ICs5NjcsOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtOTQ5LDYgKzEwMDIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTYwLDcgKzEwMTUsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk3MCw2ICsxMDI2LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzowNS4xNzEwMTAyMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjc3NjI5MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYTM3MzJlYzE1NzE2N2VhYzk4YjliYjdjNTQ2MTcxZWYxZmFmNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDozNzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTM2ODQ1YzI4OTRjMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMTkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcbitcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXG5cIik7XG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1x0fVxuK1xuK1x0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cbitcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4rXHRwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG93bl9zdXNwZW5kKVxuK1x0XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIGZhbHNlKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEO1xuK31cbitcbisvKipcbisgKiB3eF9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0XG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHd4X2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXG5cIik7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuK1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4rXHQuc2xvdF9yZXNldCA9IHd4X2lvX3Nsb3RfcmVzZXQsXG4rXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuK307XG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XG4rXG4rc3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXJuKHd4LCBcIlJlc2V0IGFkYXB0ZXIuXFxuXCIpO1xuK1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xuK1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbitcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4LVx1MDAzZXJlc2V0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiJXNfcmVzZXRfd3FfJXhcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4rXHRcdFx0XHQgICAgICAgMSwgd3gtXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuK1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuK1x0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcbitcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuK1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbitcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuK1x0dTMyIGksIGo7XG4rXG4rXHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcbitcdFx0XHR1MzIgaCwgdDtcbitcbitcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXG4rXHRcdFx0aWYgKGggIT0gdClcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4rXHRcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxuK1x0XHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xuK1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbitcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbitcdFx0ICovXG4rXHRcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCIpO1xuK1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3eF93YXRjaGRvZ19mbHVzaF90eCh3eCk7XG4rXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0dTE2IHZpZCwgcGNpX2NtZDtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZpZCk7XG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4rXG4rXHQvKiBQQ0llIGxpbmsgbG9zcyBvciBtZW1vcnkgc3BhY2UgY2FuJ3QgYWNjZXNzICovXG4rXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdC8qXG4rXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcbitcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuK1x0ICovXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9lcnIod3gsIFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcblwiKTtcbitcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X3dhcm4od3gsIFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcblwiKTtcbitcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuK31cbitcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuK1x0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxuK1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbitcdGVsc2VcbitcdFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4rXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbitcbitcdHd4X3dhcm4od3gsXG4rXHRcdFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCIsXG4rXHRcdHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgsXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0dHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcbitcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbitcbitcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cdTAwM2VuZXRkZXYsIHR4X3JpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuK1xuK1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuKyAqL1xuK1xuKyNpZm5kZWYgX1dYX0VSUl9IX1xuKyNkZWZpbmUgX1dYX0VSUl9IX1xuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuK1xuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4rXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCAyMjAzN2YwMTVkZWQxOS4uOTQwZDJlNTk4NzZjN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gfVxuIFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuK1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xuIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9IFx1MDAyNnd4LVx1MDAzZXN0YXRzO1xuK1x0dTY0IGRhdGE7XG4rXHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4tXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbitcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbitcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gZGF0YTtcbitcbitcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4rXHRpZiAoIWRhdGEpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggMzE1NzJmNTliOWNlMmMuLmYzMmYxMjQ2Mzg2MzU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4gI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCJ3eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUocmluZy1cdTAwM2VuZXRkZXYsIHJpbmctXHUwMDNlcXVldWVfaW5kZXgpO1xuIH1cbiBcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xuK1xuK1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHRhaWwgPSByaW5nLVx1MDAzZW5leHRfdG9fdXNlO1xuK1xuK1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVx1MDAzZWNvdW50KSAtIGhlYWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbitcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XG4rXHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbitcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHR4X2RvbmVfb2xkID09IHR4X2RvbmUgXHUwMDI2XHUwMDI2IHR4X3BlbmRpbmcpXG4rXHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4rXHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbitcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuK1x0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xuK1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXG4gXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXG4gXHRcdFx0XHQgIHRvdGFsX3BhY2tldHMsIHRvdGFsX2J5dGVzKTtcbiBcbitcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4rXHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTIsNyArMzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjIsNyArMzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMzNzEsNSArMzQwOCwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuK1x0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4rXHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xuK1xuIE1PRFVMRV9ERVNDUklQVElPTihcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBiYzY3MTc4Njk3OGU1NC4uOWQ4NWQzOTllMTdmNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSArNDEsNiBAQCBpbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjNlZWE2NDdjNDc0MmMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwzMCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRpZiAod3gtXHUwMDNlcHRwX2Nsb2NrKSB7XG4rXHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHd4LVx1MDAzZXB0cF9jbG9jayk7XG4rXHRcdHd4LVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHRcdGRldl9pbmZvKFx1MDAyNnd4LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcInJlbW92ZWQgUEhDIG9uICVzXFxuXCIsIHd4LVx1MDAzZW5ldGRldi1cdTAwM2VuYW1lKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCByZXN0YXJ0X3F1ZXVlO1xuIFx0dTY0IHR4X2J1c3k7XG4rXHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xuK1x0V1hfVFhfREVURUNUX0hBTkcsXG4rXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuK1x0V1hfUklOR19TVEFURV9OQklUU1xuK307XG4rXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XG4gXHRcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xuIFx0XHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcbiBcdH07XG4rXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuK1x0V1hfU1RBVEVfRElTQUJMRUQsXG4rXHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiArMTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbitcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcbitcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyArMTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbitcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuK1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbisjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuK1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9zcmlvdi5oXCJcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbitcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5hZGRyKTtcbiBcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4X2NvbmZpZ3VyZSh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbit9XG4rXG4gLyoqXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggYzI3Nzg2M2JhZjY3YTIuLjU4MmVlNTY3ZTZiOWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDEyICs5NCwyNCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTU9EVUxFX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHdhaXQgZm9yIFNGRiBtb2R1bGUgcmVhZHkgKi9cbiBcdG1zbGVlcCgyMDApO1xuIFxuK1x0LyogUmUtY2hlY2sgc3RhdGUgdG8gYXZvaWQgcmFjaW5nIHdpdGggZG93bi9yZXNldCBwYXRocy5cbitcdCAqIE1vZHVsZSBpZGVudGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB1cCBldmVudCxcbitcdCAqIHNvIGl0IGlzIHNhZmUgdG8gYmFpbCBvdXQgaGVyZS5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9pZGVudGlmeV9tb2R1bGUod3gpO1xuIFx0aWYgKGVyciA9PSAtRU5PREVWKVxuIFx0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbkBAIC0xMDYsNiArMTE5LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgKzE0MCw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2sod3gpO1xuIFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiArMTYzLDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiArMjA3LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwiSGFyZHdhcmUgRXJyb3I6ICVkXFxuXCIsIGVycik7XG5AQCAtMjI0LDYgKzI0Nyw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuQEAgLTI5Miw2ICszMTYsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC00MDgsNiArNDQ2LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiArNTU3LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHR0eGdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbitvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyArNTg3LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICs2NTAsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgKzY5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03NDUsNiArNzkwLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbitcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiArODYwLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuK1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbitcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICs5MzksNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG5AQCAtOTE2LDYgKzk2Nyw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIGVycl9mcmVlX21hY190YWJsZTpcbiBcdGtmcmVlKHd4LVx1MDAzZXJzc19rZXkpO1xuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbkBAIC05NDksNiArMTAwMiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk2MCw3ICsxMDE1LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0a2ZyZWUod3gtXHUwMDNlbWFjX3RhYmxlKTtcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NzAsNiArMTAyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4gXHQucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsXG4gXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZGVmaW5lIERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLX1pFUk8obmFtZSkgXFxcbiBcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MDUuMTcxMDEyNzAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTY4NDk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyDigJMgYGxpYnd4YCwgYG5nYmVgLCBhbmQgYHR4Z2JlYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIGFuZCByZXNldCBsb2dpYywgd2hpY2ggaXMgZ29vZC4gU3BlY2lmaWNhbGx5LCBhIG5ldyBgd3hfZXJyLmNgIGZpbGUgaW1wbGVtZW50cyBQQ0llIGVycm9yIGhhbmRsZXJzIChgd3hfaW9fZXJyb3JfZGV0ZWN0ZWRgLCBldGMuKSwgVHggdGltZW91dCBoYW5kbGluZyAoYHd4X3R4X3RpbWVvdXRgKSwgVHggaGFuZyBkZXRlY3Rpb24gKGB3eF9oYW5kbGVfdHhfaGFuZ2ApLCBhbmQgc29tZSByZXNldCB0YXNrcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBuZ2JlYCBhbmQgYHR4Z2JlYCB0byB1c2UgdGhlc2UgaGFuZGxlcnMgYnkgYWRkaW5nIHRoZSBlcnJvciBoYW5kbGVyIGFuZCB0aW1lb3V0IGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIHJlbGV2YW50IGRyaXZlciBzdHJ1Y3R1cmVzLlxuXG5Ob3csIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXZSdyZSB0YWxraW5nIGFib3V0IFdhbmd4dW4gZHJpdmVycywgYW5kIHRoZXNlIGFyZSBmb3IgKnBoeXNpY2FsKiBQQ0llIGNhcmRzLCByaWdodD8gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgV2FuZ3h1biBjYXJkcyBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBmb3IgZnV6emVyIHVzZS4gSSBkb24ndCBoYXZlIHRoZSBRRU1VIHNvdXJjZSByaWdodCBpbiBmcm9udCBvZiBtZSB0byBjaGVjaywgYW5kIGl0J3Mgbm90IGxvb2tpbmcgbGlrZSBhIHN0YW5kYXJkIGRyaXZlciBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGluIFFFTVUgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZS5cblxuQWgsIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0aGF0IHRoZSB0YXJnZXQgaXMgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuIFRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZ1enogdGhlc2UuXG5cbk1vc3Qgb2YgdGhlIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgSSB3b3JrIHdpdGgsIGxpa2UgSW50ZWwgKGUxMDAwZSwgaWdiKSBvciBSZWFsdGVrIChydGw4MTM5KSwgYXJlIGdlbmVyYWxseSB3ZWxsLXN1cHBvcnRlZCBhbmQgZW11bGF0ZWQgaW4gUUVNVS4gV2FuZ3h1bj8gUHJvYmFibHkgbm90LiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBkcml2ZXJzIGFyZSBldmVuIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgaG93LiBMZXQncyBzdGFydCB3aXRoIGEgY2hlY2sgb24gdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IHRvIHNlZSBob3cgdGhleSdyZSBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzoxMi41NjA3MDAxOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDUyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5HQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjM3OjEyLjYyNjQwOTY0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzIzNDIyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIFdhbmd4dW4gR2JFIFBDSSBFeHByZXNzIEFkYXB0ZXJzKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYSBwYXRjaCBpbnZvbHZpbmcgV2FuZ3h1biBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgaXMgd29ydGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90LiBXYW5neHVuIGlzIGEgQ2hpbmVzZSB2ZW5kb3I7IHRoZXkncmUgbm90IGEgd2lkZWx5IGVtdWxhdGVkIGhhcmR3YXJlIHBsYXRmb3JtLCBlc3BlY2lhbGx5IG5vdCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXIgb24gdGhpcyBwb2ludC4gSXQgc3BlY2lmaWNhbGx5IGZsYWdzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5hY2Nlc3NpYmxlIGluIHZpcnR1YWxpemF0aW9uLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUsIGFuZCBjaXRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFzIGV4YW1wbGVzLiBXYW5neHVuLCB3aXRoIHRoZWlyIG5nYmUgYW5kIHR4Z2JlIGRyaXZlcnMsIGNsZWFybHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5IG9mIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgbmV0d29yayBjYXJkIGRyaXZlci4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byByZXF1aXJlIGEgcGh5c2ljYWwgY2FyZCwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBoYXJkd2FyZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLCBidXQgSSdtIG5vdCBvcHRpbWlzdGljLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCdzIGhpZ2hseSB1bmxpa2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6Mzc6MTcuOTU4NzU0ODkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzEzODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbmd4dW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzctXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYxLVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjYyOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4MDpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk1LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDozNzoxOC4wMTY0NzMxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMwODAxNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJZSBOZXR3b3JrIENhcmQgRHJpdmVyKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgKmp1c3QqIGEgcGh5c2ljYWwgUENJZSBuZXR3b3JrIGNhcmQgZHJpdmVyLiBOb3RoaW5nIGZhbmN5LCBub3RoaW5nIGVtdWxhdGVkLiBJdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbWVhbnMgaXQncyBkZXNpZ25lZCB0byBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBoYXJkd2FyZSBvbiBhIHBoeXNpY2FsIG1hY2hpbmUsIG5vdCBhIHZpcnR1YWwgb25lLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgaXQncyBub3QgdGhlIHNvcnQgb2YgdGhpbmcgSSdkIGV4cGVjdCB0byBmaW5kIGVtdWxhdGVkIGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIEdpdmVuIGl0cyBuYXR1cmUgYW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQsIHRoZXJlJ3Mgbm8gcmVhbCBiZW5lZml0IGluIGZ1enppbmcgdGhpcy4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyICpub3QqIGVtdWxhdGVkIGluIFFFTVUuIFRoYXQncyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTczMCwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjM3OjIxLjk0NzI3NzE2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gKG5nYmUsIHR4Z2JlKSBldGhlcm5ldCBkcml2ZXJzLCB3aGljaCBhcmUgZm9yIHBoeXNpY2FsIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgY2FyZHMuIFRoZXNlIGRldmljZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIChuZ2JlLCB0eGdiZSkgZXRoZXJuZXQgZHJpdmVycywgd2hpY2ggYXJlIGZvciBwaHlzaWNhbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc5dgp[1] Phase: Running StartedAt: 2026-07-25 14:37:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5dgp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 14:37:34 +0000 UTC FinishedAt: 2026-07-25 14:38:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}