Name: series-workflowb26p7 Phase: Failed StartedAt: 2026-07-25 20:05:25 +0000 UTC FinishedAt: 2026-07-25 20:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26p7[0] Phase: Succeeded StartedAt: 2026-07-25 20:05:25 +0000 UTC FinishedAt: 2026-07-25 20:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26p7[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 20:05:25 +0000 UTC FinishedAt: 2026-07-25 20:38:49 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuaW5kZXggNjhiNzRlYjJjM2EyOWEuLjk4NDZkMjliNGZlM2MwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuQEAgLTUsMTIgJiM0Mzs1LDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2JuZ2UuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfZGV2bGluay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Ym5nZV9od3JtLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibmdlX2h3cm1fbGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibmdlX2xpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtibmdlX3Jlc2MuaFwmIzM0O1xuIFxuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbkBAIC00MDYsMTIgJiM0Mzs0MDgsMzQgQEAgc3RhdGljIHZvaWQgYm5nZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIHN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuJiM0MztcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0gYmQgPyBiZC1cdTAwM2VuZXRkZXYgOiBOVUxMO1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0bmV0aWZfY2xvc2UoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XG4mIzQzO1x0XHRwY2llX2ZscihwZGV2KTtcbiYjNDM7XHRcdGdvdG8gc2h1dGRvd25fZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1x0Ym5nZV9mcmVlX2lycXMoYmQpO1xuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIFxuIFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7XG4gXHRcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgMCk7XG4gXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbiBcdH1cbiYjNDM7XG4mIzQzO3NodXRkb3duX2V4aXQ6XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmNcbmluZGV4IDZmN2VmNTA2ZDRlMThjLi4yMjBiZGNjZWQwZGI5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2JuZ2UuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtibmdlX2h3cm0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfaHdybV9saWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfZXRodG9vbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Ym5nZV9ybWVtLmhcJiMzNDtcbkBAIC0yMTQ0LDE2ICYjNDM7MjE0NSwxNiBAQCBzdGF0aWMgaW50IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTE2IHZuaWNfaWQsIHUxNiBpZHgsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcbiYjNDM7c3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuIFx0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljID0gXHUwMDI2Ym4tXHUwMDNldm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuIFx0aW50IG1jX2NvdW50ID0gMCwgb2ZmID0gMDtcbiBcdGJvb2wgdXBkYXRlID0gZmFsc2U7XG4gXHR1OCAqaGFkZHI7XG4gXG4tXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcbiBcdFx0aWYgKG1jX2NvdW50IFx1MDAzZT0gQk5HRV9NQVhfTUNfQUREUlMpIHtcbiBcdFx0XHQqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuIFx0XHRcdHZuaWMtXHUwMDNlbWNfbGlzdF9jb3VudCA9IDA7XG5AQCAtMjE3NywxNyAmIzQzOzIxNzgsMTcgQEAgc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrKVxuIFx0cmV0dXJuIHVwZGF0ZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibilcbiYjNDM7c3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBvZmYgPSAwO1xuIFxuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuJiM0MztcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQgLSAxKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcbiBcdFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKGhhLVx1MDAzZWFkZHIsIHZuaWMtXHUwMDNldWNfbGlzdCAmIzQzOyBvZmYpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIyMDEsMTggJiM0MzsyMjAyLDE0IEBAIHN0YXRpYyBib29sIGJuZ2VfcHJvbWlzY19vayhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiYjNDM7c3RhdGljIGludCBibmdlX2NmZ19yeF9tb2RlKHN0cnVjdCBibmdlX25ldCAqYm4sIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBpLCBvZmYgPSAwLCByYztcbi1cdGJvb2wgdWNfdXBkYXRlO1xuLVxuLVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4tXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibik7XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0aWYgKCF1Y191cGRhdGUpXG4gXHRcdGdvdG8gc2tpcF91YztcbkBAIC0yMjI2LDIyICYjNDM7MjIyMywyOCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXG4gXHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCA9IDE7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbi1cdGlmIChuZXRkZXZfdWNfY291bnQoZGV2KSBcdTAwM2UgKEJOR0VfTUFYX1VDX0FERFJTIC0gMSkpIHtcbiYjNDM7XHRpZiAoIXNuYXBzaG90KVxuJiM0MztcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4mIzQzO1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpIFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xuIFx0XHR2bmljLVx1MDAzZXJ4X21hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTO1xuIFx0fSBlbHNlIHtcbi1cdFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikge1xuJiM0MztcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcbiBcdFx0XHRtZW1jcHkodm5pYy1cdTAwM2V1Y19saXN0ICYjNDM7IG9mZiwgaGEtXHUwMDNlYWRkciwgRVRIX0FMRU4pO1xuIFx0XHRcdG9mZiAmIzQzOz0gRVRIX0FMRU47XG4gXHRcdFx0dm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQmIzQzOyYjNDM7O1xuIFx0XHR9XG4gXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuJiM0MztcdGlmICghc25hcHNob3QpXG4mIzQzO1x0XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0Zm9yIChpID0gMSwgb2ZmID0gMDsgaSBcdTAwM2Mgdm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQ7IGkmIzQzOyYjNDM7LCBvZmYgJiM0Mzs9IEVUSF9BTEVOKSB7XG4gXHRcdHJjID0gYm5nZV9od3JtX3NldF92bmljX2ZpbHRlcihibiwgMCwgaSwgdm5pYy1cdTAwM2V1Y19saXN0ICYjNDM7IG9mZik7XG4gXHRcdGlmIChyYykge1xuLVx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdGlmIChyYyA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7RlcgYnVzeSB3aGlsZSBzZXR0aW5nIHZuaWMgZmlsdGVyLCB3aWxsIHJldHJ5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgcmMpO1xuIFx0XHRcdHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gaTtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbkBAIC0yMjY3LDYgJiM0MzsyMjcwLDQ4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdHJldHVybiByYztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYm5nZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljO1xuJiM0MztcdGJvb2wgbWNfdXBkYXRlID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCB1Y191cGRhdGU7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoQk5HRV9TVEFURV9PUEVOLCBcdTAwMjZibi1cdTAwM2ViZC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4mIzQzO1x0bWFzayA9IHZuaWMtXHUwMDNlcnhfbWFzaztcbiYjNDM7XHRtYXNrIFx1MDAyNj0gfihDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVMgfFxuJiM0MztcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfTUNBU1QgfFxuJiM0MztcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcbiYjNDM7XHRcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4mIzQzO1x0XHRtYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUztcbiYjNDM7XG4mIzQzO1x0dWNfdXBkYXRlID0gYm5nZV91Y19saXN0X3VwZGF0ZWQoYm4sIHVjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JST0FEQ0FTVClcbiYjNDM7XHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuJiM0MztcdFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuJiM0MztcdFx0dm5pYy1cdTAwM2VtY19saXN0X2NvdW50ID0gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xuJiM0MztcdFx0bWNfdXBkYXRlID0gYm5nZV9tY19saXN0X3VwZGF0ZWQoYm4sIFx1MDAyNm1hc2ssIG1jKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYXNrICE9IHZuaWMtXHUwMDNlcnhfbWFzayB8fCB1Y191cGRhdGUgfHwgbWNfdXBkYXRlKSB7XG4mIzQzO1x0XHR2bmljLVx1MDAzZXJ4X21hc2sgPSBtYXNrO1xuJiM0MztcdFx0cmV0dXJuIGJuZ2VfY2ZnX3J4X21vZGUoYm4sIHVjLCB1Y191cGRhdGUsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYm5nZV9kaXNhYmxlX2ludChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIHtcbiBcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBibi1cdTAwM2ViZDtcbkBAIC0yNjk1LDEzICYjNDM7Mjc0MCwxNyBAQCBzdGF0aWMgaW50IGJuZ2VfaW5pdF9jaGlwKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXHR9IGVsc2UgaWYgKGJuLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xuIFx0XHR1MzIgbWFzayA9IDA7XG4gXG4tXHRcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrKTtcbiYjNDM7XHRcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrLCBcdTAwMjZibi1cdTAwM2VuZXRkZXYtXHUwMDNlbWMpO1xuIFx0XHR2bmljLVx1MDAzZXJ4X21hc2sgfD0gbWFzaztcbiBcdH1cbiBcbi1cdHJjID0gYm5nZV9jZmdfZGVmX3ZuaWMoYm4pO1xuLVx0aWYgKHJjKVxuJiM0MztcdHJjID0gYm5nZV9jZmdfcnhfbW9kZShibiwgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZXVjLCB0cnVlLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHJjID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdG5ldGlmX3J4X21vZGVfc2NoZWR1bGVfcmV0cnkoYm4tXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKHJjKSB7XG4gXHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0OlxuQEAgLTI4MTMsNiAmIzQzOzI4NjIsMjQgQEAgc3RhdGljIHZvaWQgYm5nZV90eF9lbmFibGUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdFx0bmV0aWZfY2Fycmllcl9vbihibi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBibmdlX2h3cm1faWZfY2hhbmdlKHN0cnVjdCBibmdlX2RldiAqYmQsIGJvb2wgdXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmICghKGJkLVx1MDAzZWZ3X2NhcCBcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRpZiAodXApXG4mIzQzO1x0XHRyZXEtXHUwMDNlZmxhZ3MgPSBjcHVfdG9fbGUzMihGVU5DX0RSVl9JRl9DSEFOR0VfUkVRX0ZMQUdTX1VQKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJuZ2VfaHdybV9yZXFfc2VuZChiZCwgcmVxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4ge1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuQEAgLTI4MjAsMTYgJiM0MzsyODg3LDIyIEBAIHN0YXRpYyBpbnQgYm5nZV9vcGVuX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGJuLVx1MDAzZW5ldGRldik7XG4gXG4mIzQzO1x0cmMgPSBibmdlX2h3cm1faWZfY2hhbmdlKGJkLCB0cnVlKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcJiMzNDtibmdlX2h3cm1faWZfY2hhbmdlIGVycjogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSBibmdlX3Jlc2VydmVfcmluZ3MoYmQpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcJiMzNDtibmdlX3Jlc2VydmVfcmluZ3MgZXJyOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRnb3RvIGVycl9pZl9jaGFuZ2U7XG4gXHR9XG4gXG4gXHRyYyA9IGJuZ2VfYWxsb2NfY29yZShibik7XG4gXHRpZiAocmMpIHtcbiBcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwmIzM0O2JuZ2VfYWxsb2NfY29yZSBlcnI6ICVkXFxuXCYjMzQ7LCByYyk7XG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyX2lmX2NoYW5nZTtcbiBcdH1cbiBcbiBcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcbkBAIC0yODc2LDYgJiM0MzsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIGVycl9kZWxfbmFwaTpcbiBcdGJuZ2VfZGVsX25hcGkoYm4pO1xuIFx0Ym5nZV9mcmVlX2NvcmUoYm4pO1xuJiM0MztlcnJfaWZfY2hhbmdlOlxuJiM0MztcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG5AQCAtMzEwNiw2ICYjNDM7MzE4MSw3IEBAIHN0YXRpYyBpbnQgYm5nZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0Ym5nZV9jbG9zZV9jb3JlKGJuKTtcbiBcdGJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLVx1MDAzZWJkKTtcbiYjNDM7XHRibmdlX2h3cm1faWZfY2hhbmdlKGJuLVx1MDAzZWJkLCBmYWxzZSk7XG4gXHRibi1cdTAwM2VzcF9ldmVudCA9IDA7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMTk1LDYgJiM0MzszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBibmdlX2Nsb3NlLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYm5nZV9zdGFydF94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuJiM0MztcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gYm5nZV9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaFxuaW5kZXggZDE3NzkxOWMyZTExNzAuLmExYTkzOTQ5NmViZDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcbkBAIC0yNzUsNiAmIzQzOzI3NSw4IEBAIGVudW0gYm5nZV9uZXRfZmxhZyB7XG4gXHRCTkdFX0ZMQUdfUE9SVF9TVEFUU19FWFRcdD0gQklUKDEpLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVx0MTBcbiYjNDM7XG4gZW51bSBibmdlX3NwX2V2ZW50IHtcbiBcdEJOR0VfTElOS19DSE5HX1NQX0VWRU5ULFxuIFx0Qk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jCmluZGV4IDY4Yjc0ZWIyYzNhMjlhLi45ODQ2ZDI5YjRmZTNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Ym5nZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Ym5nZV9kZXZsaW5rLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibmdlX2h3cm0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfaHdybV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfbGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JuZ2VfcmVzYy5oJiMzNDsKIAogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX1NVTU1BUlkpOwpAQCAtNDA2LDEyICYjNDM7NDA4LDM0IEBAIHN0YXRpYyB2b2lkIGJuZ2VfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogc3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKJiM0MzsJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsKJiM0MzsJZGV2ID0gYmQgPyBiZC0mZ3Q7bmV0ZGV2IDogTlVMTDsKJiM0MzsJaWYgKCFkZXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwluZXRkZXZfbG9jayhkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJbmV0aWZfY2xvc2UoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7CiYjNDM7CQlwY2llX2ZscihwZGV2KTsKJiM0MzsJCWdvdG8gc2h1dGRvd25fZXhpdDsKJiM0MzsJfQomIzQzOwlibmdlX2ZyZWVfaXJxcyhiZCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7CiAJCXBjaV93YWtlX2Zyb21fZDMocGRldiwgMCk7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAl9CiYjNDM7CiYjNDM7c2h1dGRvd25fZXhpdDoKJiM0MzsJbmV0ZGV2X3VubG9jayhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMKaW5kZXggNmY3ZWY1MDZkNGUxOGMuLjIyMGJkY2NlZDBkYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2JuZ2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtibmdlX2h3cm0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfaHdybV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfZXRodG9vbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Ym5nZV9ybWVtLmgmIzM0OwpAQCAtMjE0NCwxNiAmIzQzOzIxNDUsMTYgQEAgc3RhdGljIGludCBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKHN0cnVjdCBibmdlX25ldCAqYm4sIHUxNiB2bmljX2lkLCB1MTYgaWR4LAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrKQomIzQzO3N0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaywKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYykKIHsKIAlzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSAmYW1wO2JuLSZndDt2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiAJaW50IG1jX2NvdW50ID0gMCwgb2ZmID0gMDsKIAlib29sIHVwZGF0ZSA9IGZhbHNlOwogCXU4ICpoYWRkcjsKIAotCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHsKIAkJaWYgKG1jX2NvdW50ICZndDs9IEJOR0VfTUFYX01DX0FERFJTKSB7CiAJCQkqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUOwogCQkJdm5pYy0mZ3Q7bWNfbGlzdF9jb3VudCA9IDA7CkBAIC0yMTc3LDE3ICYjNDM7MjE3OCwxNyBAQCBzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2spCiAJcmV0dXJuIHVwZGF0ZTsKIH0KIAotc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibikKJiM0MztzdGF0aWMgYm9vbCBibmdlX3VjX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKQogewogCXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9ICZhbXA7Ym4tJmd0O3ZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLSZndDtuZXRkZXY7CiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAlpbnQgb2ZmID0gMDsKIAotCWlmIChuZXRkZXZfdWNfY291bnQoZGV2KSAhPSAodm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50IC0gMSkpCiYjNDM7CWlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50IC0gMSkpCiAJCXJldHVybiB0cnVlOwogCi0JbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgewomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykgewogCQlpZiAoIWV0aGVyX2FkZHJfZXF1YWwoaGEtJmd0O2FkZHIsIHZuaWMtJmd0O3VjX2xpc3QgJiM0Mzsgb2ZmKSkKIAkJCXJldHVybiB0cnVlOwogCkBAIC0yMjAxLDE4ICYjNDM7MjIwMiwxNCBAQCBzdGF0aWMgYm9vbCBibmdlX3Byb21pc2Nfb2soc3RydWN0IGJuZ2VfbmV0ICpibikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKQomIzQzO3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiYjNDM7CQkJICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KQogewogCXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9ICZhbXA7Ym4tJmd0O3ZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLSZndDtuZXRkZXY7CiAJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLSZndDtiZDsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwogCWludCBpLCBvZmYgPSAwLCByYzsKLQlib29sIHVjX3VwZGF0ZTsKLQotCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwotCXVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuKTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogCiAJaWYgKCF1Y191cGRhdGUpCiAJCWdvdG8gc2tpcF91YzsKQEAgLTIyMjYsMjIgJiM0MzsyMjIzLDI4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibikKIAogCXZuaWMtJmd0O3VjX2ZpbHRlcl9jb3VudCA9IDE7CiAKLQluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKLQlpZiAobmV0ZGV2X3VjX2NvdW50KGRldikgJmd0OyAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkgewomIzQzOwlpZiAoIXNuYXBzaG90KQomIzQzOwkJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CWlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAmZ3Q7IChCTkdFX01BWF9VQ19BRERSUyAtIDEpKSB7CiAJCXZuaWMtJmd0O3J4X21hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTOwogCX0gZWxzZSB7Ci0JCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7CiAJCQltZW1jcHkodm5pYy0mZ3Q7dWNfbGlzdCAmIzQzOyBvZmYsIGhhLSZndDthZGRyLCBFVEhfQUxFTik7CiAJCQlvZmYgJiM0Mzs9IEVUSF9BTEVOOwogCQkJdm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50JiM0MzsmIzQzOzsKIAkJfQogCX0KLQluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwlpZiAoIXNuYXBzaG90KQomIzQzOwkJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKIAogCWZvciAoaSA9IDEsIG9mZiA9IDA7IGkgJmx0OyB2bmljLSZndDt1Y19maWx0ZXJfY291bnQ7IGkmIzQzOyYjNDM7LCBvZmYgJiM0Mzs9IEVUSF9BTEVOKSB7CiAJCXJjID0gYm5nZV9od3JtX3NldF92bmljX2ZpbHRlcihibiwgMCwgaSwgdm5pYy0mZ3Q7dWNfbGlzdCAmIzQzOyBvZmYpOwogCQlpZiAocmMpIHsKLQkJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0hXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQkJaWYgKHJjID09IC1FQUdBSU4pCiYjNDM7CQkJCW5ldGRldl93YXJuKGRldiwgJiMzNDtGVyBidXN5IHdoaWxlIHNldHRpbmcgdm5pYyBmaWx0ZXIsIHdpbGwgcmV0cnlcbiYjMzQ7KTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0hXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgcmMpOwogCQkJdm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50ID0gaTsKIAkJCXJldHVybiByYzsKIAkJfQpAQCAtMjI2Nyw2ICYjNDM7MjI3MCw0OCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7c3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKQomIzQzO3sKJiM0MzsJc3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYzsKJiM0MzsJYm9vbCBtY191cGRhdGUgPSBmYWxzZTsKJiM0MzsJYm9vbCB1Y191cGRhdGU7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KEJOR0VfU1RBVEVfT1BFTiwgJmFtcDtibi0mZ3Q7YmQtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2bmljID0gJmFtcDtibi0mZ3Q7dm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTsKJiM0MzsJbWFzayA9IHZuaWMtJmd0O3J4X21hc2s7CiYjNDM7CW1hc2sgJmFtcDs9IH4oQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTIHwKJiM0MzsJCSAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHwKJiM0MzsJCSAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0FMTF9NQ0FTVCB8CiYjNDM7CQkgIENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVCk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKQomIzQzOwkJbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7CiYjNDM7CiYjNDM7CXVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuLCB1Yyk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9CUk9BRENBU1QpCiYjNDM7CQltYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVDsKJiM0MzsJaWYgKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSB7CiYjNDM7CQltYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19BTExfTUNBU1Q7CiYjNDM7CQl2bmljLSZndDttY19saXN0X2NvdW50ID0gMDsKJiM0MzsJfSBlbHNlIGlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9NVUxUSUNBU1QpIHsKJiM0MzsJCW1jX3VwZGF0ZSA9IGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCAmYW1wO21hc2ssIG1jKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobWFzayAhPSB2bmljLSZndDtyeF9tYXNrIHx8IHVjX3VwZGF0ZSB8fCBtY191cGRhdGUpIHsKJiM0MzsJCXZuaWMtJmd0O3J4X21hc2sgPSBtYXNrOwomIzQzOwkJcmV0dXJuIGJuZ2VfY2ZnX3J4X21vZGUoYm4sIHVjLCB1Y191cGRhdGUsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJuZ2VfZGlzYWJsZV9pbnQoc3RydWN0IGJuZ2VfbmV0ICpibikKIHsKIAlzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gYm4tJmd0O2JkOwpAQCAtMjY5NSwxMyAmIzQzOzI3NDAsMTcgQEAgc3RhdGljIGludCBibmdlX2luaXRfY2hpcChzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogCX0gZWxzZSBpZiAoYm4tJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX01VTFRJQ0FTVCkgewogCQl1MzIgbWFzayA9IDA7CiAKLQkJYm5nZV9tY19saXN0X3VwZGF0ZWQoYm4sICZhbXA7bWFzayk7CiYjNDM7CQlibmdlX21jX2xpc3RfdXBkYXRlZChibiwgJmFtcDttYXNrLCAmYW1wO2JuLSZndDtuZXRkZXYtJmd0O21jKTsKIAkJdm5pYy0mZ3Q7cnhfbWFzayB8PSBtYXNrOwogCX0KIAotCXJjID0gYm5nZV9jZmdfZGVmX3ZuaWMoYm4pOwotCWlmIChyYykKJiM0MzsJcmMgPSBibmdlX2NmZ19yeF9tb2RlKGJuLCAmYW1wO2JuLSZndDtuZXRkZXYtJmd0O3VjLCB0cnVlLCBmYWxzZSk7CiYjNDM7CWlmIChyYyA9PSAtRUFHQUlOKSB7CiYjNDM7CQluZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLSZndDtuZXRkZXYpOwomIzQzOwkJcmMgPSAwOwomIzQzOwl9IGVsc2UgaWYgKHJjKSB7CiAJCWdvdG8gZXJyX291dDsKJiM0MzsJfQogCXJldHVybiAwOwogCiBlcnJfb3V0OgpAQCAtMjgxMyw2ICYjNDM7Mjg2MiwyNCBAQCBzdGF0aWMgdm9pZCBibmdlX3R4X2VuYWJsZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogCQluZXRpZl9jYXJyaWVyX29uKGJuLSZndDtuZXRkZXYpOwogfQogCiYjNDM7c3RhdGljIGludCBibmdlX2h3cm1faWZfY2hhbmdlKHN0cnVjdCBibmdlX2RldiAqYmQsIGJvb2wgdXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIShiZC0mZ3Q7ZndfY2FwICZhbXA7IEJOR0VfRldfQ0FQX0lGX0NIQU5HRSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmMgPSBibmdlX2h3cm1fcmVxX2luaXQoYmQsIHJlcSwgSFdSTV9GVU5DX0RSVl9JRl9DSEFOR0UpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICh1cCkKJiM0MzsJCXJlcS0mZ3Q7ZmxhZ3MgPSBjcHVfdG9fbGUzMihGVU5DX0RSVl9JRl9DSEFOR0VfUkVRX0ZMQUdTX1VQKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJuZ2VfaHdybV9yZXFfc2VuZChiZCwgcmVxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pCiB7CiAJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLSZndDtiZDsKQEAgLTI4MjAsMTYgJiM0MzsyODg3LDIyIEBAIHN0YXRpYyBpbnQgYm5nZV9vcGVuX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibikKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGJuLSZndDtuZXRkZXYpOwogCiYjNDM7CXJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbmV0ZGV2X2Vycihibi0mZ3Q7bmV0ZGV2LCAmIzM0O2JuZ2VfaHdybV9pZl9jaGFuZ2UgZXJyOiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJjID0gYm5nZV9yZXNlcnZlX3JpbmdzKGJkKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2Vycihibi0mZ3Q7bmV0ZGV2LCAmIzM0O2JuZ2VfcmVzZXJ2ZV9yaW5ncyBlcnI6ICVkXG4mIzM0OywgcmMpOwotCQlyZXR1cm4gcmM7CiYjNDM7CQlnb3RvIGVycl9pZl9jaGFuZ2U7CiAJfQogCiAJcmMgPSBibmdlX2FsbG9jX2NvcmUoYm4pOwogCWlmIChyYykgewogCQluZXRkZXZfZXJyKGJuLSZndDtuZXRkZXYsICYjMzQ7Ym5nZV9hbGxvY19jb3JlIGVycjogJWRcbiYjMzQ7LCByYyk7Ci0JCXJldHVybiByYzsKJiM0MzsJCWdvdG8gZXJyX2lmX2NoYW5nZTsKIAl9CiAKIAlibmdlX2luaXRfbmFwaShibik7CkBAIC0yODc2LDYgJiM0MzsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogZXJyX2RlbF9uYXBpOgogCWJuZ2VfZGVsX25hcGkoYm4pOwogCWJuZ2VfZnJlZV9jb3JlKGJuKTsKJiM0MztlcnJfaWZfY2hhbmdlOgomIzQzOwlibmdlX2h3cm1faWZfY2hhbmdlKGJkLCBmYWxzZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMTA2LDYgJiM0MzszMTgxLDcgQEAgc3RhdGljIGludCBibmdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlibmdlX2Nsb3NlX2NvcmUoYm4pOwogCWJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLSZndDtiZCk7CiYjNDM7CWJuZ2VfaHdybV9pZl9jaGFuZ2UoYm4tJmd0O2JkLCBmYWxzZSk7CiAJYm4tJmd0O3NwX2V2ZW50ID0gMDsKIAogCXJldHVybiAwOwpAQCAtMzE5NSw2ICYjNDM7MzI3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm5nZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcAkJPSBibmdlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBibmdlX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHM2NAk9IGJuZ2VfZ2V0X3N0YXRzNjQsCiYjNDM7CS5uZG9fc2V0X3J4X21vZGVfYXN5bmMJPSBibmdlX3NldF9yeF9tb2RlLAogCS5uZG9fZmVhdHVyZXNfY2hlY2sJPSBibmdlX2ZlYXR1cmVzX2NoZWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oCmluZGV4IGQxNzc5MTljMmUxMTcwLi5hMWE5Mzk0OTZlYmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaApAQCAtMjc1LDYgJiM0MzsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcgewogCUJOR0VfRkxBR19QT1JUX1NUQVRTX0VYVAk9IEJJVCgxKSwKIH07CiAKJiM0MzsjZGVmaW5lIEJOR0VfRldfSUZfUkVUUlkJMTAKJiM0MzsKIGVudW0gYm5nZV9zcF9ldmVudCB7CiAJQk5HRV9MSU5LX0NITkdfU1BfRVZFTlQsCiAJQk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYGJuZ2VgIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgdGFyZ2V0aW5nIHRoZSBgYm5nZWAgZHJpdmVyLiBIbW0sIGBibmdlYC4uLiBpcyB0aGF0IEJyb2FkY29tIE5ldFh0cmVtZS1FIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSwgdGhlIG5hbWUgc291bmRzIG1vcmUgbGlrZSBCcm9hZGNvbSBOZXh0IEdlbmVyYXRpb24gRXRoZXJuZXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYSAqcmVhbCogZHJpdmVyIGFuZCBub3Qgc29tZSBpbnRlcm5hbCBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGxhdGVyLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgYm5nZV9jb3JlLmNgIGFuZCBgYm5nZV9uZXRkZXYuY2AsIHNvIGl0IHNlZW1zIHRvIGJlIGltcGFjdGluZyBib3RoIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHR5cGljYWwgZm9yIGEgTklDIGRyaXZlci4KCkluIGBibmdlX2NvcmUuY2AsIHRoZSBjaGFuZ2VzIHRvIGBibmdlX3NodXRkb3duYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYmVpbmcgKnZlcnkqIGNhcmVmdWwgd2l0aCBsb2NraW5nIG5vdywgdGFraW5nIGBydG5sX2xvY2soKWAgYW5kIGBuZXRkZXZfbG9jaygpYCBiZWZvcmUgcHJvY2VlZGluZy4gU2VlbXMgbG9naWNhbCBmb3IgYSBzaHV0ZG93biBwcm9jZWR1cmUuIEl0IGNsb3NlcyB0aGUgZGV2aWNlIGlmIGl0JiMzOTtzIHJ1bm5pbmcsIHVucmVnaXN0ZXJzIHRoZSBmdW5jdGlvbiBkcml2ZXIsIGlzc3VlcyBhIFBDSWUgRkxSICh0aGF0JiMzOTtzIGdvb2QsIGEgY2xlYW4gcmVzZXQgaXMgb2Z0ZW4gaGVscGZ1bCksIGFuZCBmaW5hbGx5IGZyZWVzIHVwIHRoZSBJUlFzLiBUaGF0JiMzOTtzIGEgcHJldHR5IHRob3JvdWdoIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggc29tZSB0cmlja3kgaGFyZHdhcmUgaXNzdWVzIHByZXZpb3VzbHksIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgoKVGhlbiBpbiBgYm5nZV9uZXRkZXYuY2AsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIG11bHRpY2FzdCBhbmQgdW5pY2FzdCBsaXN0IHVwZGF0ZSBmdW5jdGlvbnM6IGBibmdlX21jX2xpc3RfdXBkYXRlZGAgYW5kIGBibmdlX3VjX2xpc3RfdXBkYXRlZGAuIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgdXNlIG9mIGEgYGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpgIGluc3RlYWQgb2YgZmV0Y2hpbmcgdGhlIGFkZHJlc3MgbGlzdCBmcm9tIGBibi0mZ3Q7bmV0ZGV2YC4gVGhhdCYjMzk7cyBhIGdvb2QgY2hhbmdlLCBhcyBpdCBkZWNvdXBsZXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIG5ldGRldiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1vcmUgcm9idXN0IGNvZGUsIGluIHRoZSBldmVudCBvZiBhbiBpbnRlcnJ1cHRpb24gdGhhdCB3b3VsZCBjYXVzZSBhIHJlLWV2YWx1YXRpb24gb2YgdGhlIGRhdGEuCgpBbHNvLCBgYm5nZV9jZmdfcnhfbW9kZWAgaXMgcmVwbGFjaW5nIGBibmdlX2NmZ19kZWZfdm5pY2AsIGFuZCBgYm5nZV9zZXRfcnhfbW9kZWAgaXMgYWRkZWQsIG5vdyBiZWluZyBob29rZWQgdXAgdG8gYG5kb19zZXRfcnhfbW9kZV9hc3luY2AuIE5pY2UsIHRoYXQmIzM5O3MgbW92aW5nIHRvIGEgbW9yZSBtb2Rlcm4gYXBwcm9hY2guIEltcGxlbWVudGluZyBhIG1vcmUgb3B0aW1pemVkIGFuZCBlZmZpY2llbnQgc2V0dXAgc2hvdWxkIGFsbG93IGZvciBwZXJmb3JtYW5jZSBpbmNyZWFzZXMuCgpGaW5hbGx5LCBgYm5nZV9od3JtX2lmX2NoYW5nZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCBpdCBzZWVtcyB0byBiZSBjYWxsZWQgaW4gYGJuZ2Vfb3Blbl9jb3JlYCBhbmQgYGJuZ2VfY2xvc2VgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaGFyZHdhcmUgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBpbnRlcmZhY2UgY2hhbmdlcyBiYXNlZCBvbiB0aGUgZGV2aWNlJiMzOTtzIG9wZW4vY2xvc2Ugc3RhdGUuIEl0JiMzOTtzIGxpa2VseSBoYW5kbGluZyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlY29uZmlndXJhdGlvbiBvciBtYXliZSBldmVuIHBvd2VyIG1hbmFnZW1lbnQtcmVsYXRlZCBzdHVmZi4KClJpZ2h0IG5vdywgdGhvdWdoLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBibmdlYCBpcyBldmVuIGEgdmFsaWQgZHJpdmVyIGluIHRoZSBrZXJuZWwgSSYjMzk7bSB3b3JraW5nIHdpdGguIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrLiBJZiB0aGlzIGlzIHNvbWUgaW4taG91c2UgZHJpdmVyLCBvciBhIGN1c3RvbSBidWlsZCwgdGhlbiB0aGUgZW50aXJlIGFwcHJvYWNoIHdpbGwgYmUgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JuZ2Vfc2h1dGRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz0zODI9c3RhdGljIHZvaWQgYm5nZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0MDk6c3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDEwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ0MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDUtXHQucmVtb3ZlXHRcdD0gYm5nZV9yZW1vdmVfb25lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NDY6XHQuc2h1dGRvd25cdD0gYm5nZV9zaHV0ZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQ3LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTI5NTc9c3RhdGljIGludCBibmdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMjk2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzoyOTY5OnN0YXRpYyBpbnQgYm5nZV9zaHV0ZG93bl9uaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0yOTcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM9MzE1Mz1zdGF0aWMgdm9pZCBibmdlX2Nsb3NlX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzE2MS1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmJuLVx1MDAzZXRpbWVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMTYyOlx0Ym5nZV9zaHV0ZG93bl9uaWMoYm4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTMxNjMtXHRibmdlX2Rpc2FibGVfbmFwaShibik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBibmdlYCBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgYGJuZ2VgIGxpc3RlZCBhcyBhIGRyaXZlciB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiBhIG1pbnV0ZS4uLmlzIHRoaXMgYSBsZWdpdGltYXRlLCByZWFsLXdvcmxkIGRyaXZlciwgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgYmVlbiBjcmVhdGVkIGZvciBzeXprYWxsZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCcm9hZGNvbSBuZXR3b3JrIGFkYXB0ZXJzLCBteSBpbnN0aW5jdCBzYXlzIHRoYXQgTmV0WHRyZW1lLUUgY2FyZHMgdHlwaWNhbGx5IHVzZSB0aGUgYGJueHRgIGRyaXZlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBgYm5nZWAgcmVwcmVzZW50cyBhIHRydWUgaGFyZHdhcmUgZHJpdmVyIG9yIG5vdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibmdlX2RyaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZS5oOjIwOmV4dGVybiBjaGFyIGJuZ2VfZHJpdmVyX25hbWVbXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZS5oLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg9TU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjIwOmNoYXIgYm5nZV9kcml2ZXJfbmFtZVtdID0gRFJWX05BTUU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg4PXN0YXRpYyBpbnQgYm5nZV9wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzoyMDU6XHRyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgYm5nZV9kcml2ZXJfbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTIwNi1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9NDA5PXN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MjpcdC5uYW1lXHRcdD0gYm5nZV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQzLVx0LmlkX3RhYmxlXHQ9IGJuZ2VfcGNpX3RibCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ0OT1zdGF0aWMgaW50IF9faW5pdCBibmdlX2luaXRfbW9kdWxlKHZvaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ1MTpcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmJuZ2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDUyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ1NT1zdGF0aWMgdm9pZCBfX2V4aXQgYm5nZV9leGl0X21vZHVsZSh2b2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NTc6XHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2Ym5nZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIGBibmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgYm5nZWAgS2NvbmZpZyBlbnRyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHR5cGljYWwgdGhpbmdzOiBJcyBpdCBhIHRyaXN0YXRlPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBhdmFpbGFiaWxpdHksIG9yIHRoYXQgKnNob3VsZCogYmUgaW1wYWN0aW5nIGl0PyBJ4oCZbGwgbmVlZCB0byBxdWlja2x5IGRpc2Nlcm4gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0gc2VsZWN0aW9ucyB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSBkZXNpcmVkIGJ1aWxkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gZm9yIHRoZSB0eXBpY2FsIHN0dWZmLCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBmZWF0dXJlIGZsYWdzLCBkcml2ZXIgb3B0aW9ucywgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbW9kdWxlIHdpbGwgYmUgaW5jbHVkZWQgYXMgdGhlIHVzZXIgaXMgZXhwZWN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgbWF0Y2hlcyB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdGhhdCBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aGF0IGlzIHNlbGVjdGVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk5HRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1MD1jb25maWcgQk5YVF9IV01PTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTg6Y29uZmlnIEJOR0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzNgoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBCcm9hZGNvbSBUaG9yVWx0cmEgRXRoZXJuZXQgU3VwcG9ydCoqCgpBbHJpZ2h0LCAmIzM0O0Jyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCYjMzQ7Li4uIHRoYXQgaW1tZWRpYXRlbHkgc291bmRzIGxpa2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBwaWVjZSBvZiBoYXJkd2FyZSwgYSBQQ0llIGNhcmQsIGEgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciwgb3IgTklDLCBmcm9tIEJyb2FkY29tLiBUaGUgbmFtZSAmIzM0O1Rob3JVbHRyYSYjMzQ7IHJlYWxseSBsZWFucyBpbnRvIHRoZSBpZGVhIG9mIGEgaGlnaC1wZXJmb3JtYW5jZSwgcGVyaGFwcyBldmVuIGEgc2VydmVyLWNsYXNzLCBFdGhlcm5ldCBhZGFwdGVyLiBCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGlzIHN1cHBvcnQgaXMgc3RydWN0dXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMgdGllZCB0byB0aGlzIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUaG9yVWx0cmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjU5Olx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjQtXHRoZWxwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2NTpcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Ni1cdCAgRXRoZXJuZXQgY2FyZHMuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYm5nX2VuLiBUbyBjb21waWxlIHRoaXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC03LSNkZWZpbmUgRFJWX05BTUVcdFwmIzM0O2JuZ19lblwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmg6ODojZGVmaW5lIERSVl9TVU1NQVJZXHRcJiMzNDtCcm9hZGNvbSBUaG9yVWx0cmEgTklDIEV0aGVybmV0IERyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjQtfSBib2FyZF9pbmZvW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjI1Olx0W0JDTTU3NzA4XSA9IHsgXCYjMzQ7QnJvYWRjb20gQkNNNTc3MDggVGhvclVsdHJhIDUwR2IvMTAwR2IvMjAwR2IvNDAwR2IvODAwR2IgRXRoZXJuZXRcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MAoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBibmdlIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdGhhdCBpZiBhIHBhdGNoIHRvdWNoZXMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVSwgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnk/CgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgYm5nZWAgaXMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBibmdlYCByZWZlcnMgdG8gQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLiBUaGVzZSBhcmUgaW5kZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNoZWNrZWQg4oCTIFFFTVUgKmRvZXMgbm90KiBlbXVsYXRlIGBibmdlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBkcml2ZXIgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpbW1lZGlhdGVseSBwdXRzIGl0IGluIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBidWNrZXQuCgpOb3csIHRoZSBwYXRjaCBhbHNvIGludm9sdmVzIGBibmdlX3NodXRkb3duYCwgYSBgLnNodXRkb3duYCBjYWxsYmFjaywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBmbGFnIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCBhbmQgYC5zaHV0ZG93bmAgYXMgcmVhc29ucyB0byByZXR1cm4gYGZhbHNlYC4gSG93ZXZlciwgdGhlIGNvZGUgYWxzbyB0b3VjaGVzIGBibmdlX25ldGRldi5jYCB3aXRoIGEgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgZnVuY3Rpb24uIEJ1dCwgdGhlIGZhY3QgdGhhdCB0aGUgZW50aXJlIGRyaXZlciBpcyBmb3IgYSBwaHlzaWNhbCBOSUMgb3V0d2VpZ2hzIHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBibmdlYCAqaXMqIGEgcGh5c2ljYWwgTklDLiBUaGUgZGVzY3JpcHRpb24gY29uZmlybXMgJiMzNDtCcm9hZGNvbSBUaG9yVWx0cmEgNTAvMTAwLzIwMC80MDAvODAwIGdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMmIzM0Oy4gSXQgdW5lcXVpdm9jYWxseSBmYWxscyB1bmRlciB0aGUgdmVuZG9yLXNwZWNpZmljIFBDSWUgY2F0ZWdvcnkuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oYC4gQWxsIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBibmdlYCBkcml2ZXIuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoaXMgZW50aXJlIHBhdGNoIGlzIHNxdWFyZWx5IHdpdGhpbiB0aGUgYm91bmRhcmllcyBvZiBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBOSUMgZHJpdmVyIG5vdCBhbWVuYWJsZSB0byBmdXp6aW5nIGluIGEgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudC4KClRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgYW0gY29uZmlkZW50IGluIHRoaXMgY2xhc3NpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQnJvYWRjb20gVGhvclVsdHJhIChibmdlKSBFdGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzICg1MC8xMDAvMjAwLzQwMC84MDAgR2JwcyBOSUNzKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGJ5IHRoZSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozNzo1Mi44OTUxODk0NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyMDQyMTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQnJvYWRjb20gVGhvclVsdHJhIChibmdlKSBFdGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzICg1MC8xMDAvMjAwLzQwMC84MDAgR2JwcyBOSUNzKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGJ5IHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozNzo1Mi44OTUxOTUxNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODY3MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMjA6Mzc6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmNcXG5pbmRleCA2OGI3NGViMmMzYTI5YS4uOTg0NmQyOWI0ZmUzYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmNcXG5AQCAtNSwxMiArNSwxNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImJuZ2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfZGV2bGluay5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYm5nZV9od3JtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibmdlX2h3cm1fbGliLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibmdlX2xpbmsuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJuZ2VfcmVzYy5oXFxcIlxcbiBcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX1NVTU1BUlkpO1xcbkBAIC00MDYsMTIgKzQwOCwzNCBAQCBzdGF0aWMgdm9pZCBibmdlX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBibmdlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRkZXYgPSBiZCA/IGJkLVxcdTAwM2VuZXRkZXYgOiBOVUxMO1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrKGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRuZXRpZl9jbG9zZShkZXYpO1xcbitcXG4rXFx0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XFxuK1xcdFxcdHBjaWVfZmxyKHBkZXYpO1xcbitcXHRcXHRnb3RvIHNodXRkb3duX2V4aXQ7XFxuK1xcdH1cXG4rXFx0Ym5nZV9mcmVlX2lycXMoYmQpO1xcbiBcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIFxcbiBcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpIHtcXG4gXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCAwKTtcXG4gXFx0XFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xcbiBcXHR9XFxuK1xcbitzaHV0ZG93bl9leGl0OlxcbitcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXFxuaW5kZXggNmY3ZWY1MDZkNGUxOGMuLjIyMGJkY2NlZDBkYjk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJibmdlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJibmdlX2h3cm0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfaHdybV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfZXRodG9vbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYm5nZV9ybWVtLmhcXFwiXFxuQEAgLTIxNDQsMTYgKzIxNDUsMTYgQEAgc3RhdGljIGludCBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKHN0cnVjdCBibmdlX25ldCAqYm4sIHUxNiB2bmljX2lkLCB1MTYgaWR4LFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcXG4rc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxcbiB7XFxuIFxcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFxcdTAwMjZibi1cXHUwMDNldm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLVxcdTAwM2VuZXRkZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuIFxcdGludCBtY19jb3VudCA9IDAsIG9mZiA9IDA7XFxuIFxcdGJvb2wgdXBkYXRlID0gZmFsc2U7XFxuIFxcdHU4ICpoYWRkcjtcXG4gXFxuLVxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcXG4gXFx0XFx0aWYgKG1jX2NvdW50IFxcdTAwM2U9IEJOR0VfTUFYX01DX0FERFJTKSB7XFxuIFxcdFxcdFxcdCpyeF9tYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19BTExfTUNBU1Q7XFxuIFxcdFxcdFxcdHZuaWMtXFx1MDAzZW1jX2xpc3RfY291bnQgPSAwO1xcbkBAIC0yMTc3LDE3ICsyMTc4LDE3IEBAIHN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcXG4gXFx0cmV0dXJuIHVwZGF0ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibilcXG4rc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcXG4ge1xcbiBcXHRzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSBcXHUwMDI2Ym4tXFx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiBcXHRpbnQgb2ZmID0gMDtcXG4gXFxuLVxcdGlmIChuZXRkZXZfdWNfY291bnQoZGV2KSAhPSAodm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50IC0gMSkpXFxuK1xcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50IC0gMSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikge1xcbitcXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1Yykge1xcbiBcXHRcXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwoaGEtXFx1MDAzZWFkZHIsIHZuaWMtXFx1MDAzZXVjX2xpc3QgKyBvZmYpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuQEAgLTIyMDEsMTggKzIyMDIsMTQgQEAgc3RhdGljIGJvb2wgYm5nZV9wcm9taXNjX29rKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuK3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdCAgICBib29sIHVjX3VwZGF0ZSwgYm9vbCBzbmFwc2hvdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSBcXHUwMDI2Ym4tXFx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gYm4tXFx1MDAzZWJkO1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiBcXHRpbnQgaSwgb2ZmID0gMCwgcmM7XFxuLVxcdGJvb2wgdWNfdXBkYXRlO1xcbi1cXG4tXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuLVxcdHVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuKTtcXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG4gXFxuIFxcdGlmICghdWNfdXBkYXRlKVxcbiBcXHRcXHRnb3RvIHNraXBfdWM7XFxuQEAgLTIyMjYsMjIgKzIyMjMsMjggQEAgc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxcbiBcXG4gXFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gMTtcXG4gXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbi1cXHRpZiAobmV0ZGV2X3VjX2NvdW50KGRldikgXFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xcbitcXHRpZiAoIXNuYXBzaG90KVxcbitcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpIFxcdTAwM2UgKEJOR0VfTUFYX1VDX0FERFJTIC0gMSkpIHtcXG4gXFx0XFx0dm5pYy1cXHUwMDNlcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcXG4gXFx0XFx0XFx0bWVtY3B5KHZuaWMtXFx1MDAzZXVjX2xpc3QgKyBvZmYsIGhhLVxcdTAwM2VhZGRyLCBFVEhfQUxFTik7XFxuIFxcdFxcdFxcdG9mZiArPSBFVEhfQUxFTjtcXG4gXFx0XFx0XFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50Kys7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbitcXHRpZiAoIXNuYXBzaG90KVxcbitcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMSwgb2ZmID0gMDsgaSBcXHUwMDNjIHZuaWMtXFx1MDAzZXVjX2ZpbHRlcl9jb3VudDsgaSsrLCBvZmYgKz0gRVRIX0FMRU4pIHtcXG4gXFx0XFx0cmMgPSBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKGJuLCAwLCBpLCB2bmljLVxcdTAwM2V1Y19saXN0ICsgb2ZmKTtcXG4gXFx0XFx0aWYgKHJjKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiSFdSTSB2bmljIGZpbHRlciBmYWlsdXJlIHJjOiAlZFxcXFxuXFxcIiwgcmMpO1xcbitcXHRcXHRcXHRpZiAocmMgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiRlcgYnVzeSB3aGlsZSBzZXR0aW5nIHZuaWMgZmlsdGVyLCB3aWxsIHJldHJ5XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkhXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHJjKTtcXG4gXFx0XFx0XFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gaTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHR9XFxuQEAgLTIyNjcsNiArMjI3MCw0OCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuK3tcXG4rXFx0c3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYztcXG4rXFx0Ym9vbCBtY191cGRhdGUgPSBmYWxzZTtcXG4rXFx0Ym9vbCB1Y191cGRhdGU7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChCTkdFX1NUQVRFX09QRU4sIFxcdTAwMjZibi1cXHUwMDNlYmQtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2bmljID0gXFx1MDAyNmJuLVxcdTAwM2V2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdO1xcbitcXHRtYXNrID0gdm5pYy1cXHUwMDNlcnhfbWFzaztcXG4rXFx0bWFzayBcXHUwMDI2PSB+KENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUyB8XFxuK1xcdFxcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHxcXG4rXFx0XFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcXG4rXFx0XFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQkNBU1QpO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQylcXG4rXFx0XFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XFxuK1xcbitcXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibiwgdWMpO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQlJPQURDQVNUKVxcbitcXHRcXHRtYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVDtcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0XFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xcbitcXHRcXHR2bmljLVxcdTAwM2VtY19saXN0X2NvdW50ID0gMDtcXG4rXFx0fSBlbHNlIGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xcbitcXHRcXHRtY191cGRhdGUgPSBibmdlX21jX2xpc3RfdXBkYXRlZChibiwgXFx1MDAyNm1hc2ssIG1jKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1hc2sgIT0gdm5pYy1cXHUwMDNlcnhfbWFzayB8fCB1Y191cGRhdGUgfHwgbWNfdXBkYXRlKSB7XFxuK1xcdFxcdHZuaWMtXFx1MDAzZXJ4X21hc2sgPSBtYXNrO1xcbitcXHRcXHRyZXR1cm4gYm5nZV9jZmdfcnhfbW9kZShibiwgdWMsIHVjX3VwZGF0ZSwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibmdlX2Rpc2FibGVfaW50KHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIHtcXG4gXFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVxcdTAwM2ViZDtcXG5AQCAtMjY5NSwxMyArMjc0MCwxNyBAQCBzdGF0aWMgaW50IGJuZ2VfaW5pdF9jaGlwKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdH0gZWxzZSBpZiAoYm4tXFx1MDAzZW5ldGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XFxuIFxcdFxcdHUzMiBtYXNrID0gMDtcXG4gXFxuLVxcdFxcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcXHUwMDI2bWFzaywgXFx1MDAyNmJuLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1jKTtcXG4gXFx0XFx0dm5pYy1cXHUwMDNlcnhfbWFzayB8PSBtYXNrO1xcbiBcXHR9XFxuIFxcbi1cXHRyYyA9IGJuZ2VfY2ZnX2RlZl92bmljKGJuKTtcXG4tXFx0aWYgKHJjKVxcbitcXHRyYyA9IGJuZ2VfY2ZnX3J4X21vZGUoYm4sIFxcdTAwMjZibi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2V1YywgdHJ1ZSwgZmFsc2UpO1xcbitcXHRpZiAocmMgPT0gLUVBR0FJTikge1xcbitcXHRcXHRuZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH0gZWxzZSBpZiAocmMpIHtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX291dDpcXG5AQCAtMjgxMyw2ICsyODYyLDI0IEBAIHN0YXRpYyB2b2lkIGJuZ2VfdHhfZW5hYmxlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oYm4tXFx1MDAzZW5ldGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYm5nZV9od3JtX2lmX2NoYW5nZShzdHJ1Y3QgYm5nZV9kZXYgKmJkLCBib29sIHVwKVxcbit7XFxuK1xcdHN0cnVjdCBod3JtX2Z1bmNfZHJ2X2lmX2NoYW5nZV9pbnB1dCAqcmVxO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIShiZC1cXHUwMDNlZndfY2FwIFxcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aWYgKHVwKVxcbitcXHRcXHRyZXEtXFx1MDAzZWZsYWdzID0gY3B1X3RvX2xlMzIoRlVOQ19EUlZfSUZfQ0hBTkdFX1JFUV9GTEFHU19VUCk7XFxuK1xcbitcXHRyZXR1cm4gYm5nZV9od3JtX3JlcV9zZW5kKGJkLCByZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIHtcXG4gXFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVxcdTAwM2ViZDtcXG5AQCAtMjgyMCwxNiArMjg4NywyMiBAQCBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcbiBcXHRuZXRpZl9jYXJyaWVyX29mZihibi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuK1xcdHJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRuZXRkZXZfZXJyKGJuLVxcdTAwM2VuZXRkZXYsIFxcXCJibmdlX2h3cm1faWZfY2hhbmdlIGVycjogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyYyA9IGJuZ2VfcmVzZXJ2ZV9yaW5ncyhiZCk7XFxuIFxcdGlmIChyYykge1xcbiBcXHRcXHRuZXRkZXZfZXJyKGJuLVxcdTAwM2VuZXRkZXYsIFxcXCJibmdlX3Jlc2VydmVfcmluZ3MgZXJyOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdGdvdG8gZXJyX2lmX2NoYW5nZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBibmdlX2FsbG9jX2NvcmUoYm4pO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2Vycihibi1cXHUwMDNlbmV0ZGV2LCBcXFwiYm5nZV9hbGxvY19jb3JlIGVycjogJWRcXFxcblxcXCIsIHJjKTtcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIGVycl9pZl9jaGFuZ2U7XFxuIFxcdH1cXG4gXFxuIFxcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcXG5AQCAtMjg3Niw2ICsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxcbiBlcnJfZGVsX25hcGk6XFxuIFxcdGJuZ2VfZGVsX25hcGkoYm4pO1xcbiBcXHRibmdlX2ZyZWVfY29yZShibik7XFxuK2Vycl9pZl9jaGFuZ2U6XFxuK1xcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbkBAIC0zMTA2LDYgKzMxODEsNyBAQCBzdGF0aWMgaW50IGJuZ2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGJuZ2VfY2xvc2VfY29yZShibik7XFxuIFxcdGJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLVxcdTAwM2ViZCk7XFxuK1xcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYm4tXFx1MDAzZWJkLCBmYWxzZSk7XFxuIFxcdGJuLVxcdTAwM2VzcF9ldmVudCA9IDA7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzE5NSw2ICszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcFxcdFxcdD0gYm5nZV9jbG9zZSxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBibmdlX3N0YXJ0X3htaXQsXFxuIFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGJuZ2VfZ2V0X3N0YXRzNjQsXFxuK1xcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fZmVhdHVyZXNfY2hlY2tcXHQ9IGJuZ2VfZmVhdHVyZXNfY2hlY2ssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcXG5pbmRleCBkMTc3OTE5YzJlMTE3MC4uYTFhOTM5NDk2ZWJkM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXFxuQEAgLTI3NSw2ICsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcge1xcbiBcXHRCTkdFX0ZMQUdfUE9SVF9TVEFUU19FWFRcXHQ9IEJJVCgxKSxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVxcdDEwXFxuK1xcbiBlbnVtIGJuZ2Vfc3BfZXZlbnQge1xcbiBcXHRCTkdFX0xJTktfQ0hOR19TUF9FVkVOVCxcXG4gXFx0Qk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM3OjUzLjUyNDg0NTU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0OTkwNzU2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG5pbmRleCA2OGI3NGViMmMzYTI5YS4uOTg0NmQyOWI0ZmUzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYm5nZS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfZGV2bGluay5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybV9saWIuaFwiXG4gI2luY2x1ZGUgXCJibmdlX2xpbmsuaFwiXG4rI2luY2x1ZGUgXCJibmdlX3Jlc2MuaFwiXG4gXG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbkBAIC00MDYsMTIgKzQwOCwzNCBAQCBzdGF0aWMgdm9pZCBibmdlX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gc3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4rXHRzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcbitcdGRldiA9IGJkID8gYmQtXHUwMDNlbmV0ZGV2IDogTlVMTDtcbitcdGlmICghZGV2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrKGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRuZXRpZl9jbG9zZShkZXYpO1xuK1xuK1x0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XG4rXHRcdHBjaWVfZmxyKHBkZXYpO1xuK1x0XHRnb3RvIHNodXRkb3duX2V4aXQ7XG4rXHR9XG4rXHRibmdlX2ZyZWVfaXJxcyhiZCk7XG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gXG4gXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpIHtcbiBcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCAwKTtcbiBcdFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xuIFx0fVxuK1xuK3NodXRkb3duX2V4aXQ6XG4rXHRuZXRkZXZfdW5sb2NrKGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXG5pbmRleCA2ZjdlZjUwNmQ0ZTE4Yy4uMjIwYmRjY2VkMGRiOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYm5nZS5oXCJcbisjaW5jbHVkZSBcImJuZ2VfaHdybS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybV9saWIuaFwiXG4gI2luY2x1ZGUgXCJibmdlX2V0aHRvb2wuaFwiXG4gI2luY2x1ZGUgXCJibmdlX3JtZW0uaFwiXG5AQCAtMjE0NCwxNiArMjE0NSwxNiBAQCBzdGF0aWMgaW50IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTE2IHZuaWNfaWQsIHUxNiBpZHgsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcbitzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2ssXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBtY19jb3VudCA9IDAsIG9mZiA9IDA7XG4gXHRib29sIHVwZGF0ZSA9IGZhbHNlO1xuIFx0dTggKmhhZGRyO1xuIFxuLVx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuK1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcbiBcdFx0aWYgKG1jX2NvdW50IFx1MDAzZT0gQk5HRV9NQVhfTUNfQUREUlMpIHtcbiBcdFx0XHQqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuIFx0XHRcdHZuaWMtXHUwMDNlbWNfbGlzdF9jb3VudCA9IDA7XG5AQCAtMjE3NywxNyArMjE3OCwxNyBAQCBzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2spXG4gXHRyZXR1cm4gdXBkYXRlO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBibmdlX3VjX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuK3N0YXRpYyBib29sIGJuZ2VfdWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBvZmYgPSAwO1xuIFxuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuK1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHtcbitcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4gXHRcdGlmICghZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCB2bmljLVx1MDAzZXVjX2xpc3QgKyBvZmYpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIyMDEsMTggKzIyMDIsMTQgQEAgc3RhdGljIGJvb2wgYm5nZV9wcm9taXNjX29rKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuK3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4rXHRcdFx0ICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBpLCBvZmYgPSAwLCByYztcbi1cdGJvb2wgdWNfdXBkYXRlO1xuLVxuLVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4tXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibik7XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0aWYgKCF1Y191cGRhdGUpXG4gXHRcdGdvdG8gc2tpcF91YztcbkBAIC0yMjI2LDIyICsyMjIzLDI4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcbiBcdHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gMTtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpIFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xuK1x0aWYgKCFzbmFwc2hvdClcbitcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRpZiAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudCh1YykgXHUwMDNlIChCTkdFX01BWF9VQ19BRERSUyAtIDEpKSB7XG4gXHRcdHZuaWMtXHUwMDNlcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XG4gXHR9IGVsc2Uge1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4gXHRcdFx0bWVtY3B5KHZuaWMtXHUwMDNldWNfbGlzdCArIG9mZiwgaGEtXHUwMDNlYWRkciwgRVRIX0FMRU4pO1xuIFx0XHRcdG9mZiArPSBFVEhfQUxFTjtcbiBcdFx0XHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCsrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuK1x0aWYgKCFzbmFwc2hvdClcbitcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbiBcbiBcdGZvciAoaSA9IDEsIG9mZiA9IDA7IGkgXHUwMDNjIHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50OyBpKyssIG9mZiArPSBFVEhfQUxFTikge1xuIFx0XHRyYyA9IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoYm4sIDAsIGksIHZuaWMtXHUwMDNldWNfbGlzdCArIG9mZik7XG4gXHRcdGlmIChyYykge1xuLVx0XHRcdG5ldGRldl9lcnIoZGV2LCBcIkhXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcXG5cIiwgcmMpO1xuK1x0XHRcdGlmIChyYyA9PSAtRUFHQUlOKVxuK1x0XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcIkZXIGJ1c3kgd2hpbGUgc2V0dGluZyB2bmljIGZpbHRlciwgd2lsbCByZXRyeVxcblwiKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgIHJjKTtcbiBcdFx0XHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCA9IGk7XG4gXHRcdFx0cmV0dXJuIHJjO1xuIFx0XHR9XG5AQCAtMjI2Nyw2ICsyMjcwLDQ4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdHJldHVybiByYztcbiB9XG4gXG4rc3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuK3tcbitcdHN0cnVjdCBibmdlX25ldCAqYm4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljO1xuK1x0Ym9vbCBtY191cGRhdGUgPSBmYWxzZTtcbitcdGJvb2wgdWNfdXBkYXRlO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRpZiAoIXRlc3RfYml0KEJOR0VfU1RBVEVfT1BFTiwgXHUwMDI2Ym4tXHUwMDNlYmQtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZuaWMgPSBcdTAwMjZibi1cdTAwM2V2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdO1xuK1x0bWFzayA9IHZuaWMtXHUwMDNlcnhfbWFzaztcbitcdG1hc2sgXHUwMDI2PSB+KENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUyB8XG4rXHRcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHxcbitcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcbitcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQkNBU1QpO1xuK1xuK1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTO1xuK1xuK1x0dWNfdXBkYXRlID0gYm5nZV91Y19saXN0X3VwZGF0ZWQoYm4sIHVjKTtcbitcbitcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CUk9BRENBU1QpXG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUO1xuK1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0FMTF9NQ0FTVDtcbitcdFx0dm5pYy1cdTAwM2VtY19saXN0X2NvdW50ID0gMDtcbitcdH0gZWxzZSBpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XG4rXHRcdG1jX3VwZGF0ZSA9IGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrLCBtYyk7XG4rXHR9XG4rXG4rXHRpZiAobWFzayAhPSB2bmljLVx1MDAzZXJ4X21hc2sgfHwgdWNfdXBkYXRlIHx8IG1jX3VwZGF0ZSkge1xuK1x0XHR2bmljLVx1MDAzZXJ4X21hc2sgPSBtYXNrO1xuK1x0XHRyZXR1cm4gYm5nZV9jZmdfcnhfbW9kZShibiwgdWMsIHVjX3VwZGF0ZSwgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHZvaWQgYm5nZV9kaXNhYmxlX2ludChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIHtcbiBcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBibi1cdTAwM2ViZDtcbkBAIC0yNjk1LDEzICsyNzQwLDE3IEBAIHN0YXRpYyBpbnQgYm5nZV9pbml0X2NoaXAoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdH0gZWxzZSBpZiAoYm4tXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XG4gXHRcdHUzMiBtYXNrID0gMDtcbiBcbi1cdFx0Ym5nZV9tY19saXN0X3VwZGF0ZWQoYm4sIFx1MDAyNm1hc2spO1xuK1x0XHRibmdlX21jX2xpc3RfdXBkYXRlZChibiwgXHUwMDI2bWFzaywgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZW1jKTtcbiBcdFx0dm5pYy1cdTAwM2VyeF9tYXNrIHw9IG1hc2s7XG4gXHR9XG4gXG4tXHRyYyA9IGJuZ2VfY2ZnX2RlZl92bmljKGJuKTtcbi1cdGlmIChyYylcbitcdHJjID0gYm5nZV9jZmdfcnhfbW9kZShibiwgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZXVjLCB0cnVlLCBmYWxzZSk7XG4rXHRpZiAocmMgPT0gLUVBR0FJTikge1xuK1x0XHRuZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLVx1MDAzZW5ldGRldik7XG4rXHRcdHJjID0gMDtcbitcdH0gZWxzZSBpZiAocmMpIHtcbiBcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbkBAIC0yODEzLDYgKzI4NjIsMjQgQEAgc3RhdGljIHZvaWQgYm5nZV90eF9lbmFibGUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdFx0bmV0aWZfY2Fycmllcl9vbihibi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbitzdGF0aWMgaW50IGJuZ2VfaHdybV9pZl9jaGFuZ2Uoc3RydWN0IGJuZ2VfZGV2ICpiZCwgYm9vbCB1cClcbit7XG4rXHRzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTtcbitcdGludCByYztcbitcbitcdGlmICghKGJkLVx1MDAzZWZ3X2NhcCBcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGlmICh1cClcbitcdFx0cmVxLVx1MDAzZWZsYWdzID0gY3B1X3RvX2xlMzIoRlVOQ19EUlZfSUZfQ0hBTkdFX1JFUV9GTEFHU19VUCk7XG4rXG4rXHRyZXR1cm4gYm5nZV9od3JtX3JlcV9zZW5kKGJkLCByZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4ge1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuQEAgLTI4MjAsMTYgKzI4ODcsMjIgQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIFxuIFx0bmV0aWZfY2Fycmllcl9vZmYoYm4tXHUwMDNlbmV0ZGV2KTtcbiBcbitcdHJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7XG4rXHRpZiAocmMpIHtcbitcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwiYm5nZV9od3JtX2lmX2NoYW5nZSBlcnI6ICVkXFxuXCIsIHJjKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0cmMgPSBibmdlX3Jlc2VydmVfcmluZ3MoYmQpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcImJuZ2VfcmVzZXJ2ZV9yaW5ncyBlcnI6ICVkXFxuXCIsIHJjKTtcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycl9pZl9jaGFuZ2U7XG4gXHR9XG4gXG4gXHRyYyA9IGJuZ2VfYWxsb2NfY29yZShibik7XG4gXHRpZiAocmMpIHtcbiBcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwiYm5nZV9hbGxvY19jb3JlIGVycjogJWRcXG5cIiwgcmMpO1xuLVx0XHRyZXR1cm4gcmM7XG4rXHRcdGdvdG8gZXJyX2lmX2NoYW5nZTtcbiBcdH1cbiBcbiBcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcbkBAIC0yODc2LDYgKzI5NDksOCBAQCBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gZXJyX2RlbF9uYXBpOlxuIFx0Ym5nZV9kZWxfbmFwaShibik7XG4gXHRibmdlX2ZyZWVfY29yZShibik7XG4rZXJyX2lmX2NoYW5nZTpcbitcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG5AQCAtMzEwNiw2ICszMTgxLDcgQEAgc3RhdGljIGludCBibmdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRibmdlX2Nsb3NlX2NvcmUoYm4pO1xuIFx0Ym5nZV9od3JtX3NodXRkb3duX2xpbmsoYm4tXHUwMDNlYmQpO1xuK1x0Ym5nZV9od3JtX2lmX2NoYW5nZShibi1cdTAwM2ViZCwgZmFsc2UpO1xuIFx0Ym4tXHUwMDNlc3BfZXZlbnQgPSAwO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzE5NSw2ICszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBibmdlX2Nsb3NlLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYm5nZV9zdGFydF94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuK1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibmdlX3NldF9yeF9tb2RlLFxuIFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBibmdlX2ZlYXR1cmVzX2NoZWNrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXG5pbmRleCBkMTc3OTE5YzJlMTE3MC4uYTFhOTM5NDk2ZWJkM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaFxuQEAgLTI3NSw2ICsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcge1xuIFx0Qk5HRV9GTEFHX1BPUlRfU1RBVFNfRVhUXHQ9IEJJVCgxKSxcbiB9O1xuIFxuKyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVx0MTBcbitcbiBlbnVtIGJuZ2Vfc3BfZXZlbnQge1xuIFx0Qk5HRV9MSU5LX0NITkdfU1BfRVZFTlQsXG4gXHRCTkdFX0xJTktfU1BFRURfQ0hOR19TUF9FVkVOVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM3OjUzLjUyNDg0ODIwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODIxMzcyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYGJuZ2VgIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRhcmdldGluZyB0aGUgYGJuZ2VgIGRyaXZlci4gSG1tLCBgYm5nZWAuLi4gaXMgdGhhdCBCcm9hZGNvbSBOZXRYdHJlbWUtRSBvciBzb21ldGhpbmcgc2ltaWxhcj8gQWN0dWFsbHksIHRoZSBuYW1lIHNvdW5kcyBtb3JlIGxpa2UgQnJvYWRjb20gTmV4dCBHZW5lcmF0aW9uIEV0aGVybmV0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgKnJlYWwqIGRyaXZlciBhbmQgbm90IHNvbWUgaW50ZXJuYWwgbmFtZS4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGxhdGVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBibmdlX2NvcmUuY2AgYW5kIGBibmdlX25ldGRldi5jYCwgc28gaXQgc2VlbXMgdG8gYmUgaW1wYWN0aW5nIGJvdGggY29yZSBmdW5jdGlvbmFsaXR5IGFuZCBuZXR3b3JrIGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBOSUMgZHJpdmVyLlxuXG5JbiBgYm5nZV9jb3JlLmNgLCB0aGUgY2hhbmdlcyB0byBgYm5nZV9zaHV0ZG93bmAgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYmVpbmcgKnZlcnkqIGNhcmVmdWwgd2l0aCBsb2NraW5nIG5vdywgdGFraW5nIGBydG5sX2xvY2soKWAgYW5kIGBuZXRkZXZfbG9jaygpYCBiZWZvcmUgcHJvY2VlZGluZy4gU2VlbXMgbG9naWNhbCBmb3IgYSBzaHV0ZG93biBwcm9jZWR1cmUuIEl0IGNsb3NlcyB0aGUgZGV2aWNlIGlmIGl0J3MgcnVubmluZywgdW5yZWdpc3RlcnMgdGhlIGZ1bmN0aW9uIGRyaXZlciwgaXNzdWVzIGEgUENJZSBGTFIgKHRoYXQncyBnb29kLCBhIGNsZWFuIHJlc2V0IGlzIG9mdGVuIGhlbHBmdWwpLCBhbmQgZmluYWxseSBmcmVlcyB1cCB0aGUgSVJRcy4gVGhhdCdzIGEgcHJldHR5IHRob3JvdWdoIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggc29tZSB0cmlja3kgaGFyZHdhcmUgaXNzdWVzIHByZXZpb3VzbHksIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuIGluIGBibmdlX25ldGRldi5jYCwgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gbXVsdGljYXN0IGFuZCB1bmljYXN0IGxpc3QgdXBkYXRlIGZ1bmN0aW9uczogYGJuZ2VfbWNfbGlzdF91cGRhdGVkYCBhbmQgYGJuZ2VfdWNfbGlzdF91cGRhdGVkYC4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSB1c2Ugb2YgYSBgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmAgaW5zdGVhZCBvZiBmZXRjaGluZyB0aGUgYWRkcmVzcyBsaXN0IGZyb20gYGJuLVx1MDAzZW5ldGRldmAuIFRoYXQncyBhIGdvb2QgY2hhbmdlLCBhcyBpdCBkZWNvdXBsZXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIG5ldGRldiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1vcmUgcm9idXN0IGNvZGUsIGluIHRoZSBldmVudCBvZiBhbiBpbnRlcnJ1cHRpb24gdGhhdCB3b3VsZCBjYXVzZSBhIHJlLWV2YWx1YXRpb24gb2YgdGhlIGRhdGEuXG5cbkFsc28sIGBibmdlX2NmZ19yeF9tb2RlYCBpcyByZXBsYWNpbmcgYGJuZ2VfY2ZnX2RlZl92bmljYCwgYW5kIGBibmdlX3NldF9yeF9tb2RlYCBpcyBhZGRlZCwgbm93IGJlaW5nIGhvb2tlZCB1cCB0byBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYC4gTmljZSwgdGhhdCdzIG1vdmluZyB0byBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLiBJbXBsZW1lbnRpbmcgYSBtb3JlIG9wdGltaXplZCBhbmQgZWZmaWNpZW50IHNldHVwIHNob3VsZCBhbGxvdyBmb3IgcGVyZm9ybWFuY2UgaW5jcmVhc2VzLlxuXG5GaW5hbGx5LCBgYm5nZV9od3JtX2lmX2NoYW5nZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCBpdCBzZWVtcyB0byBiZSBjYWxsZWQgaW4gYGJuZ2Vfb3Blbl9jb3JlYCBhbmQgYGJuZ2VfY2xvc2VgLiBUaGF0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGludGVyZmFjZSBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBkZXZpY2UncyBvcGVuL2Nsb3NlIHN0YXRlLiBJdCdzIGxpa2VseSBoYW5kbGluZyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlY29uZmlndXJhdGlvbiBvciBtYXliZSBldmVuIHBvd2VyIG1hbmFnZW1lbnQtcmVsYXRlZCBzdHVmZi5cblxuUmlnaHQgbm93LCB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGJuZ2VgIGlzIGV2ZW4gYSB2YWxpZCBkcml2ZXIgaW4gdGhlIGtlcm5lbCBJJ20gd29ya2luZyB3aXRoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2suIElmIHRoaXMgaXMgc29tZSBpbi1ob3VzZSBkcml2ZXIsIG9yIGEgY3VzdG9tIGJ1aWxkLCB0aGVuIHRoZSBlbnRpcmUgYXBwcm9hY2ggd2lsbCBiZSBkaWZmZXJlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODowMC4yMDY5ODc5MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MTExNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibmdlX3NodXRkb3duXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MzgyPXN0YXRpYyB2b2lkIGJuZ2VfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDA5OnN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz00NDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJuZ2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDUtXFx0LnJlbW92ZVxcdFxcdD0gYm5nZV9yZW1vdmVfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDQ2OlxcdC5zaHV0ZG93blxcdD0gYm5nZV9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ0Ny19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTI5NTc9c3RhdGljIGludCBibmdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0yOTY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzoyOTY5OnN0YXRpYyBpbnQgYm5nZV9zaHV0ZG93bl9uaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMjk3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM9MzE1Mz1zdGF0aWMgdm9pZCBibmdlX2Nsb3NlX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zMTYxLVxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZibi1cXHUwMDNldGltZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMTYyOlxcdGJuZ2Vfc2h1dGRvd25fbmljKGJuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzE2My1cXHRibmdlX2Rpc2FibGVfbmFwaShibik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM4OjA1LjY5ODExMDU2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTE2Njc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGJuZ2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEkgc2VlIGBibmdlYCBsaXN0ZWQgYXMgYSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2AuIE15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBtaW51dGUuLi5pcyB0aGlzIGEgbGVnaXRpbWF0ZSwgcmVhbC13b3JsZCBkcml2ZXIsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0J3MgYmVlbiBjcmVhdGVkIGZvciBzeXprYWxsZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCcm9hZGNvbSBuZXR3b3JrIGFkYXB0ZXJzLCBteSBpbnN0aW5jdCBzYXlzIHRoYXQgTmV0WHRyZW1lLUUgY2FyZHMgdHlwaWNhbGx5IHVzZSB0aGUgYGJueHRgIGRyaXZlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBgYm5nZWAgcmVwcmVzZW50cyBhIHRydWUgaGFyZHdhcmUgZHJpdmVyIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MDguOTA5NzgzMjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyMTc5MzI0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibmdlX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaDoyMDpleHRlcm4gY2hhciBibmdlX2RyaXZlcl9uYW1lW107XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTE4PU1PRFVMRV9ERVNDUklQVElPTihEUlZfU1VNTUFSWSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjIwOmNoYXIgYm5nZV9kcml2ZXJfbmFtZVtdID0gRFJWX05BTUU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0yMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg4PXN0YXRpYyBpbnQgYm5nZV9wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0yMDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzoyMDU6XFx0cmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGJuZ2VfZHJpdmVyX25hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjA2LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz00MDk9c3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDQxOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MjpcXHQubmFtZVxcdFxcdD0gYm5nZV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ0My1cXHQuaWRfdGFibGVcXHQ9IGJuZ2VfcGNpX3RibCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9NDQ5PXN0YXRpYyBpbnQgX19pbml0IGJuZ2VfaW5pdF9tb2R1bGUodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NTE6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmJuZ2VfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ1NT1zdGF0aWMgdm9pZCBfX2V4aXQgYm5nZV9leGl0X21vZHVsZSh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDU2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ1NzpcXHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmJuZ2VfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM4OjEyLjgzMTU4MzMzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI3MTYzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgYGJuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgYm5nZWAgS2NvbmZpZyBlbnRyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgdHlwaWNhbCB0aGluZ3M6IElzIGl0IGEgdHJpc3RhdGU/IFdoYXQgYXJlIGl0cyBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXRzIGF2YWlsYWJpbGl0eSwgb3IgdGhhdCAqc2hvdWxkKiBiZSBpbXBhY3RpbmcgaXQ/IEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZGlzY2VybiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBzZWxlY3Rpb25zIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlIGRlc2lyZWQgYnVpbGQuIEknbSBnb2luZyB0byBzY2FuIGZvciB0aGUgdHlwaWNhbCBzdHVmZiwgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZmVhdHVyZSBmbGFncywgZHJpdmVyIG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG1vZHVsZSB3aWxsIGJlIGluY2x1ZGVkIGFzIHRoZSB1c2VyIGlzIGV4cGVjdGluZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgbWF0Y2hlcyB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdGhhdCBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgdGhlIGNvZGUgSSdtIGxvb2tpbmcgZm9yIGlzIHdoYXQgaXMgc2VsZWN0ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MTUuODk0MzAyMDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTQ5MzU5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJOR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTA9Y29uZmlnIEJOWFRfSFdNT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjU4OmNvbmZpZyBCTkdFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MjEuMDg5MjQ4OTM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNzUyNzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc291bmRzIGxpa2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIHBoeXNpY2FsIHBpZWNlIG9mIGhhcmR3YXJlLCBhIFBDSWUgY2FyZCwgYSBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyLCBvciBOSUMsIGZyb20gQnJvYWRjb20uIFRoZSBuYW1lIFwiVGhvclVsdHJhXCIgcmVhbGx5IGxlYW5zIGludG8gdGhlIGlkZWEgb2YgYSBoaWdoLXBlcmZvcm1hbmNlLCBwZXJoYXBzIGV2ZW4gYSBzZXJ2ZXItY2xhc3MsIEV0aGVybmV0IGFkYXB0ZXIuIEJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoaXMgc3VwcG9ydCBpcyBzdHJ1Y3R1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyB0aWVkIHRvIHRoaXMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODoyNC4zMDY3NzkyMDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njg0MzkyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVGhvclVsdHJhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTk6XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cXHRkZXBlbmRzIG9uIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjQtXFx0aGVscFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjY1OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjYtXFx0ICBFdGhlcm5ldCBjYXJkcy4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBibmdfZW4uIFRvIGNvbXBpbGUgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtNy0jZGVmaW5lIERSVl9OQU1FXFx0XFxcImJuZ19lblxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaDo4OiNkZWZpbmUgRFJWX1NVTU1BUllcXHRcXFwiQnJvYWRjb20gVGhvclVsdHJhIE5JQyBFdGhlcm5ldCBEcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTI0LX0gYm9hcmRfaW5mb1tdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6MjU6XFx0W0JDTTU3NzA4XSA9IHsgXFxcIkJyb2FkY29tIEJDTTU3NzA4IFRob3JVbHRyYSA1MEdiLzEwMEdiLzIwMEdiLzQwMEdiLzgwMEdiIEV0aGVybmV0XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MjguOTc1MjI1MTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDAzMzk1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBibmdlIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgaWYgYSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUsIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5P1xuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgYm5nZWAgaXMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBibmdlYCByZWZlcnMgdG8gQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLiBUaGVzZSBhcmUgaW5kZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNoZWNrZWQg4oCTIFFFTVUgKmRvZXMgbm90KiBlbXVsYXRlIGBibmdlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHB1dHMgaXQgaW4gdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJ1Y2tldC5cblxuTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnZvbHZlcyBgYm5nZV9zaHV0ZG93bmAsIGEgYC5zaHV0ZG93bmAgY2FsbGJhY2ssIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gZmxhZyB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgYW5kIGAuc2h1dGRvd25gIGFzIHJlYXNvbnMgdG8gcmV0dXJuIGBmYWxzZWAuIEhvd2V2ZXIsIHRoZSBjb2RlIGFsc28gdG91Y2hlcyBgYm5nZV9uZXRkZXYuY2Agd2l0aCBhIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIGZ1bmN0aW9uLiBCdXQsIHRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBkcml2ZXIgaXMgZm9yIGEgcGh5c2ljYWwgTklDIG91dHdlaWdocyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGJuZ2VgICppcyogYSBwaHlzaWNhbCBOSUMuIFRoZSBkZXNjcmlwdGlvbiBjb25maXJtcyBcIkJyb2FkY29tIFRob3JVbHRyYSA1MC8xMDAvMjAwLzQwMC84MDAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkc1wiLiBJdCB1bmVxdWl2b2NhbGx5IGZhbGxzIHVuZGVyIHRoZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXRlZ29yeS5cblxuRmluYWxseSwgSSd2ZSBjaGVja2VkIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oYC4gQWxsIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBibmdlYCBkcml2ZXIuIEl0J3Mgc2FmZSB0byBzYXkgdGhpcyBlbnRpcmUgcGF0Y2ggaXMgc3F1YXJlbHkgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIE5JQyBkcml2ZXIgbm90IGFtZW5hYmxlIHRvIGZ1enppbmcgaW4gYSB2aXJ0dWFsaXplZCBRRU1VIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIG15IGRlY2lzaW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGNsYXNzaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcwLCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODozOC41MTU1Njc2OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26p7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 20:05:25 +0000 UTC FinishedAt: 2026-07-25 20:38:39 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuaW5kZXggNjhiNzRlYjJjM2EyOWEuLjk4NDZkMjliNGZlM2MwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xuQEAgLTUsMTIgJiM0Mzs1LDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2JuZ2UuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfZGV2bGluay5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Ym5nZV9od3JtLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibmdlX2h3cm1fbGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtibmdlX2xpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtibmdlX3Jlc2MuaFwmIzM0O1xuIFxuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbkBAIC00MDYsMTIgJiM0Mzs0MDgsMzQgQEAgc3RhdGljIHZvaWQgYm5nZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIHN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuJiM0MztcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0gYmQgPyBiZC1cdTAwM2VuZXRkZXYgOiBOVUxMO1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0bmV0aWZfY2xvc2UoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XG4mIzQzO1x0XHRwY2llX2ZscihwZGV2KTtcbiYjNDM7XHRcdGdvdG8gc2h1dGRvd25fZXhpdDtcbiYjNDM7XHR9XG4mIzQzO1x0Ym5nZV9mcmVlX2lycXMoYmQpO1xuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIFxuIFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7XG4gXHRcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgMCk7XG4gXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbiBcdH1cbiYjNDM7XG4mIzQzO3NodXRkb3duX2V4aXQ6XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmNcbmluZGV4IDZmN2VmNTA2ZDRlMThjLi4yMjBiZGNjZWQwZGI5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2JuZ2UuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtibmdlX2h3cm0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfaHdybV9saWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JuZ2VfZXRodG9vbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Ym5nZV9ybWVtLmhcJiMzNDtcbkBAIC0yMTQ0LDE2ICYjNDM7MjE0NSwxNiBAQCBzdGF0aWMgaW50IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTE2IHZuaWNfaWQsIHUxNiBpZHgsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcbiYjNDM7c3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuIFx0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljID0gXHUwMDI2Ym4tXHUwMDNldm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuIFx0aW50IG1jX2NvdW50ID0gMCwgb2ZmID0gMDtcbiBcdGJvb2wgdXBkYXRlID0gZmFsc2U7XG4gXHR1OCAqaGFkZHI7XG4gXG4tXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcbiBcdFx0aWYgKG1jX2NvdW50IFx1MDAzZT0gQk5HRV9NQVhfTUNfQUREUlMpIHtcbiBcdFx0XHQqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuIFx0XHRcdHZuaWMtXHUwMDNlbWNfbGlzdF9jb3VudCA9IDA7XG5AQCAtMjE3NywxNyAmIzQzOzIxNzgsMTcgQEAgc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrKVxuIFx0cmV0dXJuIHVwZGF0ZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibilcbiYjNDM7c3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBvZmYgPSAwO1xuIFxuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuJiM0MztcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQgLSAxKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcbiBcdFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKGhhLVx1MDAzZWFkZHIsIHZuaWMtXHUwMDNldWNfbGlzdCAmIzQzOyBvZmYpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIyMDEsMTggJiM0MzsyMjAyLDE0IEBAIHN0YXRpYyBib29sIGJuZ2VfcHJvbWlzY19vayhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiYjNDM7c3RhdGljIGludCBibmdlX2NmZ19yeF9tb2RlKHN0cnVjdCBibmdlX25ldCAqYm4sIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBpLCBvZmYgPSAwLCByYztcbi1cdGJvb2wgdWNfdXBkYXRlO1xuLVxuLVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4tXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibik7XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0aWYgKCF1Y191cGRhdGUpXG4gXHRcdGdvdG8gc2tpcF91YztcbkBAIC0yMjI2LDIyICYjNDM7MjIyMywyOCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXG4gXHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCA9IDE7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbi1cdGlmIChuZXRkZXZfdWNfY291bnQoZGV2KSBcdTAwM2UgKEJOR0VfTUFYX1VDX0FERFJTIC0gMSkpIHtcbiYjNDM7XHRpZiAoIXNuYXBzaG90KVxuJiM0MztcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4mIzQzO1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpIFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xuIFx0XHR2bmljLVx1MDAzZXJ4X21hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTO1xuIFx0fSBlbHNlIHtcbi1cdFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikge1xuJiM0MztcdFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcbiBcdFx0XHRtZW1jcHkodm5pYy1cdTAwM2V1Y19saXN0ICYjNDM7IG9mZiwgaGEtXHUwMDNlYWRkciwgRVRIX0FMRU4pO1xuIFx0XHRcdG9mZiAmIzQzOz0gRVRIX0FMRU47XG4gXHRcdFx0dm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQmIzQzOyYjNDM7O1xuIFx0XHR9XG4gXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuJiM0MztcdGlmICghc25hcHNob3QpXG4mIzQzO1x0XHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0Zm9yIChpID0gMSwgb2ZmID0gMDsgaSBcdTAwM2Mgdm5pYy1cdTAwM2V1Y19maWx0ZXJfY291bnQ7IGkmIzQzOyYjNDM7LCBvZmYgJiM0Mzs9IEVUSF9BTEVOKSB7XG4gXHRcdHJjID0gYm5nZV9od3JtX3NldF92bmljX2ZpbHRlcihibiwgMCwgaSwgdm5pYy1cdTAwM2V1Y19saXN0ICYjNDM7IG9mZik7XG4gXHRcdGlmIChyYykge1xuLVx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdGlmIChyYyA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7RlcgYnVzeSB3aGlsZSBzZXR0aW5nIHZuaWMgZmlsdGVyLCB3aWxsIHJldHJ5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgcmMpO1xuIFx0XHRcdHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gaTtcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbkBAIC0yMjY3LDYgJiM0MzsyMjcwLDQ4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdHJldHVybiByYztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYm5nZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljO1xuJiM0MztcdGJvb2wgbWNfdXBkYXRlID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCB1Y191cGRhdGU7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoQk5HRV9TVEFURV9PUEVOLCBcdTAwMjZibi1cdTAwM2ViZC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4mIzQzO1x0bWFzayA9IHZuaWMtXHUwMDNlcnhfbWFzaztcbiYjNDM7XHRtYXNrIFx1MDAyNj0gfihDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVMgfFxuJiM0MztcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfTUNBU1QgfFxuJiM0MztcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcbiYjNDM7XHRcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4mIzQzO1x0XHRtYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUztcbiYjNDM7XG4mIzQzO1x0dWNfdXBkYXRlID0gYm5nZV91Y19saXN0X3VwZGF0ZWQoYm4sIHVjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JST0FEQ0FTVClcbiYjNDM7XHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuJiM0MztcdFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuJiM0MztcdFx0dm5pYy1cdTAwM2VtY19saXN0X2NvdW50ID0gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xuJiM0MztcdFx0bWNfdXBkYXRlID0gYm5nZV9tY19saXN0X3VwZGF0ZWQoYm4sIFx1MDAyNm1hc2ssIG1jKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYXNrICE9IHZuaWMtXHUwMDNlcnhfbWFzayB8fCB1Y191cGRhdGUgfHwgbWNfdXBkYXRlKSB7XG4mIzQzO1x0XHR2bmljLVx1MDAzZXJ4X21hc2sgPSBtYXNrO1xuJiM0MztcdFx0cmV0dXJuIGJuZ2VfY2ZnX3J4X21vZGUoYm4sIHVjLCB1Y191cGRhdGUsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYm5nZV9kaXNhYmxlX2ludChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIHtcbiBcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBibi1cdTAwM2ViZDtcbkBAIC0yNjk1LDEzICYjNDM7Mjc0MCwxNyBAQCBzdGF0aWMgaW50IGJuZ2VfaW5pdF9jaGlwKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXHR9IGVsc2UgaWYgKGJuLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xuIFx0XHR1MzIgbWFzayA9IDA7XG4gXG4tXHRcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrKTtcbiYjNDM7XHRcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrLCBcdTAwMjZibi1cdTAwM2VuZXRkZXYtXHUwMDNlbWMpO1xuIFx0XHR2bmljLVx1MDAzZXJ4X21hc2sgfD0gbWFzaztcbiBcdH1cbiBcbi1cdHJjID0gYm5nZV9jZmdfZGVmX3ZuaWMoYm4pO1xuLVx0aWYgKHJjKVxuJiM0MztcdHJjID0gYm5nZV9jZmdfcnhfbW9kZShibiwgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZXVjLCB0cnVlLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHJjID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdG5ldGlmX3J4X21vZGVfc2NoZWR1bGVfcmV0cnkoYm4tXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKHJjKSB7XG4gXHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0OlxuQEAgLTI4MTMsNiAmIzQzOzI4NjIsMjQgQEAgc3RhdGljIHZvaWQgYm5nZV90eF9lbmFibGUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdFx0bmV0aWZfY2Fycmllcl9vbihibi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBibmdlX2h3cm1faWZfY2hhbmdlKHN0cnVjdCBibmdlX2RldiAqYmQsIGJvb2wgdXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmICghKGJkLVx1MDAzZWZ3X2NhcCBcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRpZiAodXApXG4mIzQzO1x0XHRyZXEtXHUwMDNlZmxhZ3MgPSBjcHVfdG9fbGUzMihGVU5DX0RSVl9JRl9DSEFOR0VfUkVRX0ZMQUdTX1VQKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJuZ2VfaHdybV9yZXFfc2VuZChiZCwgcmVxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4ge1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuQEAgLTI4MjAsMTYgJiM0MzsyODg3LDIyIEBAIHN0YXRpYyBpbnQgYm5nZV9vcGVuX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGJuLVx1MDAzZW5ldGRldik7XG4gXG4mIzQzO1x0cmMgPSBibmdlX2h3cm1faWZfY2hhbmdlKGJkLCB0cnVlKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcJiMzNDtibmdlX2h3cm1faWZfY2hhbmdlIGVycjogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSBibmdlX3Jlc2VydmVfcmluZ3MoYmQpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcJiMzNDtibmdlX3Jlc2VydmVfcmluZ3MgZXJyOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRnb3RvIGVycl9pZl9jaGFuZ2U7XG4gXHR9XG4gXG4gXHRyYyA9IGJuZ2VfYWxsb2NfY29yZShibik7XG4gXHRpZiAocmMpIHtcbiBcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwmIzM0O2JuZ2VfYWxsb2NfY29yZSBlcnI6ICVkXFxuXCYjMzQ7LCByYyk7XG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRcdGdvdG8gZXJyX2lmX2NoYW5nZTtcbiBcdH1cbiBcbiBcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcbkBAIC0yODc2LDYgJiM0MzsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIGVycl9kZWxfbmFwaTpcbiBcdGJuZ2VfZGVsX25hcGkoYm4pO1xuIFx0Ym5nZV9mcmVlX2NvcmUoYm4pO1xuJiM0MztlcnJfaWZfY2hhbmdlOlxuJiM0MztcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG5AQCAtMzEwNiw2ICYjNDM7MzE4MSw3IEBAIHN0YXRpYyBpbnQgYm5nZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0Ym5nZV9jbG9zZV9jb3JlKGJuKTtcbiBcdGJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLVx1MDAzZWJkKTtcbiYjNDM7XHRibmdlX2h3cm1faWZfY2hhbmdlKGJuLVx1MDAzZWJkLCBmYWxzZSk7XG4gXHRibi1cdTAwM2VzcF9ldmVudCA9IDA7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMTk1LDYgJiM0MzszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBibmdlX2Nsb3NlLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYm5nZV9zdGFydF94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuJiM0MztcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gYm5nZV9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaFxuaW5kZXggZDE3NzkxOWMyZTExNzAuLmExYTkzOTQ5NmViZDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcbkBAIC0yNzUsNiAmIzQzOzI3NSw4IEBAIGVudW0gYm5nZV9uZXRfZmxhZyB7XG4gXHRCTkdFX0ZMQUdfUE9SVF9TVEFUU19FWFRcdD0gQklUKDEpLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVx0MTBcbiYjNDM7XG4gZW51bSBibmdlX3NwX2V2ZW50IHtcbiBcdEJOR0VfTElOS19DSE5HX1NQX0VWRU5ULFxuIFx0Qk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jCmluZGV4IDY4Yjc0ZWIyYzNhMjlhLi45ODQ2ZDI5YjRmZTNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Ym5nZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Ym5nZV9kZXZsaW5rLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtibmdlX2h3cm0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfaHdybV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfbGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JuZ2VfcmVzYy5oJiMzNDsKIAogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX1NVTU1BUlkpOwpAQCAtNDA2LDEyICYjNDM7NDA4LDM0IEBAIHN0YXRpYyB2b2lkIGJuZ2VfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogc3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKJiM0MzsJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsKJiM0MzsJZGV2ID0gYmQgPyBiZC0mZ3Q7bmV0ZGV2IDogTlVMTDsKJiM0MzsJaWYgKCFkZXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwluZXRkZXZfbG9jayhkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJbmV0aWZfY2xvc2UoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7CiYjNDM7CQlwY2llX2ZscihwZGV2KTsKJiM0MzsJCWdvdG8gc2h1dGRvd25fZXhpdDsKJiM0MzsJfQomIzQzOwlibmdlX2ZyZWVfaXJxcyhiZCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKSB7CiAJCXBjaV93YWtlX2Zyb21fZDMocGRldiwgMCk7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAl9CiYjNDM7CiYjNDM7c2h1dGRvd25fZXhpdDoKJiM0MzsJbmV0ZGV2X3VubG9jayhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMKaW5kZXggNmY3ZWY1MDZkNGUxOGMuLjIyMGJkY2NlZDBkYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2JuZ2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtibmdlX2h3cm0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfaHdybV9saWIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JuZ2VfZXRodG9vbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Ym5nZV9ybWVtLmgmIzM0OwpAQCAtMjE0NCwxNiAmIzQzOzIxNDUsMTYgQEAgc3RhdGljIGludCBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKHN0cnVjdCBibmdlX25ldCAqYm4sIHUxNiB2bmljX2lkLCB1MTYgaWR4LAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrKQomIzQzO3N0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaywKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYykKIHsKIAlzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSAmYW1wO2JuLSZndDt2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiAJaW50IG1jX2NvdW50ID0gMCwgb2ZmID0gMDsKIAlib29sIHVwZGF0ZSA9IGZhbHNlOwogCXU4ICpoYWRkcjsKIAotCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHsKIAkJaWYgKG1jX2NvdW50ICZndDs9IEJOR0VfTUFYX01DX0FERFJTKSB7CiAJCQkqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUOwogCQkJdm5pYy0mZ3Q7bWNfbGlzdF9jb3VudCA9IDA7CkBAIC0yMTc3LDE3ICYjNDM7MjE3OCwxNyBAQCBzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2spCiAJcmV0dXJuIHVwZGF0ZTsKIH0KIAotc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibikKJiM0MztzdGF0aWMgYm9vbCBibmdlX3VjX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKQogewogCXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9ICZhbXA7Ym4tJmd0O3ZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLSZndDtuZXRkZXY7CiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAlpbnQgb2ZmID0gMDsKIAotCWlmIChuZXRkZXZfdWNfY291bnQoZGV2KSAhPSAodm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50IC0gMSkpCiYjNDM7CWlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50IC0gMSkpCiAJCXJldHVybiB0cnVlOwogCi0JbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgewomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykgewogCQlpZiAoIWV0aGVyX2FkZHJfZXF1YWwoaGEtJmd0O2FkZHIsIHZuaWMtJmd0O3VjX2xpc3QgJiM0Mzsgb2ZmKSkKIAkJCXJldHVybiB0cnVlOwogCkBAIC0yMjAxLDE4ICYjNDM7MjIwMiwxNCBAQCBzdGF0aWMgYm9vbCBibmdlX3Byb21pc2Nfb2soc3RydWN0IGJuZ2VfbmV0ICpibikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKQomIzQzO3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiYjNDM7CQkJICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KQogewogCXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9ICZhbXA7Ym4tJmd0O3ZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLSZndDtuZXRkZXY7CiAJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLSZndDtiZDsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwogCWludCBpLCBvZmYgPSAwLCByYzsKLQlib29sIHVjX3VwZGF0ZTsKLQotCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwotCXVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuKTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogCiAJaWYgKCF1Y191cGRhdGUpCiAJCWdvdG8gc2tpcF91YzsKQEAgLTIyMjYsMjIgJiM0MzsyMjIzLDI4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibikKIAogCXZuaWMtJmd0O3VjX2ZpbHRlcl9jb3VudCA9IDE7CiAKLQluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKLQlpZiAobmV0ZGV2X3VjX2NvdW50KGRldikgJmd0OyAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkgewomIzQzOwlpZiAoIXNuYXBzaG90KQomIzQzOwkJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CWlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAmZ3Q7IChCTkdFX01BWF9VQ19BRERSUyAtIDEpKSB7CiAJCXZuaWMtJmd0O3J4X21hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTOwogCX0gZWxzZSB7Ci0JCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7CiAJCQltZW1jcHkodm5pYy0mZ3Q7dWNfbGlzdCAmIzQzOyBvZmYsIGhhLSZndDthZGRyLCBFVEhfQUxFTik7CiAJCQlvZmYgJiM0Mzs9IEVUSF9BTEVOOwogCQkJdm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50JiM0MzsmIzQzOzsKIAkJfQogCX0KLQluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwlpZiAoIXNuYXBzaG90KQomIzQzOwkJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKIAogCWZvciAoaSA9IDEsIG9mZiA9IDA7IGkgJmx0OyB2bmljLSZndDt1Y19maWx0ZXJfY291bnQ7IGkmIzQzOyYjNDM7LCBvZmYgJiM0Mzs9IEVUSF9BTEVOKSB7CiAJCXJjID0gYm5nZV9od3JtX3NldF92bmljX2ZpbHRlcihibiwgMCwgaSwgdm5pYy0mZ3Q7dWNfbGlzdCAmIzQzOyBvZmYpOwogCQlpZiAocmMpIHsKLQkJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0hXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQkJaWYgKHJjID09IC1FQUdBSU4pCiYjNDM7CQkJCW5ldGRldl93YXJuKGRldiwgJiMzNDtGVyBidXN5IHdoaWxlIHNldHRpbmcgdm5pYyBmaWx0ZXIsIHdpbGwgcmV0cnlcbiYjMzQ7KTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCW5ldGRldl9lcnIoZGV2LCAmIzM0O0hXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgcmMpOwogCQkJdm5pYy0mZ3Q7dWNfZmlsdGVyX2NvdW50ID0gaTsKIAkJCXJldHVybiByYzsKIAkJfQpAQCAtMjI2Nyw2ICYjNDM7MjI3MCw0OCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7c3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKQomIzQzO3sKJiM0MzsJc3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYzsKJiM0MzsJYm9vbCBtY191cGRhdGUgPSBmYWxzZTsKJiM0MzsJYm9vbCB1Y191cGRhdGU7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KEJOR0VfU1RBVEVfT1BFTiwgJmFtcDtibi0mZ3Q7YmQtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2bmljID0gJmFtcDtibi0mZ3Q7dm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTsKJiM0MzsJbWFzayA9IHZuaWMtJmd0O3J4X21hc2s7CiYjNDM7CW1hc2sgJmFtcDs9IH4oQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTIHwKJiM0MzsJCSAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHwKJiM0MzsJCSAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0FMTF9NQ0FTVCB8CiYjNDM7CQkgIENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVCk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKQomIzQzOwkJbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7CiYjNDM7CiYjNDM7CXVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuLCB1Yyk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9CUk9BRENBU1QpCiYjNDM7CQltYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVDsKJiM0MzsJaWYgKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSB7CiYjNDM7CQltYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19BTExfTUNBU1Q7CiYjNDM7CQl2bmljLSZndDttY19saXN0X2NvdW50ID0gMDsKJiM0MzsJfSBlbHNlIGlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9NVUxUSUNBU1QpIHsKJiM0MzsJCW1jX3VwZGF0ZSA9IGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCAmYW1wO21hc2ssIG1jKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobWFzayAhPSB2bmljLSZndDtyeF9tYXNrIHx8IHVjX3VwZGF0ZSB8fCBtY191cGRhdGUpIHsKJiM0MzsJCXZuaWMtJmd0O3J4X21hc2sgPSBtYXNrOwomIzQzOwkJcmV0dXJuIGJuZ2VfY2ZnX3J4X21vZGUoYm4sIHVjLCB1Y191cGRhdGUsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJuZ2VfZGlzYWJsZV9pbnQoc3RydWN0IGJuZ2VfbmV0ICpibikKIHsKIAlzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gYm4tJmd0O2JkOwpAQCAtMjY5NSwxMyAmIzQzOzI3NDAsMTcgQEAgc3RhdGljIGludCBibmdlX2luaXRfY2hpcChzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogCX0gZWxzZSBpZiAoYm4tJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX01VTFRJQ0FTVCkgewogCQl1MzIgbWFzayA9IDA7CiAKLQkJYm5nZV9tY19saXN0X3VwZGF0ZWQoYm4sICZhbXA7bWFzayk7CiYjNDM7CQlibmdlX21jX2xpc3RfdXBkYXRlZChibiwgJmFtcDttYXNrLCAmYW1wO2JuLSZndDtuZXRkZXYtJmd0O21jKTsKIAkJdm5pYy0mZ3Q7cnhfbWFzayB8PSBtYXNrOwogCX0KIAotCXJjID0gYm5nZV9jZmdfZGVmX3ZuaWMoYm4pOwotCWlmIChyYykKJiM0MzsJcmMgPSBibmdlX2NmZ19yeF9tb2RlKGJuLCAmYW1wO2JuLSZndDtuZXRkZXYtJmd0O3VjLCB0cnVlLCBmYWxzZSk7CiYjNDM7CWlmIChyYyA9PSAtRUFHQUlOKSB7CiYjNDM7CQluZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLSZndDtuZXRkZXYpOwomIzQzOwkJcmMgPSAwOwomIzQzOwl9IGVsc2UgaWYgKHJjKSB7CiAJCWdvdG8gZXJyX291dDsKJiM0MzsJfQogCXJldHVybiAwOwogCiBlcnJfb3V0OgpAQCAtMjgxMyw2ICYjNDM7Mjg2MiwyNCBAQCBzdGF0aWMgdm9pZCBibmdlX3R4X2VuYWJsZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogCQluZXRpZl9jYXJyaWVyX29uKGJuLSZndDtuZXRkZXYpOwogfQogCiYjNDM7c3RhdGljIGludCBibmdlX2h3cm1faWZfY2hhbmdlKHN0cnVjdCBibmdlX2RldiAqYmQsIGJvb2wgdXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIShiZC0mZ3Q7ZndfY2FwICZhbXA7IEJOR0VfRldfQ0FQX0lGX0NIQU5HRSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmMgPSBibmdlX2h3cm1fcmVxX2luaXQoYmQsIHJlcSwgSFdSTV9GVU5DX0RSVl9JRl9DSEFOR0UpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CWlmICh1cCkKJiM0MzsJCXJlcS0mZ3Q7ZmxhZ3MgPSBjcHVfdG9fbGUzMihGVU5DX0RSVl9JRl9DSEFOR0VfUkVRX0ZMQUdTX1VQKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJuZ2VfaHdybV9yZXFfc2VuZChiZCwgcmVxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pCiB7CiAJc3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLSZndDtiZDsKQEAgLTI4MjAsMTYgJiM0MzsyODg3LDIyIEBAIHN0YXRpYyBpbnQgYm5nZV9vcGVuX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibikKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGJuLSZndDtuZXRkZXYpOwogCiYjNDM7CXJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbmV0ZGV2X2Vycihibi0mZ3Q7bmV0ZGV2LCAmIzM0O2JuZ2VfaHdybV9pZl9jaGFuZ2UgZXJyOiAlZFxuJiMzNDssIHJjKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJjID0gYm5nZV9yZXNlcnZlX3JpbmdzKGJkKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2Vycihibi0mZ3Q7bmV0ZGV2LCAmIzM0O2JuZ2VfcmVzZXJ2ZV9yaW5ncyBlcnI6ICVkXG4mIzM0OywgcmMpOwotCQlyZXR1cm4gcmM7CiYjNDM7CQlnb3RvIGVycl9pZl9jaGFuZ2U7CiAJfQogCiAJcmMgPSBibmdlX2FsbG9jX2NvcmUoYm4pOwogCWlmIChyYykgewogCQluZXRkZXZfZXJyKGJuLSZndDtuZXRkZXYsICYjMzQ7Ym5nZV9hbGxvY19jb3JlIGVycjogJWRcbiYjMzQ7LCByYyk7Ci0JCXJldHVybiByYzsKJiM0MzsJCWdvdG8gZXJyX2lmX2NoYW5nZTsKIAl9CiAKIAlibmdlX2luaXRfbmFwaShibik7CkBAIC0yODc2LDYgJiM0MzsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKQogZXJyX2RlbF9uYXBpOgogCWJuZ2VfZGVsX25hcGkoYm4pOwogCWJuZ2VfZnJlZV9jb3JlKGJuKTsKJiM0MztlcnJfaWZfY2hhbmdlOgomIzQzOwlibmdlX2h3cm1faWZfY2hhbmdlKGJkLCBmYWxzZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMTA2LDYgJiM0MzszMTgxLDcgQEAgc3RhdGljIGludCBibmdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlibmdlX2Nsb3NlX2NvcmUoYm4pOwogCWJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLSZndDtiZCk7CiYjNDM7CWJuZ2VfaHdybV9pZl9jaGFuZ2UoYm4tJmd0O2JkLCBmYWxzZSk7CiAJYm4tJmd0O3NwX2V2ZW50ID0gMDsKIAogCXJldHVybiAwOwpAQCAtMzE5NSw2ICYjNDM7MzI3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm5nZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcAkJPSBibmdlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBibmdlX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHM2NAk9IGJuZ2VfZ2V0X3N0YXRzNjQsCiYjNDM7CS5uZG9fc2V0X3J4X21vZGVfYXN5bmMJPSBibmdlX3NldF9yeF9tb2RlLAogCS5uZG9fZmVhdHVyZXNfY2hlY2sJPSBibmdlX2ZlYXR1cmVzX2NoZWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oCmluZGV4IGQxNzc5MTljMmUxMTcwLi5hMWE5Mzk0OTZlYmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaApAQCAtMjc1LDYgJiM0MzsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcgewogCUJOR0VfRkxBR19QT1JUX1NUQVRTX0VYVAk9IEJJVCgxKSwKIH07CiAKJiM0MzsjZGVmaW5lIEJOR0VfRldfSUZfUkVUUlkJMTAKJiM0MzsKIGVudW0gYm5nZV9zcF9ldmVudCB7CiAJQk5HRV9MSU5LX0NITkdfU1BfRVZFTlQsCiAJQk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYGJuZ2VgIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgdGFyZ2V0aW5nIHRoZSBgYm5nZWAgZHJpdmVyLiBIbW0sIGBibmdlYC4uLiBpcyB0aGF0IEJyb2FkY29tIE5ldFh0cmVtZS1FIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSwgdGhlIG5hbWUgc291bmRzIG1vcmUgbGlrZSBCcm9hZGNvbSBOZXh0IEdlbmVyYXRpb24gRXRoZXJuZXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYSAqcmVhbCogZHJpdmVyIGFuZCBub3Qgc29tZSBpbnRlcm5hbCBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGxhdGVyLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgYm5nZV9jb3JlLmNgIGFuZCBgYm5nZV9uZXRkZXYuY2AsIHNvIGl0IHNlZW1zIHRvIGJlIGltcGFjdGluZyBib3RoIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24sIHdoaWNoIGlzIHR5cGljYWwgZm9yIGEgTklDIGRyaXZlci4KCkluIGBibmdlX2NvcmUuY2AsIHRoZSBjaGFuZ2VzIHRvIGBibmdlX3NodXRkb3duYCBhcmUgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYmVpbmcgKnZlcnkqIGNhcmVmdWwgd2l0aCBsb2NraW5nIG5vdywgdGFraW5nIGBydG5sX2xvY2soKWAgYW5kIGBuZXRkZXZfbG9jaygpYCBiZWZvcmUgcHJvY2VlZGluZy4gU2VlbXMgbG9naWNhbCBmb3IgYSBzaHV0ZG93biBwcm9jZWR1cmUuIEl0IGNsb3NlcyB0aGUgZGV2aWNlIGlmIGl0JiMzOTtzIHJ1bm5pbmcsIHVucmVnaXN0ZXJzIHRoZSBmdW5jdGlvbiBkcml2ZXIsIGlzc3VlcyBhIFBDSWUgRkxSICh0aGF0JiMzOTtzIGdvb2QsIGEgY2xlYW4gcmVzZXQgaXMgb2Z0ZW4gaGVscGZ1bCksIGFuZCBmaW5hbGx5IGZyZWVzIHVwIHRoZSBJUlFzLiBUaGF0JiMzOTtzIGEgcHJldHR5IHRob3JvdWdoIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggc29tZSB0cmlja3kgaGFyZHdhcmUgaXNzdWVzIHByZXZpb3VzbHksIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgoKVGhlbiBpbiBgYm5nZV9uZXRkZXYuY2AsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIG11bHRpY2FzdCBhbmQgdW5pY2FzdCBsaXN0IHVwZGF0ZSBmdW5jdGlvbnM6IGBibmdlX21jX2xpc3RfdXBkYXRlZGAgYW5kIGBibmdlX3VjX2xpc3RfdXBkYXRlZGAuIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgdXNlIG9mIGEgYGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpgIGluc3RlYWQgb2YgZmV0Y2hpbmcgdGhlIGFkZHJlc3MgbGlzdCBmcm9tIGBibi0mZ3Q7bmV0ZGV2YC4gVGhhdCYjMzk7cyBhIGdvb2QgY2hhbmdlLCBhcyBpdCBkZWNvdXBsZXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIG5ldGRldiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1vcmUgcm9idXN0IGNvZGUsIGluIHRoZSBldmVudCBvZiBhbiBpbnRlcnJ1cHRpb24gdGhhdCB3b3VsZCBjYXVzZSBhIHJlLWV2YWx1YXRpb24gb2YgdGhlIGRhdGEuCgpBbHNvLCBgYm5nZV9jZmdfcnhfbW9kZWAgaXMgcmVwbGFjaW5nIGBibmdlX2NmZ19kZWZfdm5pY2AsIGFuZCBgYm5nZV9zZXRfcnhfbW9kZWAgaXMgYWRkZWQsIG5vdyBiZWluZyBob29rZWQgdXAgdG8gYG5kb19zZXRfcnhfbW9kZV9hc3luY2AuIE5pY2UsIHRoYXQmIzM5O3MgbW92aW5nIHRvIGEgbW9yZSBtb2Rlcm4gYXBwcm9hY2guIEltcGxlbWVudGluZyBhIG1vcmUgb3B0aW1pemVkIGFuZCBlZmZpY2llbnQgc2V0dXAgc2hvdWxkIGFsbG93IGZvciBwZXJmb3JtYW5jZSBpbmNyZWFzZXMuCgpGaW5hbGx5LCBgYm5nZV9od3JtX2lmX2NoYW5nZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCBpdCBzZWVtcyB0byBiZSBjYWxsZWQgaW4gYGJuZ2Vfb3Blbl9jb3JlYCBhbmQgYGJuZ2VfY2xvc2VgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaGFyZHdhcmUgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBpbnRlcmZhY2UgY2hhbmdlcyBiYXNlZCBvbiB0aGUgZGV2aWNlJiMzOTtzIG9wZW4vY2xvc2Ugc3RhdGUuIEl0JiMzOTtzIGxpa2VseSBoYW5kbGluZyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlY29uZmlndXJhdGlvbiBvciBtYXliZSBldmVuIHBvd2VyIG1hbmFnZW1lbnQtcmVsYXRlZCBzdHVmZi4KClJpZ2h0IG5vdywgdGhvdWdoLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBibmdlYCBpcyBldmVuIGEgdmFsaWQgZHJpdmVyIGluIHRoZSBrZXJuZWwgSSYjMzk7bSB3b3JraW5nIHdpdGguIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrLiBJZiB0aGlzIGlzIHNvbWUgaW4taG91c2UgZHJpdmVyLCBvciBhIGN1c3RvbSBidWlsZCwgdGhlbiB0aGUgZW50aXJlIGFwcHJvYWNoIHdpbGwgYmUgZGlmZmVyZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JuZ2Vfc2h1dGRvd24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz0zODI9c3RhdGljIHZvaWQgYm5nZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0MDk6c3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDEwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ0MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDUtXHQucmVtb3ZlXHRcdD0gYm5nZV9yZW1vdmVfb25lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NDY6XHQuc2h1dGRvd25cdD0gYm5nZV9zaHV0ZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQ3LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTI5NTc9c3RhdGljIGludCBibmdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMjk2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzoyOTY5OnN0YXRpYyBpbnQgYm5nZV9zaHV0ZG93bl9uaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0yOTcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM9MzE1Mz1zdGF0aWMgdm9pZCBibmdlX2Nsb3NlX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzE2MS1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmJuLVx1MDAzZXRpbWVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMTYyOlx0Ym5nZV9zaHV0ZG93bl9uaWMoYm4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTMxNjMtXHRibmdlX2Rpc2FibGVfbmFwaShibik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBibmdlYCBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgYGJuZ2VgIGxpc3RlZCBhcyBhIGRyaXZlciB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiBhIG1pbnV0ZS4uLmlzIHRoaXMgYSBsZWdpdGltYXRlLCByZWFsLXdvcmxkIGRyaXZlciwgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQmIzM5O3MgYmVlbiBjcmVhdGVkIGZvciBzeXprYWxsZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCcm9hZGNvbSBuZXR3b3JrIGFkYXB0ZXJzLCBteSBpbnN0aW5jdCBzYXlzIHRoYXQgTmV0WHRyZW1lLUUgY2FyZHMgdHlwaWNhbGx5IHVzZSB0aGUgYGJueHRgIGRyaXZlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBgYm5nZWAgcmVwcmVzZW50cyBhIHRydWUgaGFyZHdhcmUgZHJpdmVyIG9yIG5vdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibmdlX2RyaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZS5oOjIwOmV4dGVybiBjaGFyIGJuZ2VfZHJpdmVyX25hbWVbXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZS5oLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg9TU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjIwOmNoYXIgYm5nZV9kcml2ZXJfbmFtZVtdID0gRFJWX05BTUU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTIxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg4PXN0YXRpYyBpbnQgYm5nZV9wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzoyMDU6XHRyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgYm5nZV9kcml2ZXJfbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTIwNi1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9NDA5PXN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MTpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MjpcdC5uYW1lXHRcdD0gYm5nZV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQzLVx0LmlkX3RhYmxlXHQ9IGJuZ2VfcGNpX3RibCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ0OT1zdGF0aWMgaW50IF9faW5pdCBibmdlX2luaXRfbW9kdWxlKHZvaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ1MTpcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmJuZ2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDUyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ1NT1zdGF0aWMgdm9pZCBfX2V4aXQgYm5nZV9leGl0X21vZHVsZSh2b2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NTc6XHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2Ym5nZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIGBibmdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgYm5nZWAgS2NvbmZpZyBlbnRyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHR5cGljYWwgdGhpbmdzOiBJcyBpdCBhIHRyaXN0YXRlPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBhdmFpbGFiaWxpdHksIG9yIHRoYXQgKnNob3VsZCogYmUgaW1wYWN0aW5nIGl0PyBJ4oCZbGwgbmVlZCB0byBxdWlja2x5IGRpc2Nlcm4gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0gc2VsZWN0aW9ucyB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSBkZXNpcmVkIGJ1aWxkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gZm9yIHRoZSB0eXBpY2FsIHN0dWZmLCB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBmZWF0dXJlIGZsYWdzLCBkcml2ZXIgb3B0aW9ucywgYW5kIGFueSBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbW9kdWxlIHdpbGwgYmUgaW5jbHVkZWQgYXMgdGhlIHVzZXIgaXMgZXhwZWN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgbWF0Y2hlcyB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdGhhdCBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgdGhlIGNvZGUgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aGF0IGlzIHNlbGVjdGVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk5HRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1MD1jb25maWcgQk5YVF9IV01PTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTg6Y29uZmlnIEJOR0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzNgoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBCcm9hZGNvbSBUaG9yVWx0cmEgRXRoZXJuZXQgU3VwcG9ydCoqCgpBbHJpZ2h0LCAmIzM0O0Jyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCYjMzQ7Li4uIHRoYXQgaW1tZWRpYXRlbHkgc291bmRzIGxpa2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBwaWVjZSBvZiBoYXJkd2FyZSwgYSBQQ0llIGNhcmQsIGEgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciwgb3IgTklDLCBmcm9tIEJyb2FkY29tLiBUaGUgbmFtZSAmIzM0O1Rob3JVbHRyYSYjMzQ7IHJlYWxseSBsZWFucyBpbnRvIHRoZSBpZGVhIG9mIGEgaGlnaC1wZXJmb3JtYW5jZSwgcGVyaGFwcyBldmVuIGEgc2VydmVyLWNsYXNzLCBFdGhlcm5ldCBhZGFwdGVyLiBCZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGlzIHN1cHBvcnQgaXMgc3RydWN0dXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMgdGllZCB0byB0aGlzIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUaG9yVWx0cmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjU5Olx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjQtXHRoZWxwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2NTpcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2Ni1cdCAgRXRoZXJuZXQgY2FyZHMuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYm5nX2VuLiBUbyBjb21waWxlIHRoaXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC03LSNkZWZpbmUgRFJWX05BTUVcdFwmIzM0O2JuZ19lblwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmg6ODojZGVmaW5lIERSVl9TVU1NQVJZXHRcJiMzNDtCcm9hZGNvbSBUaG9yVWx0cmEgTklDIEV0aGVybmV0IERyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjQtfSBib2FyZF9pbmZvW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjI1Olx0W0JDTTU3NzA4XSA9IHsgXCYjMzQ7QnJvYWRjb20gQkNNNTc3MDggVGhvclVsdHJhIDUwR2IvMTAwR2IvMjAwR2IvNDAwR2IvODAwR2IgRXRoZXJuZXRcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MAoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBibmdlIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgdGhhdCBpZiBhIHBhdGNoIHRvdWNoZXMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVSwgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnk/CgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgYm5nZWAgaXMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBibmdlYCByZWZlcnMgdG8gQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLiBUaGVzZSBhcmUgaW5kZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNoZWNrZWQg4oCTIFFFTVUgKmRvZXMgbm90KiBlbXVsYXRlIGBibmdlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBkcml2ZXIgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpbW1lZGlhdGVseSBwdXRzIGl0IGluIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBidWNrZXQuCgpOb3csIHRoZSBwYXRjaCBhbHNvIGludm9sdmVzIGBibmdlX3NodXRkb3duYCwgYSBgLnNodXRkb3duYCBjYWxsYmFjaywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBmbGFnIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCBhbmQgYC5zaHV0ZG93bmAgYXMgcmVhc29ucyB0byByZXR1cm4gYGZhbHNlYC4gSG93ZXZlciwgdGhlIGNvZGUgYWxzbyB0b3VjaGVzIGBibmdlX25ldGRldi5jYCB3aXRoIGEgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgZnVuY3Rpb24uIEJ1dCwgdGhlIGZhY3QgdGhhdCB0aGUgZW50aXJlIGRyaXZlciBpcyBmb3IgYSBwaHlzaWNhbCBOSUMgb3V0d2VpZ2hzIHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBibmdlYCAqaXMqIGEgcGh5c2ljYWwgTklDLiBUaGUgZGVzY3JpcHRpb24gY29uZmlybXMgJiMzNDtCcm9hZGNvbSBUaG9yVWx0cmEgNTAvMTAwLzIwMC80MDAvODAwIGdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMmIzM0Oy4gSXQgdW5lcXVpdm9jYWxseSBmYWxscyB1bmRlciB0aGUgdmVuZG9yLXNwZWNpZmljIFBDSWUgY2F0ZWdvcnkuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oYC4gQWxsIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBibmdlYCBkcml2ZXIuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoaXMgZW50aXJlIHBhdGNoIGlzIHNxdWFyZWx5IHdpdGhpbiB0aGUgYm91bmRhcmllcyBvZiBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBOSUMgZHJpdmVyIG5vdCBhbWVuYWJsZSB0byBmdXp6aW5nIGluIGEgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudC4KClRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgYW0gY29uZmlkZW50IGluIHRoaXMgY2xhc3NpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQnJvYWRjb20gVGhvclVsdHJhIChibmdlKSBFdGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzICg1MC8xMDAvMjAwLzQwMC84MDAgR2JwcyBOSUNzKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGJ5IHRoZSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozNzo1Mi44OTUxODk0NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyMDQyMTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQnJvYWRjb20gVGhvclVsdHJhIChibmdlKSBFdGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzICg1MC8xMDAvMjAwLzQwMC84MDAgR2JwcyBOSUNzKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGJ5IHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozNzo1Mi44OTUxOTUxNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODY3MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMjA6Mzc6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmNcXG5pbmRleCA2OGI3NGViMmMzYTI5YS4uOTg0NmQyOWI0ZmUzYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmNcXG5AQCAtNSwxMiArNSwxNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImJuZ2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfZGV2bGluay5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYm5nZV9od3JtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibmdlX2h3cm1fbGliLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJibmdlX2xpbmsuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJuZ2VfcmVzYy5oXFxcIlxcbiBcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX1NVTU1BUlkpO1xcbkBAIC00MDYsMTIgKzQwOCwzNCBAQCBzdGF0aWMgdm9pZCBibmdlX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBibmdlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRkZXYgPSBiZCA/IGJkLVxcdTAwM2VuZXRkZXYgOiBOVUxMO1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrKGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRuZXRpZl9jbG9zZShkZXYpO1xcbitcXG4rXFx0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XFxuK1xcdFxcdHBjaWVfZmxyKHBkZXYpO1xcbitcXHRcXHRnb3RvIHNodXRkb3duX2V4aXQ7XFxuK1xcdH1cXG4rXFx0Ym5nZV9mcmVlX2lycXMoYmQpO1xcbiBcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIFxcbiBcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpIHtcXG4gXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCAwKTtcXG4gXFx0XFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xcbiBcXHR9XFxuK1xcbitzaHV0ZG93bl9leGl0OlxcbitcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXFxuaW5kZXggNmY3ZWY1MDZkNGUxOGMuLjIyMGJkY2NlZDBkYjk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJibmdlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJibmdlX2h3cm0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfaHdybV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJuZ2VfZXRodG9vbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYm5nZV9ybWVtLmhcXFwiXFxuQEAgLTIxNDQsMTYgKzIxNDUsMTYgQEAgc3RhdGljIGludCBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKHN0cnVjdCBibmdlX25ldCAqYm4sIHUxNiB2bmljX2lkLCB1MTYgaWR4LFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcXG4rc3RhdGljIGJvb2wgYm5nZV9tY19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTMyICpyeF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxcbiB7XFxuIFxcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFxcdTAwMjZibi1cXHUwMDNldm5pY19pbmZvW0JOR0VfVk5JQ19ERUZBVUxUXTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJuLVxcdTAwM2VuZXRkZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuIFxcdGludCBtY19jb3VudCA9IDAsIG9mZiA9IDA7XFxuIFxcdGJvb2wgdXBkYXRlID0gZmFsc2U7XFxuIFxcdHU4ICpoYWRkcjtcXG4gXFxuLVxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcXG4gXFx0XFx0aWYgKG1jX2NvdW50IFxcdTAwM2U9IEJOR0VfTUFYX01DX0FERFJTKSB7XFxuIFxcdFxcdFxcdCpyeF9tYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19BTExfTUNBU1Q7XFxuIFxcdFxcdFxcdHZuaWMtXFx1MDAzZW1jX2xpc3RfY291bnQgPSAwO1xcbkBAIC0yMTc3LDE3ICsyMTc4LDE3IEBAIHN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcXG4gXFx0cmV0dXJuIHVwZGF0ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibilcXG4rc3RhdGljIGJvb2wgYm5nZV91Y19saXN0X3VwZGF0ZWQoc3RydWN0IGJuZ2VfbmV0ICpibixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcXG4ge1xcbiBcXHRzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSBcXHUwMDI2Ym4tXFx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiBcXHRpbnQgb2ZmID0gMDtcXG4gXFxuLVxcdGlmIChuZXRkZXZfdWNfY291bnQoZGV2KSAhPSAodm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50IC0gMSkpXFxuK1xcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKSAhPSAodm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50IC0gMSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikge1xcbitcXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1Yykge1xcbiBcXHRcXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwoaGEtXFx1MDAzZWFkZHIsIHZuaWMtXFx1MDAzZXVjX2xpc3QgKyBvZmYpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuQEAgLTIyMDEsMTggKzIyMDIsMTQgQEAgc3RhdGljIGJvb2wgYm5nZV9wcm9taXNjX29rKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuK3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdCAgICBib29sIHVjX3VwZGF0ZSwgYm9vbCBzbmFwc2hvdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm5nZV92bmljX2luZm8gKnZuaWMgPSBcXHUwMDI2Ym4tXFx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBibi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gYm4tXFx1MDAzZWJkO1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiBcXHRpbnQgaSwgb2ZmID0gMCwgcmM7XFxuLVxcdGJvb2wgdWNfdXBkYXRlO1xcbi1cXG4tXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuLVxcdHVjX3VwZGF0ZSA9IGJuZ2VfdWNfbGlzdF91cGRhdGVkKGJuKTtcXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcXG4gXFxuIFxcdGlmICghdWNfdXBkYXRlKVxcbiBcXHRcXHRnb3RvIHNraXBfdWM7XFxuQEAgLTIyMjYsMjIgKzIyMjMsMjggQEAgc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxcbiBcXG4gXFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gMTtcXG4gXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbi1cXHRpZiAobmV0ZGV2X3VjX2NvdW50KGRldikgXFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xcbitcXHRpZiAoIXNuYXBzaG90KVxcbitcXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4rXFx0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpIFxcdTAwM2UgKEJOR0VfTUFYX1VDX0FERFJTIC0gMSkpIHtcXG4gXFx0XFx0dm5pYy1cXHUwMDNlcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpIHtcXG4gXFx0XFx0XFx0bWVtY3B5KHZuaWMtXFx1MDAzZXVjX2xpc3QgKyBvZmYsIGhhLVxcdTAwM2VhZGRyLCBFVEhfQUxFTik7XFxuIFxcdFxcdFxcdG9mZiArPSBFVEhfQUxFTjtcXG4gXFx0XFx0XFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50Kys7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbitcXHRpZiAoIXNuYXBzaG90KVxcbitcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMSwgb2ZmID0gMDsgaSBcXHUwMDNjIHZuaWMtXFx1MDAzZXVjX2ZpbHRlcl9jb3VudDsgaSsrLCBvZmYgKz0gRVRIX0FMRU4pIHtcXG4gXFx0XFx0cmMgPSBibmdlX2h3cm1fc2V0X3ZuaWNfZmlsdGVyKGJuLCAwLCBpLCB2bmljLVxcdTAwM2V1Y19saXN0ICsgb2ZmKTtcXG4gXFx0XFx0aWYgKHJjKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiSFdSTSB2bmljIGZpbHRlciBmYWlsdXJlIHJjOiAlZFxcXFxuXFxcIiwgcmMpO1xcbitcXHRcXHRcXHRpZiAocmMgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiRlcgYnVzeSB3aGlsZSBzZXR0aW5nIHZuaWMgZmlsdGVyLCB3aWxsIHJldHJ5XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIkhXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHJjKTtcXG4gXFx0XFx0XFx0dm5pYy1cXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gaTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHR9XFxuQEAgLTIyNjcsNiArMjI3MCw0OCBAQCBzdGF0aWMgaW50IGJuZ2VfY2ZnX2RlZl92bmljKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4rc3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuK3tcXG4rXFx0c3RydWN0IGJuZ2VfbmV0ICpibiA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYztcXG4rXFx0Ym9vbCBtY191cGRhdGUgPSBmYWxzZTtcXG4rXFx0Ym9vbCB1Y191cGRhdGU7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChCTkdFX1NUQVRFX09QRU4sIFxcdTAwMjZibi1cXHUwMDNlYmQtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2bmljID0gXFx1MDAyNmJuLVxcdTAwM2V2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdO1xcbitcXHRtYXNrID0gdm5pYy1cXHUwMDNlcnhfbWFzaztcXG4rXFx0bWFzayBcXHUwMDI2PSB+KENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUyB8XFxuK1xcdFxcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHxcXG4rXFx0XFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcXG4rXFx0XFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQkNBU1QpO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQylcXG4rXFx0XFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XFxuK1xcbitcXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibiwgdWMpO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQlJPQURDQVNUKVxcbitcXHRcXHRtYXNrIHw9IENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19CQ0FTVDtcXG4rXFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0XFx0bWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xcbitcXHRcXHR2bmljLVxcdTAwM2VtY19saXN0X2NvdW50ID0gMDtcXG4rXFx0fSBlbHNlIGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01VTFRJQ0FTVCkge1xcbitcXHRcXHRtY191cGRhdGUgPSBibmdlX21jX2xpc3RfdXBkYXRlZChibiwgXFx1MDAyNm1hc2ssIG1jKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1hc2sgIT0gdm5pYy1cXHUwMDNlcnhfbWFzayB8fCB1Y191cGRhdGUgfHwgbWNfdXBkYXRlKSB7XFxuK1xcdFxcdHZuaWMtXFx1MDAzZXJ4X21hc2sgPSBtYXNrO1xcbitcXHRcXHRyZXR1cm4gYm5nZV9jZmdfcnhfbW9kZShibiwgdWMsIHVjX3VwZGF0ZSwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibmdlX2Rpc2FibGVfaW50KHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIHtcXG4gXFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVxcdTAwM2ViZDtcXG5AQCAtMjY5NSwxMyArMjc0MCwxNyBAQCBzdGF0aWMgaW50IGJuZ2VfaW5pdF9jaGlwKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdH0gZWxzZSBpZiAoYm4tXFx1MDAzZW5ldGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XFxuIFxcdFxcdHUzMiBtYXNrID0gMDtcXG4gXFxuLVxcdFxcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcXHUwMDI2bWFzaywgXFx1MDAyNmJuLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW1jKTtcXG4gXFx0XFx0dm5pYy1cXHUwMDNlcnhfbWFzayB8PSBtYXNrO1xcbiBcXHR9XFxuIFxcbi1cXHRyYyA9IGJuZ2VfY2ZnX2RlZl92bmljKGJuKTtcXG4tXFx0aWYgKHJjKVxcbitcXHRyYyA9IGJuZ2VfY2ZnX3J4X21vZGUoYm4sIFxcdTAwMjZibi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2V1YywgdHJ1ZSwgZmFsc2UpO1xcbitcXHRpZiAocmMgPT0gLUVBR0FJTikge1xcbitcXHRcXHRuZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRcXHRyYyA9IDA7XFxuK1xcdH0gZWxzZSBpZiAocmMpIHtcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX291dDpcXG5AQCAtMjgxMyw2ICsyODYyLDI0IEBAIHN0YXRpYyB2b2lkIGJuZ2VfdHhfZW5hYmxlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oYm4tXFx1MDAzZW5ldGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYm5nZV9od3JtX2lmX2NoYW5nZShzdHJ1Y3QgYm5nZV9kZXYgKmJkLCBib29sIHVwKVxcbit7XFxuK1xcdHN0cnVjdCBod3JtX2Z1bmNfZHJ2X2lmX2NoYW5nZV9pbnB1dCAqcmVxO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIShiZC1cXHUwMDNlZndfY2FwIFxcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aWYgKHVwKVxcbitcXHRcXHRyZXEtXFx1MDAzZWZsYWdzID0gY3B1X3RvX2xlMzIoRlVOQ19EUlZfSUZfQ0hBTkdFX1JFUV9GTEFHU19VUCk7XFxuK1xcbitcXHRyZXR1cm4gYm5nZV9od3JtX3JlcV9zZW5kKGJkLCByZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIHtcXG4gXFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVxcdTAwM2ViZDtcXG5AQCAtMjgyMCwxNiArMjg4NywyMiBAQCBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXFxuIFxcbiBcXHRuZXRpZl9jYXJyaWVyX29mZihibi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuK1xcdHJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRuZXRkZXZfZXJyKGJuLVxcdTAwM2VuZXRkZXYsIFxcXCJibmdlX2h3cm1faWZfY2hhbmdlIGVycjogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyYyA9IGJuZ2VfcmVzZXJ2ZV9yaW5ncyhiZCk7XFxuIFxcdGlmIChyYykge1xcbiBcXHRcXHRuZXRkZXZfZXJyKGJuLVxcdTAwM2VuZXRkZXYsIFxcXCJibmdlX3Jlc2VydmVfcmluZ3MgZXJyOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdGdvdG8gZXJyX2lmX2NoYW5nZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBibmdlX2FsbG9jX2NvcmUoYm4pO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2Vycihibi1cXHUwMDNlbmV0ZGV2LCBcXFwiYm5nZV9hbGxvY19jb3JlIGVycjogJWRcXFxcblxcXCIsIHJjKTtcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIGVycl9pZl9jaGFuZ2U7XFxuIFxcdH1cXG4gXFxuIFxcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcXG5AQCAtMjg3Niw2ICsyOTQ5LDggQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxcbiBlcnJfZGVsX25hcGk6XFxuIFxcdGJuZ2VfZGVsX25hcGkoYm4pO1xcbiBcXHRibmdlX2ZyZWVfY29yZShibik7XFxuK2Vycl9pZl9jaGFuZ2U6XFxuK1xcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbkBAIC0zMTA2LDYgKzMxODEsNyBAQCBzdGF0aWMgaW50IGJuZ2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGJuZ2VfY2xvc2VfY29yZShibik7XFxuIFxcdGJuZ2VfaHdybV9zaHV0ZG93bl9saW5rKGJuLVxcdTAwM2ViZCk7XFxuK1xcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYm4tXFx1MDAzZWJkLCBmYWxzZSk7XFxuIFxcdGJuLVxcdTAwM2VzcF9ldmVudCA9IDA7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzE5NSw2ICszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcFxcdFxcdD0gYm5nZV9jbG9zZSxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBibmdlX3N0YXJ0X3htaXQsXFxuIFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGJuZ2VfZ2V0X3N0YXRzNjQsXFxuK1xcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fZmVhdHVyZXNfY2hlY2tcXHQ9IGJuZ2VfZmVhdHVyZXNfY2hlY2ssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcXG5pbmRleCBkMTc3OTE5YzJlMTE3MC4uYTFhOTM5NDk2ZWJkM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXFxuQEAgLTI3NSw2ICsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcge1xcbiBcXHRCTkdFX0ZMQUdfUE9SVF9TVEFUU19FWFRcXHQ9IEJJVCgxKSxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVxcdDEwXFxuK1xcbiBlbnVtIGJuZ2Vfc3BfZXZlbnQge1xcbiBcXHRCTkdFX0xJTktfQ0hOR19TUF9FVkVOVCxcXG4gXFx0Qk5HRV9MSU5LX1NQRUVEX0NITkdfU1BfRVZFTlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM3OjUzLjUyNDg0NTU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0OTkwNzU2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyYmJkZTA3Zjg3MmE3YjMzOTJkZWFiYmE4ZGE4OGU0NTUxYjY5OGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDozNzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG5pbmRleCA2OGI3NGViMmMzYTI5YS4uOTg0NmQyOWI0ZmUzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYm5nZS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfZGV2bGluay5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybV9saWIuaFwiXG4gI2luY2x1ZGUgXCJibmdlX2xpbmsuaFwiXG4rI2luY2x1ZGUgXCJibmdlX3Jlc2MuaFwiXG4gXG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9TVU1NQVJZKTtcbkBAIC00MDYsMTIgKzQwOCwzNCBAQCBzdGF0aWMgdm9pZCBibmdlX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gc3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4rXHRzdHJ1Y3QgYm5nZV9kZXYgKmJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcbitcdGRldiA9IGJkID8gYmQtXHUwMDNlbmV0ZGV2IDogTlVMTDtcbitcdGlmICghZGV2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrKGRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRuZXRpZl9jbG9zZShkZXYpO1xuK1xuK1x0aWYgKGJuZ2VfaHdybV9mdW5jX2Rydl91bnJndHIoYmQpKSB7XG4rXHRcdHBjaWVfZmxyKHBkZXYpO1xuK1x0XHRnb3RvIHNodXRkb3duX2V4aXQ7XG4rXHR9XG4rXHRibmdlX2ZyZWVfaXJxcyhiZCk7XG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gXG4gXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpIHtcbiBcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCAwKTtcbiBcdFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xuIFx0fVxuK1xuK3NodXRkb3duX2V4aXQ6XG4rXHRuZXRkZXZfdW5sb2NrKGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm5nZV9kcml2ZXIgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jXG5pbmRleCA2ZjdlZjUwNmQ0ZTE4Yy4uMjIwYmRjY2VkMGRiOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYm5nZS5oXCJcbisjaW5jbHVkZSBcImJuZ2VfaHdybS5oXCJcbiAjaW5jbHVkZSBcImJuZ2VfaHdybV9saWIuaFwiXG4gI2luY2x1ZGUgXCJibmdlX2V0aHRvb2wuaFwiXG4gI2luY2x1ZGUgXCJibmdlX3JtZW0uaFwiXG5AQCAtMjE0NCwxNiArMjE0NSwxNiBAQCBzdGF0aWMgaW50IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoc3RydWN0IGJuZ2VfbmV0ICpibiwgdTE2IHZuaWNfaWQsIHUxNiBpZHgsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGJuZ2VfbWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sIHUzMiAqcnhfbWFzaylcbitzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2ssXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBtY19jb3VudCA9IDAsIG9mZiA9IDA7XG4gXHRib29sIHVwZGF0ZSA9IGZhbHNlO1xuIFx0dTggKmhhZGRyO1xuIFxuLVx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuK1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpIHtcbiBcdFx0aWYgKG1jX2NvdW50IFx1MDAzZT0gQk5HRV9NQVhfTUNfQUREUlMpIHtcbiBcdFx0XHQqcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUO1xuIFx0XHRcdHZuaWMtXHUwMDNlbWNfbGlzdF9jb3VudCA9IDA7XG5AQCAtMjE3NywxNyArMjE3OCwxNyBAQCBzdGF0aWMgYm9vbCBibmdlX21jX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuLCB1MzIgKnJ4X21hc2spXG4gXHRyZXR1cm4gdXBkYXRlO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBibmdlX3VjX2xpc3RfdXBkYXRlZChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuK3N0YXRpYyBib29sIGJuZ2VfdWNfbGlzdF91cGRhdGVkKHN0cnVjdCBibmdlX25ldCAqYm4sXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBvZmYgPSAwO1xuIFxuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuK1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpICE9ICh2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCAtIDEpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHtcbitcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4gXHRcdGlmICghZXRoZXJfYWRkcl9lcXVhbChoYS1cdTAwM2VhZGRyLCB2bmljLVx1MDAzZXVjX2xpc3QgKyBvZmYpKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTIyMDEsMTggKzIyMDIsMTQgQEAgc3RhdGljIGJvb2wgYm5nZV9wcm9taXNjX29rKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBibmdlX2NmZ19kZWZfdm5pYyhzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuK3N0YXRpYyBpbnQgYm5nZV9jZmdfcnhfbW9kZShzdHJ1Y3QgYm5nZV9uZXQgKmJuLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4rXHRcdFx0ICAgIGJvb2wgdWNfdXBkYXRlLCBib29sIHNuYXBzaG90KVxuIHtcbiBcdHN0cnVjdCBibmdlX3ZuaWNfaW5mbyAqdm5pYyA9IFx1MDAyNmJuLVx1MDAzZXZuaWNfaW5mb1tCTkdFX1ZOSUNfREVGQVVMVF07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYm4tXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiBcdGludCBpLCBvZmYgPSAwLCByYztcbi1cdGJvb2wgdWNfdXBkYXRlO1xuLVxuLVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4tXHR1Y191cGRhdGUgPSBibmdlX3VjX2xpc3RfdXBkYXRlZChibik7XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIFxuIFx0aWYgKCF1Y191cGRhdGUpXG4gXHRcdGdvdG8gc2tpcF91YztcbkBAIC0yMjI2LDIyICsyMjIzLDI4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcbiBcdHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50ID0gMTtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLVx0aWYgKG5ldGRldl91Y19jb3VudChkZXYpIFx1MDAzZSAoQk5HRV9NQVhfVUNfQUREUlMgLSAxKSkge1xuK1x0aWYgKCFzbmFwc2hvdClcbitcdFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRpZiAobmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudCh1YykgXHUwMDNlIChCTkdFX01BWF9VQ19BRERSUyAtIDEpKSB7XG4gXHRcdHZuaWMtXHUwMDNlcnhfbWFzayB8PSBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7XG4gXHR9IGVsc2Uge1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4gXHRcdFx0bWVtY3B5KHZuaWMtXHUwMDNldWNfbGlzdCArIG9mZiwgaGEtXHUwMDNlYWRkciwgRVRIX0FMRU4pO1xuIFx0XHRcdG9mZiArPSBFVEhfQUxFTjtcbiBcdFx0XHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCsrO1xuIFx0XHR9XG4gXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuK1x0aWYgKCFzbmFwc2hvdClcbitcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbiBcbiBcdGZvciAoaSA9IDEsIG9mZiA9IDA7IGkgXHUwMDNjIHZuaWMtXHUwMDNldWNfZmlsdGVyX2NvdW50OyBpKyssIG9mZiArPSBFVEhfQUxFTikge1xuIFx0XHRyYyA9IGJuZ2VfaHdybV9zZXRfdm5pY19maWx0ZXIoYm4sIDAsIGksIHZuaWMtXHUwMDNldWNfbGlzdCArIG9mZik7XG4gXHRcdGlmIChyYykge1xuLVx0XHRcdG5ldGRldl9lcnIoZGV2LCBcIkhXUk0gdm5pYyBmaWx0ZXIgZmFpbHVyZSByYzogJWRcXG5cIiwgcmMpO1xuK1x0XHRcdGlmIChyYyA9PSAtRUFHQUlOKVxuK1x0XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcIkZXIGJ1c3kgd2hpbGUgc2V0dGluZyB2bmljIGZpbHRlciwgd2lsbCByZXRyeVxcblwiKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgIHJjKTtcbiBcdFx0XHR2bmljLVx1MDAzZXVjX2ZpbHRlcl9jb3VudCA9IGk7XG4gXHRcdFx0cmV0dXJuIHJjO1xuIFx0XHR9XG5AQCAtMjI2Nyw2ICsyMjcwLDQ4IEBAIHN0YXRpYyBpbnQgYm5nZV9jZmdfZGVmX3ZuaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdHJldHVybiByYztcbiB9XG4gXG4rc3RhdGljIGludCBibmdlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuK3tcbitcdHN0cnVjdCBibmdlX25ldCAqYm4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGJuZ2Vfdm5pY19pbmZvICp2bmljO1xuK1x0Ym9vbCBtY191cGRhdGUgPSBmYWxzZTtcbitcdGJvb2wgdWNfdXBkYXRlO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRpZiAoIXRlc3RfYml0KEJOR0VfU1RBVEVfT1BFTiwgXHUwMDI2Ym4tXHUwMDNlYmQtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZuaWMgPSBcdTAwMjZibi1cdTAwM2V2bmljX2luZm9bQk5HRV9WTklDX0RFRkFVTFRdO1xuK1x0bWFzayA9IHZuaWMtXHUwMDNlcnhfbWFzaztcbitcdG1hc2sgXHUwMDI2PSB+KENGQV9MMl9TRVRfUlhfTUFTS19SRVFfTUFTS19QUk9NSVNDVU9VUyB8XG4rXHRcdCAgQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX01DQVNUIHxcbitcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQUxMX01DQVNUIHxcbitcdFx0ICBDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfQkNBU1QpO1xuK1xuK1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX1BST01JU0NVT1VTO1xuK1xuK1x0dWNfdXBkYXRlID0gYm5nZV91Y19saXN0X3VwZGF0ZWQoYm4sIHVjKTtcbitcbitcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CUk9BRENBU1QpXG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0JDQVNUO1xuK1x0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4rXHRcdG1hc2sgfD0gQ0ZBX0wyX1NFVF9SWF9NQVNLX1JFUV9NQVNLX0FMTF9NQ0FTVDtcbitcdFx0dm5pYy1cdTAwM2VtY19saXN0X2NvdW50ID0gMDtcbitcdH0gZWxzZSBpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XG4rXHRcdG1jX3VwZGF0ZSA9IGJuZ2VfbWNfbGlzdF91cGRhdGVkKGJuLCBcdTAwMjZtYXNrLCBtYyk7XG4rXHR9XG4rXG4rXHRpZiAobWFzayAhPSB2bmljLVx1MDAzZXJ4X21hc2sgfHwgdWNfdXBkYXRlIHx8IG1jX3VwZGF0ZSkge1xuK1x0XHR2bmljLVx1MDAzZXJ4X21hc2sgPSBtYXNrO1xuK1x0XHRyZXR1cm4gYm5nZV9jZmdfcnhfbW9kZShibiwgdWMsIHVjX3VwZGF0ZSwgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHZvaWQgYm5nZV9kaXNhYmxlX2ludChzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIHtcbiBcdHN0cnVjdCBibmdlX2RldiAqYmQgPSBibi1cdTAwM2ViZDtcbkBAIC0yNjk1LDEzICsyNzQwLDE3IEBAIHN0YXRpYyBpbnQgYm5nZV9pbml0X2NoaXAoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdH0gZWxzZSBpZiAoYm4tXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSB7XG4gXHRcdHUzMiBtYXNrID0gMDtcbiBcbi1cdFx0Ym5nZV9tY19saXN0X3VwZGF0ZWQoYm4sIFx1MDAyNm1hc2spO1xuK1x0XHRibmdlX21jX2xpc3RfdXBkYXRlZChibiwgXHUwMDI2bWFzaywgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZW1jKTtcbiBcdFx0dm5pYy1cdTAwM2VyeF9tYXNrIHw9IG1hc2s7XG4gXHR9XG4gXG4tXHRyYyA9IGJuZ2VfY2ZnX2RlZl92bmljKGJuKTtcbi1cdGlmIChyYylcbitcdHJjID0gYm5nZV9jZmdfcnhfbW9kZShibiwgXHUwMDI2Ym4tXHUwMDNlbmV0ZGV2LVx1MDAzZXVjLCB0cnVlLCBmYWxzZSk7XG4rXHRpZiAocmMgPT0gLUVBR0FJTikge1xuK1x0XHRuZXRpZl9yeF9tb2RlX3NjaGVkdWxlX3JldHJ5KGJuLVx1MDAzZW5ldGRldik7XG4rXHRcdHJjID0gMDtcbitcdH0gZWxzZSBpZiAocmMpIHtcbiBcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbkBAIC0yODEzLDYgKzI4NjIsMjQgQEAgc3RhdGljIHZvaWQgYm5nZV90eF9lbmFibGUoc3RydWN0IGJuZ2VfbmV0ICpibilcbiBcdFx0bmV0aWZfY2Fycmllcl9vbihibi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbitzdGF0aWMgaW50IGJuZ2VfaHdybV9pZl9jaGFuZ2Uoc3RydWN0IGJuZ2VfZGV2ICpiZCwgYm9vbCB1cClcbit7XG4rXHRzdHJ1Y3QgaHdybV9mdW5jX2Rydl9pZl9jaGFuZ2VfaW5wdXQgKnJlcTtcbitcdGludCByYztcbitcbitcdGlmICghKGJkLVx1MDAzZWZ3X2NhcCBcdTAwMjYgQk5HRV9GV19DQVBfSUZfQ0hBTkdFKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyYyA9IGJuZ2VfaHdybV9yZXFfaW5pdChiZCwgcmVxLCBIV1JNX0ZVTkNfRFJWX0lGX0NIQU5HRSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGlmICh1cClcbitcdFx0cmVxLVx1MDAzZWZsYWdzID0gY3B1X3RvX2xlMzIoRlVOQ19EUlZfSUZfQ0hBTkdFX1JFUV9GTEFHU19VUCk7XG4rXG4rXHRyZXR1cm4gYm5nZV9od3JtX3JlcV9zZW5kKGJkLCByZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4ge1xuIFx0c3RydWN0IGJuZ2VfZGV2ICpiZCA9IGJuLVx1MDAzZWJkO1xuQEAgLTI4MjAsMTYgKzI4ODcsMjIgQEAgc3RhdGljIGludCBibmdlX29wZW5fY29yZShzdHJ1Y3QgYm5nZV9uZXQgKmJuKVxuIFxuIFx0bmV0aWZfY2Fycmllcl9vZmYoYm4tXHUwMDNlbmV0ZGV2KTtcbiBcbitcdHJjID0gYm5nZV9od3JtX2lmX2NoYW5nZShiZCwgdHJ1ZSk7XG4rXHRpZiAocmMpIHtcbitcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwiYm5nZV9od3JtX2lmX2NoYW5nZSBlcnI6ICVkXFxuXCIsIHJjKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0cmMgPSBibmdlX3Jlc2VydmVfcmluZ3MoYmQpO1xuIFx0aWYgKHJjKSB7XG4gXHRcdG5ldGRldl9lcnIoYm4tXHUwMDNlbmV0ZGV2LCBcImJuZ2VfcmVzZXJ2ZV9yaW5ncyBlcnI6ICVkXFxuXCIsIHJjKTtcbi1cdFx0cmV0dXJuIHJjO1xuK1x0XHRnb3RvIGVycl9pZl9jaGFuZ2U7XG4gXHR9XG4gXG4gXHRyYyA9IGJuZ2VfYWxsb2NfY29yZShibik7XG4gXHRpZiAocmMpIHtcbiBcdFx0bmV0ZGV2X2Vycihibi1cdTAwM2VuZXRkZXYsIFwiYm5nZV9hbGxvY19jb3JlIGVycjogJWRcXG5cIiwgcmMpO1xuLVx0XHRyZXR1cm4gcmM7XG4rXHRcdGdvdG8gZXJyX2lmX2NoYW5nZTtcbiBcdH1cbiBcbiBcdGJuZ2VfaW5pdF9uYXBpKGJuKTtcbkBAIC0yODc2LDYgKzI5NDksOCBAQCBzdGF0aWMgaW50IGJuZ2Vfb3Blbl9jb3JlKHN0cnVjdCBibmdlX25ldCAqYm4pXG4gZXJyX2RlbF9uYXBpOlxuIFx0Ym5nZV9kZWxfbmFwaShibik7XG4gXHRibmdlX2ZyZWVfY29yZShibik7XG4rZXJyX2lmX2NoYW5nZTpcbitcdGJuZ2VfaHdybV9pZl9jaGFuZ2UoYmQsIGZhbHNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG5AQCAtMzEwNiw2ICszMTgxLDcgQEAgc3RhdGljIGludCBibmdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRibmdlX2Nsb3NlX2NvcmUoYm4pO1xuIFx0Ym5nZV9od3JtX3NodXRkb3duX2xpbmsoYm4tXHUwMDNlYmQpO1xuK1x0Ym5nZV9od3JtX2lmX2NoYW5nZShibi1cdTAwM2ViZCwgZmFsc2UpO1xuIFx0Ym4tXHUwMDNlc3BfZXZlbnQgPSAwO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzE5NSw2ICszMjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBibmdlX2Nsb3NlLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYm5nZV9zdGFydF94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuK1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibmdlX3NldF9yeF9tb2RlLFxuIFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBibmdlX2ZlYXR1cmVzX2NoZWNrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oXG5pbmRleCBkMTc3OTE5YzJlMTE3MC4uYTFhOTM5NDk2ZWJkM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuaFxuQEAgLTI3NSw2ICsyNzUsOCBAQCBlbnVtIGJuZ2VfbmV0X2ZsYWcge1xuIFx0Qk5HRV9GTEFHX1BPUlRfU1RBVFNfRVhUXHQ9IEJJVCgxKSxcbiB9O1xuIFxuKyNkZWZpbmUgQk5HRV9GV19JRl9SRVRSWVx0MTBcbitcbiBlbnVtIGJuZ2Vfc3BfZXZlbnQge1xuIFx0Qk5HRV9MSU5LX0NITkdfU1BfRVZFTlQsXG4gXHRCTkdFX0xJTktfU1BFRURfQ0hOR19TUF9FVkVOVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM3OjUzLjUyNDg0ODIwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODIxMzcyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYGJuZ2VgIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHRhcmdldGluZyB0aGUgYGJuZ2VgIGRyaXZlci4gSG1tLCBgYm5nZWAuLi4gaXMgdGhhdCBCcm9hZGNvbSBOZXRYdHJlbWUtRSBvciBzb21ldGhpbmcgc2ltaWxhcj8gQWN0dWFsbHksIHRoZSBuYW1lIHNvdW5kcyBtb3JlIGxpa2UgQnJvYWRjb20gTmV4dCBHZW5lcmF0aW9uIEV0aGVybmV0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgKnJlYWwqIGRyaXZlciBhbmQgbm90IHNvbWUgaW50ZXJuYWwgbmFtZS4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGxhdGVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBibmdlX2NvcmUuY2AgYW5kIGBibmdlX25ldGRldi5jYCwgc28gaXQgc2VlbXMgdG8gYmUgaW1wYWN0aW5nIGJvdGggY29yZSBmdW5jdGlvbmFsaXR5IGFuZCBuZXR3b3JrIGRldmljZSBpbnRlcmFjdGlvbiwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYSBOSUMgZHJpdmVyLlxuXG5JbiBgYm5nZV9jb3JlLmNgLCB0aGUgY2hhbmdlcyB0byBgYm5nZV9zaHV0ZG93bmAgYXJlIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYmVpbmcgKnZlcnkqIGNhcmVmdWwgd2l0aCBsb2NraW5nIG5vdywgdGFraW5nIGBydG5sX2xvY2soKWAgYW5kIGBuZXRkZXZfbG9jaygpYCBiZWZvcmUgcHJvY2VlZGluZy4gU2VlbXMgbG9naWNhbCBmb3IgYSBzaHV0ZG93biBwcm9jZWR1cmUuIEl0IGNsb3NlcyB0aGUgZGV2aWNlIGlmIGl0J3MgcnVubmluZywgdW5yZWdpc3RlcnMgdGhlIGZ1bmN0aW9uIGRyaXZlciwgaXNzdWVzIGEgUENJZSBGTFIgKHRoYXQncyBnb29kLCBhIGNsZWFuIHJlc2V0IGlzIG9mdGVuIGhlbHBmdWwpLCBhbmQgZmluYWxseSBmcmVlcyB1cCB0aGUgSVJRcy4gVGhhdCdzIGEgcHJldHR5IHRob3JvdWdoIHNodXRkb3duIHNlcXVlbmNlLCB3aGljaCBzdWdnZXN0cyBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggc29tZSB0cmlja3kgaGFyZHdhcmUgaXNzdWVzIHByZXZpb3VzbHksIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuIGluIGBibmdlX25ldGRldi5jYCwgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gbXVsdGljYXN0IGFuZCB1bmljYXN0IGxpc3QgdXBkYXRlIGZ1bmN0aW9uczogYGJuZ2VfbWNfbGlzdF91cGRhdGVkYCBhbmQgYGJuZ2VfdWNfbGlzdF91cGRhdGVkYC4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSB1c2Ugb2YgYSBgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmAgaW5zdGVhZCBvZiBmZXRjaGluZyB0aGUgYWRkcmVzcyBsaXN0IGZyb20gYGJuLVx1MDAzZW5ldGRldmAuIFRoYXQncyBhIGdvb2QgY2hhbmdlLCBhcyBpdCBkZWNvdXBsZXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIG5ldGRldiwgbWFraW5nIGl0IG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IHJldXNhYmxlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1vcmUgcm9idXN0IGNvZGUsIGluIHRoZSBldmVudCBvZiBhbiBpbnRlcnJ1cHRpb24gdGhhdCB3b3VsZCBjYXVzZSBhIHJlLWV2YWx1YXRpb24gb2YgdGhlIGRhdGEuXG5cbkFsc28sIGBibmdlX2NmZ19yeF9tb2RlYCBpcyByZXBsYWNpbmcgYGJuZ2VfY2ZnX2RlZl92bmljYCwgYW5kIGBibmdlX3NldF9yeF9tb2RlYCBpcyBhZGRlZCwgbm93IGJlaW5nIGhvb2tlZCB1cCB0byBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYC4gTmljZSwgdGhhdCdzIG1vdmluZyB0byBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLiBJbXBsZW1lbnRpbmcgYSBtb3JlIG9wdGltaXplZCBhbmQgZWZmaWNpZW50IHNldHVwIHNob3VsZCBhbGxvdyBmb3IgcGVyZm9ybWFuY2UgaW5jcmVhc2VzLlxuXG5GaW5hbGx5LCBgYm5nZV9od3JtX2lmX2NoYW5nZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCBpdCBzZWVtcyB0byBiZSBjYWxsZWQgaW4gYGJuZ2Vfb3Blbl9jb3JlYCBhbmQgYGJuZ2VfY2xvc2VgLiBUaGF0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGludGVyZmFjZSBjaGFuZ2VzIGJhc2VkIG9uIHRoZSBkZXZpY2UncyBvcGVuL2Nsb3NlIHN0YXRlLiBJdCdzIGxpa2VseSBoYW5kbGluZyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIHJlY29uZmlndXJhdGlvbiBvciBtYXliZSBldmVuIHBvd2VyIG1hbmFnZW1lbnQtcmVsYXRlZCBzdHVmZi5cblxuUmlnaHQgbm93LCB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGJuZ2VgIGlzIGV2ZW4gYSB2YWxpZCBkcml2ZXIgaW4gdGhlIGtlcm5lbCBJJ20gd29ya2luZyB3aXRoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbGwgY2hlY2suIElmIHRoaXMgaXMgc29tZSBpbi1ob3VzZSBkcml2ZXIsIG9yIGEgY3VzdG9tIGJ1aWxkLCB0aGVuIHRoZSBlbnRpcmUgYXBwcm9hY2ggd2lsbCBiZSBkaWZmZXJlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODowMC4yMDY5ODc5MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MTExNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibmdlX3NodXRkb3duXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MzgyPXN0YXRpYyB2b2lkIGJuZ2VfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDA5OnN0YXRpYyB2b2lkIGJuZ2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz00NDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJuZ2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy00NDUtXFx0LnJlbW92ZVxcdFxcdD0gYm5nZV9yZW1vdmVfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDQ2OlxcdC5zaHV0ZG93blxcdD0gYm5nZV9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ0Ny19O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTI5NTc9c3RhdGljIGludCBibmdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0yOTY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzoyOTY5OnN0YXRpYyBpbnQgYm5nZV9zaHV0ZG93bl9uaWMoc3RydWN0IGJuZ2VfbmV0ICpibilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMjk3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM9MzE1Mz1zdGF0aWMgdm9pZCBibmdlX2Nsb3NlX2NvcmUoc3RydWN0IGJuZ2VfbmV0ICpibilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zMTYxLVxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZibi1cXHUwMDNldGltZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMTYyOlxcdGJuZ2Vfc2h1dGRvd25fbmljKGJuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzE2My1cXHRibmdlX2Rpc2FibGVfbmFwaShibik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM4OjA1LjY5ODExMDU2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTE2Njc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGJuZ2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEkgc2VlIGBibmdlYCBsaXN0ZWQgYXMgYSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2AuIE15IGZpcnN0IHRob3VnaHQgaXMsIGhhbmcgb24gYSBtaW51dGUuLi5pcyB0aGlzIGEgbGVnaXRpbWF0ZSwgcmVhbC13b3JsZCBkcml2ZXIsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0J3MgYmVlbiBjcmVhdGVkIGZvciBzeXprYWxsZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCcm9hZGNvbSBuZXR3b3JrIGFkYXB0ZXJzLCBteSBpbnN0aW5jdCBzYXlzIHRoYXQgTmV0WHRyZW1lLUUgY2FyZHMgdHlwaWNhbGx5IHVzZSB0aGUgYGJueHRgIGRyaXZlci4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBgYm5nZWAgcmVwcmVzZW50cyBhIHRydWUgaGFyZHdhcmUgZHJpdmVyIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MDguOTA5NzgzMjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyMTc5MzI0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibmdlX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaC0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaDoyMDpleHRlcm4gY2hhciBibmdlX2RyaXZlcl9uYW1lW107XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTE4PU1PRFVMRV9ERVNDUklQVElPTihEUlZfU1VNTUFSWSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjIwOmNoYXIgYm5nZV9kcml2ZXJfbmFtZVtdID0gRFJWX05BTUU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0yMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MTg4PXN0YXRpYyBpbnQgYm5nZV9wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYy0yMDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzoyMDU6XFx0cmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGJuZ2VfZHJpdmVyX25hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjA2LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYz00MDk9c3RhdGljIHZvaWQgYm5nZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6NDQxOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBibmdlX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ0MjpcXHQubmFtZVxcdFxcdD0gYm5nZV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ0My1cXHQuaWRfdGFibGVcXHQ9IGJuZ2VfcGNpX3RibCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9NDQ5PXN0YXRpYyBpbnQgX19pbml0IGJuZ2VfaW5pdF9tb2R1bGUodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1MC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2NvcmUuYzo0NTE6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmJuZ2VfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jPTQ1NT1zdGF0aWMgdm9pZCBfX2V4aXQgYm5nZV9leGl0X21vZHVsZSh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtNDU2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jOjQ1NzpcXHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmJuZ2VfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTQ1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjM4OjEyLjgzMTU4MzMzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI3MTYzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgYGJuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgYm5nZWAgS2NvbmZpZyBlbnRyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgdHlwaWNhbCB0aGluZ3M6IElzIGl0IGEgdHJpc3RhdGU/IFdoYXQgYXJlIGl0cyBkZWZhdWx0IHZhbHVlcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXRzIGF2YWlsYWJpbGl0eSwgb3IgdGhhdCAqc2hvdWxkKiBiZSBpbXBhY3RpbmcgaXQ/IEnigJlsbCBuZWVkIHRvIHF1aWNrbHkgZGlzY2VybiB0aGUgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBzZWxlY3Rpb25zIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlIGRlc2lyZWQgYnVpbGQuIEknbSBnb2luZyB0byBzY2FuIGZvciB0aGUgdHlwaWNhbCBzdHVmZiwgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZmVhdHVyZSBmbGFncywgZHJpdmVyIG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG1vZHVsZSB3aWxsIGJlIGluY2x1ZGVkIGFzIHRoZSB1c2VyIGlzIGV4cGVjdGluZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgbWF0Y2hlcyB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgdGhhdCBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgdGhlIGNvZGUgSSdtIGxvb2tpbmcgZm9yIGlzIHdoYXQgaXMgc2VsZWN0ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MTUuODk0MzAyMDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTQ5MzU5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJOR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTA9Y29uZmlnIEJOWFRfSFdNT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjU4OmNvbmZpZyBCTkdFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MjEuMDg5MjQ4OTM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNzUyNzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQnJvYWRjb20gVGhvclVsdHJhIEV0aGVybmV0IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwiLi4uIHRoYXQgaW1tZWRpYXRlbHkgc291bmRzIGxpa2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIHBoeXNpY2FsIHBpZWNlIG9mIGhhcmR3YXJlLCBhIFBDSWUgY2FyZCwgYSBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyLCBvciBOSUMsIGZyb20gQnJvYWRjb20uIFRoZSBuYW1lIFwiVGhvclVsdHJhXCIgcmVhbGx5IGxlYW5zIGludG8gdGhlIGlkZWEgb2YgYSBoaWdoLXBlcmZvcm1hbmNlLCBwZXJoYXBzIGV2ZW4gYSBzZXJ2ZXItY2xhc3MsIEV0aGVybmV0IGFkYXB0ZXIuIEJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoaXMgc3VwcG9ydCBpcyBzdHJ1Y3R1cmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyB0aWVkIHRvIHRoaXMgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODoyNC4zMDY3NzkyMDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njg0MzkyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVGhvclVsdHJhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjU4PWNvbmZpZyBCTkdFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTk6XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFRob3JVbHRyYSBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cXHRkZXBlbmRzIG9uIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjQtXFx0aGVscFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjY1OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjYtXFx0ICBFdGhlcm5ldCBjYXJkcy4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBibmdfZW4uIFRvIGNvbXBpbGUgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtNy0jZGVmaW5lIERSVl9OQU1FXFx0XFxcImJuZ19lblxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2UuaDo4OiNkZWZpbmUgRFJWX1NVTU1BUllcXHRcXFwiQnJvYWRjb20gVGhvclVsdHJhIE5JQyBFdGhlcm5ldCBEcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlLmgtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jLTI0LX0gYm9hcmRfaW5mb1tdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmM6MjU6XFx0W0JDTTU3NzA4XSA9IHsgXFxcIkJyb2FkY29tIEJDTTU3NzA4IFRob3JVbHRyYSA1MEdiLzEwMEdiLzIwMEdiLzQwMEdiLzgwMEdiIEV0aGVybmV0XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9jb3JlLmMtMjYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6Mzg6MjguOTc1MjI1MTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NDAzMzk1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBibmdlIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IHRoYXQgaWYgYSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUsIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5P1xuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBgYm5nZWAgaXMuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBibmdlYCByZWZlcnMgdG8gQnJvYWRjb20gVGhvclVsdHJhIDUwLzEwMC8yMDAvNDAwLzgwMCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLiBUaGVzZSBhcmUgaW5kZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNoZWNrZWQg4oCTIFFFTVUgKmRvZXMgbm90KiBlbXVsYXRlIGBibmdlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHB1dHMgaXQgaW4gdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJ1Y2tldC5cblxuTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnZvbHZlcyBgYm5nZV9zaHV0ZG93bmAsIGEgYC5zaHV0ZG93bmAgY2FsbGJhY2ssIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gZmxhZyB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAgYW5kIGAuc2h1dGRvd25gIGFzIHJlYXNvbnMgdG8gcmV0dXJuIGBmYWxzZWAuIEhvd2V2ZXIsIHRoZSBjb2RlIGFsc28gdG91Y2hlcyBgYm5nZV9uZXRkZXYuY2Agd2l0aCBhIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIGZ1bmN0aW9uLiBCdXQsIHRoZSBmYWN0IHRoYXQgdGhlIGVudGlyZSBkcml2ZXIgaXMgZm9yIGEgcGh5c2ljYWwgTklDIG91dHdlaWdocyB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbi5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGJuZ2VgICppcyogYSBwaHlzaWNhbCBOSUMuIFRoZSBkZXNjcmlwdGlvbiBjb25maXJtcyBcIkJyb2FkY29tIFRob3JVbHRyYSA1MC8xMDAvMjAwLzQwMC84MDAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkc1wiLiBJdCB1bmVxdWl2b2NhbGx5IGZhbGxzIHVuZGVyIHRoZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXRlZ29yeS5cblxuRmluYWxseSwgSSd2ZSBjaGVja2VkIHRoZSBkaWZmIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfY29yZS5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5oYC4gQWxsIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBibmdlYCBkcml2ZXIuIEl0J3Mgc2FmZSB0byBzYXkgdGhpcyBlbnRpcmUgcGF0Y2ggaXMgc3F1YXJlbHkgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGEgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIE5JQyBkcml2ZXIgbm90IGFtZW5hYmxlIHRvIGZ1enppbmcgaW4gYSB2aXJ0dWFsaXplZCBRRU1VIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIG15IGRlY2lzaW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGNsYXNzaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcwLCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDozODozOC41MTU1Njc2OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBUaG9yVWx0cmEgKGJuZ2UpIEV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgKDUwLzEwMC8yMDAvNDAwLzgwMCBHYnBzIE5JQ3MpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEJyb2FkY29tIFRob3JVbHRyYSAoYm5nZSkgRXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyAoNTAvMTAwLzIwMC80MDAvODAwIEdicHMgTklDcykgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBieSB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26p7[1] Phase: Running StartedAt: 2026-07-25 20:38:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26p7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 20:38:49 +0000 UTC FinishedAt: 2026-07-25 20:38:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}