Name: series-workflow8gxcv Phase: Failed StartedAt: 2026-07-22 13:36:15 +0000 UTC FinishedAt: 2026-07-22 13:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gxcv[0] Phase: Succeeded StartedAt: 2026-07-22 13:36:15 +0000 UTC FinishedAt: 2026-07-22 13:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gxcv[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 13:36:15 +0000 UTC FinishedAt: 2026-07-22 13:55:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIEl0IGFsc28gYWRkcyBhIEtVbml0IHRlc3QgZm9yIHRoZXNlIG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIHN0YXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMzo1NDo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiAmIzQzOzg0MjQsOCBAQCBjZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXG4gICogQHByaXZhY3k6IHByaXZhY3kgZmlsdGVyLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfcHJpdmFjeVxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXG4mIzQzOyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4mIzQzOyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyAmIzQzOzg0MzUsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLFxuIHtcbiBcdHJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCAgYnNzX3R5cGUsIHByaXZhY3ksXG4tXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcbiYjNDM7XHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjdmYjY3ODZhNWU4ZWIxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODg5LDkgJiM0MzsxMjg4OSwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzYsNiAmIzQzOzEzMDM4LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcbkBAIC0xMzA0NSw4ICYjNDM7MTMwNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuJiM0MztcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssIFwmIzM0O0JTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuIFxuIFx0YnNzaWQgPSBubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4gXG5AQCAtMTMwNTUsOCAmIzQzOzEzMDYwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0ZnJlcSAmIzQzOz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbiYjNDM7XHRpZiAoIWNoYW4pIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLCBcJiMzNDtpbnZhbGlkIG9yIGRpc2FibGVkIGNoYW5uZWxcJiMzNDspO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoYXNzb2NfbGlua19pZCBcdTAwM2U9IDApXG4gXHRcdHVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX01MRF9MSU5LO1xuQEAgLTEzMDY3LDcgJiM0MzsxMzA3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0XHRcdCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCB1c2VfZm9yKTtcbiYjNDM7XHRcdFx0XHQgdXNlX2ZvciwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKCFic3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFxuQEAgLTEzMTA2LDEzICYjNDM7MTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdGxpbmtzW2xpbmtfaWRdLmJzcyA9XG4tXHRcdFx0bmw4MDIxMV9hc3NvY19ic3MocmRldiwgc3NpZCwgc3NpZF9sZW4sIGF0dHJzLFxuJiM0MztcdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4gXHRcdFx0XHRcdCAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7XG4gXHRcdGlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcbiBcdFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPSBOVUxMO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmssXG4tXHRcdFx0XHRcdCAgICBcJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmtcJiMzNDspO1xuJiM0MztcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOCw4ICYjNDM7MTMzMzQsOCBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChyZXEubGlua19pZCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgaW5mby1cdTAwM2VhdHRycyxcbi1cdFx0XHRcdFx0ICAgIC0xLCAtMSk7XG4mIzQzO1x0XHRyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRycywgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbiBcdFx0YXBfYWRkciA9IHJlcS5ic3MtXHUwMDNlYnNzaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xNjA5LDEwICYjNDM7MTYwOSwxMiBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpXG4mIzQzO1x0XHRcdFx0XHR1MzIgdXNlX2ZvcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XG4gXHRpbnQgYnNzX3ByaXZhY3k7XG4gXG5AQCAtMTYzNCwyMiAmIzQzOzE2MzYsMzkgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXHUwMDNlcHViLmJzc2lkKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpXG4mIzQzO1x0XHRpZiAoIWlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovXG4gXHRcdGlmICh0aW1lX2FmdGVyKG5vdywgYnNzLVx1MDAzZXRzICYjNDM7IElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmJzcy1cdTAwM2Vob2xkKSlcbiYjNDM7XHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKSB7XG4mIzQzO1x0XHRcdGV4cGlyZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2Zvcikge1xuJiM0MztcdFx0XHR1bnVzYWJsZSA9IHRydWU7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkge1xuLVx0XHRcdHJlcyA9IGJzcztcbi1cdFx0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmVzID0gYnNzO1xuJiM0MztcdFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmRldi1cdTAwM2Vic3NfbG9jayk7XG4tXHRpZiAoIXJlcylcbiYjNDM7XHRpZiAoIXJlcykge1xuJiM0MztcdFx0aWYgKHVudXNhYmxlKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcJiMzNDspO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xuIFx0cmV0dXJuIFx1MDAyNnJlcy1cdTAwM2VwdWI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uZTYyYjAxZjhjYmU1YWMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5AQCAtNDAyLDYgJiM0Mzs0MDIsMTI1IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7XG4mIzQzO1x0XHQudGVzdCA9IHRlc3QsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gVF9XSVBIWSh0ZXN0LCBjdHgpO1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XG4mIzQzO1x0XHQuc2lnbmFsID0gNTAsXG4mIzQzO1x0XHQuZHJ2X2RhdGEgPSBcdTAwMjZjdHgsXG4mIzQzO1x0fTtcbiYjNDM7XHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcbiYjNDM7XHRjb25zdCB1OCBvdGhlcl9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4NjYsIDB4NTUsIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XG4mIzQzO1x0XHRbMF0gPSBXTEFOX0VJRF9TU0lELFxuJiM0MztcdFx0WzFdID0gNCxcbiYjNDM7XHRcdFsyXSA9ICYjMzk7VCYjMzk7LCAmIzM5O0UmIzM5OywgJiMzOTtTJiMzOTssICYjMzk7VCYjMzk7XG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCAqYnNzMiwgKmZvdW5kO1xuJiM0MztcbiYjNDM7XHRpbmZvcm1fYnNzLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfa2h6KHdpcGh5LCBNSFpfVE9fS0haKDI0MTIpKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcbiYjNDM7XG4mIzQzO1x0YnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuJiM0MztcdFx0XHRcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxuJiM0MztcdFx0XHRcdCAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XG4mIzQzO1x0aWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7XG4mIzQzO1xuJiM0MztcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0FTU0VSVF9QVFJfRVEodGVzdCwgZm91bmQsIGJzcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuJiM0MztcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFwmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdGJzcy1cdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XG4mIzQzO1xuJiM0MztcdC8qIEV4cGlyZWQgZW50cnksIFx1MDAzZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRpYnNzLVx1MDAzZXRzID0gamlmZmllcyAtIDYwICogSFo7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogQW4gZW50cnkgYm90aCBleHBpcmVkIGFuZCB1bnVzYWJsZSByZXBvcnRzIGV4cGlyZWQgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbiYjNDM7XG4mIzQzO1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAxKTtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIGJvdGggYW4gZXhwaXJlZCBlbnRyeSBhbmQgYSBmcmVzaC1idXQtdW51c2FibGUgZW50cnlcbiYjNDM7XHQgKiBtYXRjaGluZywgdGhlIHVudXNhYmxlIG9uZSBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlOiBhIGN1cnJlbnRcbiYjNDM7XHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRic3MyID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuJiM0MztcdFx0XHRcdFx0Q0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCxcbiYjNDM7XHRcdFx0XHRcdDAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzczIpO1xuJiM0MztcdGJzczItXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBOVUxMLCBcJiMzNDtURVNUXCYjMzQ7LCA0LFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuJiM0MztcdFx0XHRcdCAgICAgIDAsIE5VTEwpO1xuIFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2VzaWduYWwsIDApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcbkBAIC04NTUsNiAmIzQzOzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbiYjNDM7XHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxMzo1NDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IGI4ZTlmYmI4OWU2OTE2Li4xNWMwOGIyNDUwMmZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC04NDI0LDYgJiM0Mzs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUKICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfcHJpdmFjeQogICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWQKJiM0MzsgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBubwomIzQzOyAqCXVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTAogICoKICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLgogICovCkBAIC04NDMzLDcgJiM0Mzs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKTsKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogLyoqCiAgKiBjZmc4MDIxMV9nZXRfYnNzIC0gZ2V0IGEgQlNTIHJlZmVyZW5jZQpAQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogewogCXJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKIAkJCQkgIGJzc190eXBlLCBwcml2YWN5LAotCQkJCSAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpOwomIzQzOwkJCQkgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDI0MjA3MWFkMTBkNmM5Li43ZmI2Nzg2YTVlOGViMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMjg4OSw5ICYjNDM7MTI4ODksMTEgQEAgc3RhdGljIGludCBubDgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVxLmJzcyA9IGNmZzgwMjExX2dldF9ic3MoJmFtcDtyZGV2LSZndDt3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAotCQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsCi0JCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJcmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcygmYW1wO3JkZXYtJmd0O3dpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCiYjNDM7CQkJCSAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUywKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIXJlcS5ic3MpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0xMzAzNiw2ICYjNDM7MTMwMzgsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIH0KIAogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCiAJCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywKIAkJCQkJICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKQpAQCAtMTMwNDUsOCAmIzQzOzEzMDQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UKIAljb25zdCB1OCAqYnNzaWQ7CiAJdTMyIGZyZXEsIHVzZV9mb3IgPSAwOwogCi0JaWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQomIzQzOwlpZiAoIWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGluZm8tJmd0O2V4dGFjaywgJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZyYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KIAogCWJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCkBAIC0xMzA1NSw4ICYjNDM7MTMwNjAsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZQogCQlmcmVxICYjNDM7PSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTsKIAogCWNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIGZyZXEpOwotCWlmICghY2hhbikKJiM0MzsJaWYgKCFjaGFuKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhpbmZvLSZndDtleHRhY2ssICYjMzQ7aW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQogCiAJaWYgKGFzc29jX2xpbmtfaWQgJmd0Oz0gMCkKIAkJdXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7CkBAIC0xMzA2Nyw3ICYjNDM7MTMwNzQsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlCiAJCQkJIHNzaWQsIHNzaWRfbGVuLAogCQkJCSBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAogCQkJCSBJRUVFODAyMTFfUFJJVkFDWV9BTlksCi0JCQkJIHVzZV9mb3IpOwomIzQzOwkJCQkgdXNlX2ZvciwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTEzMTA2LDEzICYjNDM7MTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbGlua3NbbGlua19pZF0uYnNzID0KLQkJCW5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycywKJiM0MzsJCQlubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsCiAJCQkJCSAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7CiAJCWlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkgewogCQkJZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpOwogCQkJbGlua3NbbGlua19pZF0uYnNzID0gTlVMTDsKLQkJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rLAotCQkJCQkgICAgJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmsmIzM0Oyk7CiYjNDM7CQkJTkxfU0VUX0JBRF9BVFRSKGluZm8tJmd0O2V4dGFjaywgbGluayk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTEzMzI4LDggJiM0MzsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJlcS5saW5rX2lkICZndDs9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgc3NpZCwgc3NpZF9sZW4sIGluZm8tJmd0O2F0dHJzLAotCQkJCQkgICAgLTEsIC0xKTsKJiM0MzsJCXJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwKJiM0MzsJCQkJCSAgICBpbmZvLSZndDthdHRycywgLTEsIC0xKTsKIAkJaWYgKElTX0VSUihyZXEuYnNzKSkKIAkJCXJldHVybiBQVFJfRVJSKHJlcS5ic3MpOwogCQlhcF9hZGRyID0gcmVxLmJzcy0mZ3Q7YnNzaWQ7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCAwNWI3ZGM2Yjc2NmNlOS4uZjI2ZTg0MzZkYmMxMmMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTYwOSwxMCAmIzQzOzE2MDksMTIgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKQomIzQzOwkJCQkJdTMyIHVzZV9mb3IsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKJiM0MzsJYm9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCWludCBic3NfcHJpdmFjeTsKIApAQCAtMTYzNCwyMiAmIzQzOzE2MzYsMzkgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQljb250aW51ZTsKIAkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy0mZ3Q7cHViLmJzc2lkKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGJzcy0mZ3Q7cHViLnVzZV9mb3IgJmFtcDsgdXNlX2ZvcikgIT0gdXNlX2ZvcikKJiM0MzsJCWlmICghaXNfYnNzKCZhbXA7YnNzLSZndDtwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpCiAJCQljb250aW51ZTsKJiM0MzsKIAkJLyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovCiAJCWlmICh0aW1lX2FmdGVyKG5vdywgYnNzLSZndDt0cyAmIzQzOyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSAmYW1wOyZhbXA7Ci0JCSAgICAhYXRvbWljX3JlYWQoJmFtcDtic3MtJmd0O2hvbGQpKQomIzQzOwkJICAgICFhdG9taWNfcmVhZCgmYW1wO2Jzcy0mZ3Q7aG9sZCkpIHsKJiM0MzsJCQlleHBpcmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgoYnNzLSZndDtwdWIudXNlX2ZvciAmYW1wOyB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7CiYjNDM7CQkJdW51c2FibGUgPSB0cnVlOwogCQkJY29udGludWU7Ci0JCWlmIChpc19ic3MoJmFtcDtic3MtJmd0O3B1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgewotCQkJcmVzID0gYnNzOwotCQkJYnNzX3JlZl9nZXQocmRldiwgcmVzKTsKLQkJCWJyZWFrOwogCQl9CiYjNDM7CiYjNDM7CQlyZXMgPSBic3M7CiYjNDM7CQlic3NfcmVmX2dldChyZGV2LCByZXMpOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZGV2LSZndDtic3NfbG9jayk7Ci0JaWYgKCFyZXMpCiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlpZiAodW51c2FibGUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAoZXhwaXJlZCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHMmIzM0Oyk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiAJdHJhY2VfY2ZnODAyMTFfcmV0dXJuX2JzcygmYW1wO3Jlcy0mZ3Q7cHViKTsKIAlyZXR1cm4gJmFtcDtyZXMtJmd0O3B1YjsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jCmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jCkBAIC00MDIsNiAmIzQzOzQwMiwxMjUgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7CiYjNDM7CQkudGVzdCA9IHRlc3QsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7CiYjNDM7CQkuc2lnbmFsID0gNTAsCiYjNDM7CQkuZHJ2X2RhdGEgPSAmYW1wO2N0eCwKJiM0MzsJfTsKJiM0MzsJY29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07CiYjNDM7CWNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7CiYjNDM7CQlbMF0gPSBXTEFOX0VJRF9TU0lELAomIzQzOwkJWzFdID0gNCwKJiM0MzsJCVsyXSA9ICYjMzk7VCYjMzk7LCAmIzM5O0UmIzM5OywgJiMzOTtTJiMzOTssICYjMzk7VCYjMzk7CiYjNDM7CX07CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDsKJiM0MzsKJiM0MzsJaW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBpbmZvcm1fYnNzLmNoYW4pOwomIzQzOwomIzQzOwlic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksICZhbXA7aW5mb3JtX2JzcywKJiM0MzsJCQkJICAgICAgIENGRzgwMjExX0JTU19GVFlQRV9QUkVTUCwgYnNzaWQsIDAsCiYjNDM7CQkJCSAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSwKJiM0MzsJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnNzKTsKJiM0MzsJaWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovCiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsKJiM0MzsJLyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovCiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywgJiMzNDtCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0cyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqLwomIzQzOwlleHRhY2suX21zZyA9IE5VTEw7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywKJiM0MzsJCQkgICAmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24mIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGVudHJ5LCAmZ3Q7IElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDMwcykgb2xkICovCiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJaWJzcy0mZ3Q7dHMgPSBqaWZmaWVzIC0gNjAgKiBIWjsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovCiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJYnNzLSZndDt1c2VfZm9yID0gMDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW4mIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7aWJzcy0mZ3Q7aG9sZCwgMSk7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2lic3MtJmd0O2hvbGQsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIGJvdGggYW4gZXhwaXJlZCBlbnRyeSBhbmQgYSBmcmVzaC1idXQtdW51c2FibGUgZW50cnkKJiM0MzsJICogbWF0Y2hpbmcsIHRoZSB1bnVzYWJsZSBvbmUgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZTogYSBjdXJyZW50CiYjNDM7CSAqIGVudHJ5IGV4aXN0cywgc28gc3VnZ2VzdGluZyBhIHJlc2NhbiB3b3VsZCBiZSBtaXNsZWFkaW5nLgomIzQzOwkgKi8KJiM0MzsJYnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgJmFtcDtpbmZvcm1fYnNzLAomIzQzOwkJCQkJQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCwKJiM0MzsJCQkJCTAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLAomIzQzOwkJCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTsKJiM0MzsJYnNzMi0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsICYjMzQ7VEVTVCYjMzQ7LCA0LAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBpbmZvcm1fYnNzX21sX3N0YV9jYXNlIHsKIAljb25zdCBjaGFyICpkZXNjOwogCWludCBtbGRfaWQ7CkBAIC02MTcsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KQogCWxpbmtfYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBzdGFfcHJvZi5ic3NpZCwgTlVMTCwgMCwKIAkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAogCQkJCSAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKLQkJCQkgICAgICAwKTsKJiM0MzsJCQkJICAgICAgMCwgTlVMTCk7CiAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtJmd0O3NpZ25hbCwgMCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLSZndDtiZWFjb25faW50ZXJ2YWwsCkBAIC04NTUsNiAmIzQzOzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkpLAomIzQzOwlLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksCiAJS1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2luZm9ybV9ic3NfbWxfc3RhLCBpbmZvcm1fYnNzX21sX3N0YV9nZW5fcGFyYW1zKSwKIAl7fQogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNQoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDIxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IGNmZzgwMjExIEJTUyBSZXRyaWV2YWwgYW5kIEVycm9yIFJlcG9ydGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgX19jZmc4MDIxMV9nZXRfYnNzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSBsb29rdXBzIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgcmVwb3J0ICp3aHkqIGEgQlNTIG1pZ2h0IG5vdCBiZSBmb3VuZCBvciB1c2FibGUuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZz8gTGV0JiMzOTtzIGRpZyBpbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNldHRpbmcgYGV4dGFja2AgKG5ldGxpbmsgZXh0ZW5kZWQgQUNLKSBtZXNzYWdlcy4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBhIEJTUyBsb29rdXAgb3IgYXNzb2NpYXRpb24gYXR0ZW1wdC4gSXQgdXNlcyBgTkxfU0VUX0VSUl9NU0dgIGFuZCBgTkxfU0VUX0JBRF9BVFRSYC4gVGhlc2UgYXJlIHByZXR0eSBjbGVhciBzaWduYWxzIHRoYXQgdGhpcyBpcyBhYm91dCAqcmVwb3J0aW5nKiBlcnJvcnMsIG5vdCAqYWx0ZXJpbmcqIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gVGhleSBnaXZlIHVzZXJzcGFjZSBhIGJldHRlciBjbHVlIHdoeSBhIEJTUyB3YXNuJiMzOTt0IGZvdW5kIG9yIGNvdWxkbiYjMzk7dCBiZSB1c2VkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcgZm9yIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZywgYnV0IGl0IGRvZXNuJiMzOTt0IGZ1bmRhbWVudGFsbHkgY2hhbmdlIGhvdyB0aGUga2VybmVsICpiZWhhdmVzKi4KCk5vdywgdGhlIGNoYW5nZXMgdG8gYF9fY2ZnODAyMTFfZ2V0X2Jzc2AgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIHRoZSBjaGVja3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjaGFuZ2VkLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGB1c2VfZm9yYCAoaW50ZW5kZWQgdXNhZ2UpIGFuZCBleHBpcmF0aW9uICpiZWZvcmUqIHRoZSBhY3R1YWwgQlNTIElEL1NTSUQgbWF0Y2guIE5vdywgdGhlIGBpc19ic3NgIGNoZWNrICh3aGljaCBpcyB0aGUgYWN0dWFsIG1hdGNoaW5nKSBjb21lcyBmaXJzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBjaGFuZ2VzIEJTUyBzZWxlY3Rpb24gYW5kIG11c3QgYmUgdmVyaWZpZWQuIEJ1dCBpZiBhIEJTUyAqZGlkbiYjMzk7dCogbWF0Y2gsIHRoZSBjb2RlIHdpbGwganVzdCBjb250aW51ZS4gSWYgaXQgKmRpZCogbWF0Y2gsIGFuZCB0aGUgQlNTIGlzIGV4cGlyZWQgb3IgdW51c2FibGUsIHRoZW4gdGhlIGNvZGUgc2V0cyBgZXhwaXJlZGAgb3IgYHVudXNhYmxlYCBmbGFncy4gSSBoYXZlIHZhbGlkYXRlZCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBjaGFuZ2UgQlNTIHNlbGVjdGlvbiwgaXQganVzdCBnaXZlcyBtb3JlIGdyYW51bGFyIGVycm9yIHJlcG9ydGluZy4KClRoZSBsb2dpYyBpbiBgaXNfYnNzYCBpcyBzdHJhaWdodGZvcndhcmQsIGNoZWNraW5nIEJTU0lEIGFuZCBTU0lELiBObyBzaWRlIGVmZmVjdHMuIE5vIHRyaWNrcy4KClRoZSBgbmw4MDIxMV9hc3NvY19ic3NgIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBzZXR0aW5nIGFwcHJvcHJpYXRlIGV4dGFjayBtZXNzYWdlcyB3aGVuIHJlcXVpcmVkIGFyZ3VtZW50cyBhcmUgbWlzc2luZywgb3Igd2hlbiBhbiBpbnZhbGlkIGNoYW5uZWwgaXMgcmVxdWVzdGVkLiBJdCBhbHNvIHNldHMgZXh0YWNrIHdoZW4gQlNTIGxvb2t1cCBmYWlscy4gQWdhaW4sIGVycm9yIHJlcG9ydGluZywgbm90IGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlcmUmIzM5O3MgYSBuZXcgS1VuaXQgdGVzdCwgYHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbmAsIHdoaWNoIGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4dGFjayBtZXNzYWdlcy4gVGhpcyBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KClNvLCBzdW1taW5nIGl0IHVwLCB0aGlzIHBhdGNoIGlzICpwdXJlbHkqIGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZXMgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGV4dGFjayBtZWNoYW5pc20uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGVycm9yIGxvZ2dpbmcgYW5kIHJlcG9ydGluZy4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4gVGhlIGNoYW5nZSBpbiB0aGUgZnVuY3Rpb24gb3JkZXIgaW4gYF9fY2ZnODAyMTFfZ2V0X2Jzc2Agb25seSBhZGRzIG1vcmUgcHJlY2lzZSBlcnJvciByZXBvcnRpbmcuIE5vdGhpbmcgaGVyZSBzY3JlYW1zICYjMzQ7ZnV6eiBtZS4mIzM0OyBBY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgdGhpcyBwYXRjaCB3b3VsZCBmYWxsIHVuZGVyICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7IGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0My41MzA0NjkyOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc3MzQ4NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0My41MzA0Nzg0MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTIxMzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTQ6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXFxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFxcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XFxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXFxuKyAqXFx0dXNhYmxlIGVudHJ5IHdhcyBmb3VuZDsgbWF5IGJlICVOVUxMXFxuICAqXFxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxcbiAgKi9cXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiB1c2VfZm9yKTtcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIFxcbiAvKipcXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXFxuIHtcXG4gXFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHQgIGJzc190eXBlLCBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcXG4rXFx0XFx0XFx0XFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjdmYjY3ODZhNWU4ZWIxIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEyODg5LDkgKzEyODg5LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmICghcmVxLmJzcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbkBAIC0xMzAzNiw2ICsxMzAzOCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcXG5AQCAtMTMwNDUsOCArMTMwNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRjb25zdCB1OCAqYnNzaWQ7XFxuIFxcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcXG4gXFxuLVxcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcXG4rXFx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGluZm8tXFx1MDAzZWV4dGFjaywgXFxcIkJTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuIFxcbiBcXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4gXFxuQEAgLTEzMDU1LDggKzEzMDYwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcXG4gXFx0XFx0ZnJlcSArPSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTtcXG4gXFxuIFxcdGNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgZnJlcSk7XFxuLVxcdGlmICghY2hhbilcXG4rXFx0aWYgKCFjaGFuKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGluZm8tXFx1MDAzZWV4dGFjaywgXFxcImludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGFzc29jX2xpbmtfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XFxuQEAgLTEzMDY3LDcgKzEzMDc0LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRcXHRcXHRcXHQgc3NpZCwgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbiBcXHRcXHRcXHRcXHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgdXNlX2Zvcik7XFxuK1xcdFxcdFxcdFxcdCB1c2VfZm9yLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbiBcXHRpZiAoIWJzcylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcbkBAIC0xMzEwNiwxMyArMTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxcbi1cXHRcXHRcXHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXFxuK1xcdFxcdFxcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcXG4gXFx0XFx0XFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXJyb3IgZmV0Y2hpbmcgQlNTIGZvciBsaW5rXFxcIik7XFxuK1xcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmspO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzMyOCw4ICsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJlcS5saW5rX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIC0xLCAtMSk7XFxuK1xcdFxcdHJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzLCAtMSwgLTEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHJlcS5ic3MpKVxcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcXG4gXFx0XFx0YXBfYWRkciA9IHJlcS5ic3MtXFx1MDAzZWJzc2lkO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHRcXHR1MzIgdXNlX2ZvcilcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcXG4rXFx0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4gXFx0aW50IGJzc19wcml2YWN5O1xcbiBcXG5AQCAtMTYzNCwyMiArMTYzNiwzOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXFx1MDAzZXB1Yi5ic3NpZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxcbitcXHRcXHRpZiAoIWlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogRG9uJ3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXFx1MDAzZXRzICsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFhdG9taWNfcmVhZChcXHUwMDI2YnNzLVxcdTAwM2Vob2xkKSlcXG4rXFx0XFx0ICAgICFhdG9taWNfcmVhZChcXHUwMDI2YnNzLVxcdTAwM2Vob2xkKSkge1xcbitcXHRcXHRcXHRleHBpcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgoYnNzLVxcdTAwM2VwdWIudXNlX2ZvciBcXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpIHtcXG4rXFx0XFx0XFx0dW51c2FibGUgPSB0cnVlO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpIHtcXG4tXFx0XFx0XFx0cmVzID0gYnNzO1xcbi1cXHRcXHRcXHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0cmVzID0gYnNzO1xcbitcXHRcXHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG4tXFx0aWYgKCFyZXMpXFxuK1xcdGlmICghcmVzKSB7XFxuK1xcdFxcdGlmICh1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXhwaXJlZClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXFxcIik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXFxcIik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXFx1MDAyNnJlcy1cXHUwMDNlcHViKTtcXG4gXFx0cmV0dXJuIFxcdTAwMjZyZXMtXFx1MDAzZXB1YjtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbkBAIC00MDIsNiArNDAyLDEyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7XFxuK1xcdFxcdC50ZXN0ID0gdGVzdCxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2luZm9ybV9ic3MgaW5mb3JtX2JzcyA9IHtcXG4rXFx0XFx0LnNpZ25hbCA9IDUwLFxcbitcXHRcXHQuZHJ2X2RhdGEgPSBcXHUwMDI2Y3R4LFxcbitcXHR9O1xcbitcXHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcXG4rXFx0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBpZXNbXSA9IHtcXG4rXFx0XFx0WzBdID0gV0xBTl9FSURfU1NJRCxcXG4rXFx0XFx0WzFdID0gNCxcXG4rXFx0XFx0WzJdID0gJ1QnLCAnRScsICdTJywgJ1QnXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcXG4rXFxuK1xcdGluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcXG4rXFxuK1xcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXFx1MDAyNmluZm9ybV9ic3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XFxuK1xcdGlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpO1xcbitcXG4rXFx0LyogRnJlc2ggdXNhYmxlIGVudHJ5OiBmb3VuZCwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcbitcXHQvKiBObyBlbnRyeSBhdCBhbGwgZm9yIHRoaXMgQlNTSUQgKi9cXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFxcXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xcXCIpO1xcbitcXG4rXFx0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xcbitcXHRleHRhY2suX21zZyA9IE5VTEw7XFxuK1xcdGJzcy1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXHRic3MtXFx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcXG4rXFxuK1xcdC8qIEV4cGlyZWQgZW50cnksIFxcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRpYnNzLVxcdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xcbitcXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFxcdTAwMjZleHRhY2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XFxuK1xcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcXG4rXFx0XFx0XFx0ICAgXFxcIkJTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXFxcIik7XFxuK1xcbitcXHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xcbitcXHRleHRhY2suX21zZyA9IE5VTEw7XFxuK1xcdGJzcy1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZpYnNzLVxcdTAwM2Vob2xkLCAxKTtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmlic3MtXFx1MDAzZWhvbGQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2l0aCBib3RoIGFuIGV4cGlyZWQgZW50cnkgYW5kIGEgZnJlc2gtYnV0LXVudXNhYmxlIGVudHJ5XFxuK1xcdCAqIG1hdGNoaW5nLCB0aGUgdW51c2FibGUgb25lIGRldGVybWluZXMgdGhlIG1lc3NhZ2U6IGEgY3VycmVudFxcbitcXHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cXG4rXFx0ICovXFxuK1xcdGJzczIgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHRcXHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcXG4rXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcXG4rXFx0YnNzMi1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFxcXCJURVNUXFxcIiwgNCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7XFxuK1xcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XFxuIFxcdGNvbnN0IGNoYXIgKmRlc2M7XFxuIFxcdGludCBtbGRfaWQ7XFxuQEAgLTYxNyw3ICs3MzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3NfbWxfc3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxcbiBcXHRcXHRcXHRcXHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbiBcXHRcXHRcXHRcXHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuLVxcdFxcdFxcdFxcdCAgICAgIDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAwLCBOVUxMKTtcXG4gXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVxcdTAwM2VzaWduYWwsIDApO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXFx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcXG5AQCAtODU1LDYgKzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgaW5mb3JtX2Jzc190ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksXFxuK1xcdEtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSxcXG4gXFx0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2luZm9ybV9ic3NfbWxfc3RhLCBpbmZvcm1fYnNzX21sX3N0YV9nZW5fcGFyYW1zKSxcXG4gXFx0e31cXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTQ6NDQuMTE2NjI3MzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIxODczMjQ3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIEl0IGFsc28gYWRkcyBhIEtVbml0IHRlc3QgZm9yIHRoZXNlIG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIHN0YXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYTQ5ZTMwMjlkNWNkMWRhMTNkNGU4ZDIxMTY1OGJkYWQzYWRkOTcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTQ6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiArODQyNCw4IEBAIGNmZzgwMjExX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfYnNzX3R5cGVcbiAgKiBAcHJpdmFjeTogcHJpdmFjeSBmaWx0ZXIsIHNlZSBcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XG4gICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWRcbisgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBub1xuKyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyArODQzNSw4IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2Zvcik7XG4rXHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXG4ge1xuIFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxuIFx0XHRcdFx0ICBic3NfdHlwZSwgcHJpdmFjeSxcbi1cdFx0XHRcdCAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpO1xuK1x0XHRcdFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDI0MjA3MWFkMTBkNmM5Li43ZmI2Nzg2YTVlOGViMSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xMjg4OSw5ICsxMjg4OSwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbitcdHJlcS5ic3MgPSBfX2NmZzgwMjExX2dldF9ic3MoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxuK1x0XHRcdFx0ICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIXJlcS5ic3MpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTEzMDM2LDYgKzEzMDM4LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbiBcdFx0XHRcdFx0ICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKVxuQEAgLTEzMDQ1LDggKzEzMDQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdGNvbnN0IHU4ICpic3NpZDtcbiBcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcbiBcbi1cdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcbitcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjaywgXCJCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4gXG4gXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbiBcbkBAIC0xMzA1NSw4ICsxMzA2MCwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgKz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbitcdGlmICghY2hhbikge1xuK1x0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjaywgXCJpbnZhbGlkIG9yIGRpc2FibGVkIGNoYW5uZWxcIik7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1x0fVxuIFxuIFx0aWYgKGFzc29jX2xpbmtfaWQgXHUwMDNlPSAwKVxuIFx0XHR1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9NTERfTElOSztcbkBAIC0xMzA2Nyw3ICsxMzA3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0XHRcdCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCB1c2VfZm9yKTtcbitcdFx0XHRcdCB1c2VfZm9yLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIWJzcylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXG5AQCAtMTMxMDYsMTMgKzEzMTEzLDEyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9wcm9jZXNzX2xpbmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxuLVx0XHRcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcbitcdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4gXHRcdFx0XHRcdCAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7XG4gXHRcdGlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcbiBcdFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPSBOVUxMO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmssXG4tXHRcdFx0XHRcdCAgICBcIkVycm9yIGZldGNoaW5nIEJTUyBmb3IgbGlua1wiKTtcbitcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOCw4ICsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuLVx0XHRcdFx0XHQgICAgLTEsIC0xKTtcbitcdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLFxuK1x0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRycywgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbiBcdFx0YXBfYWRkciA9IHJlcS5ic3MtXHUwMDNlYnNzaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2ZvcilcbitcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7XG4rXHRib29sIGV4cGlyZWQgPSBmYWxzZSwgdW51c2FibGUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiBcdGludCBic3NfcHJpdmFjeTtcbiBcbkBAIC0xNjM0LDIyICsxNjM2LDM5IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzLVx1MDAzZXB1Yi5ic3NpZCkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICgoYnNzLVx1MDAzZXB1Yi51c2VfZm9yIFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxuK1x0XHRpZiAoIWlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHQvKiBEb24ndCBnZXQgZXhwaXJlZCBCU1Mgc3RydWN0cyAqL1xuIFx0XHRpZiAodGltZV9hZnRlcihub3csIGJzcy1cdTAwM2V0cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmJzcy1cdTAwM2Vob2xkKSlcbitcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpIHtcbitcdFx0XHRleHBpcmVkID0gdHJ1ZTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2Zvcikge1xuK1x0XHRcdHVudXNhYmxlID0gdHJ1ZTtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XG4tXHRcdFx0cmVzID0gYnNzO1xuLVx0XHRcdGJzc19yZWZfZ2V0KHJkZXYsIHJlcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbitcbitcdFx0cmVzID0gYnNzO1xuK1x0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xuLVx0aWYgKCFyZXMpXG4rXHRpZiAoIXJlcykge1xuK1x0XHRpZiAodW51c2FibGUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwiKTtcbitcdFx0ZWxzZVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXHUwMDI2cmVzLVx1MDAzZXB1Yik7XG4gXHRyZXR1cm4gXHUwMDI2cmVzLVx1MDAzZXB1YjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbkBAIC00MDIsNiArNDAyLDEyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xuK1x0XHQudGVzdCA9IHRlc3QsXG4rXHR9O1xuK1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcbitcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XG4rXHRcdC5zaWduYWwgPSA1MCxcbitcdFx0LmRydl9kYXRhID0gXHUwMDI2Y3R4LFxuK1x0fTtcbitcdGNvbnN0IHU4IGJzc2lkW0VUSF9BTEVOXSA9IHsgMHgxMCwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiB9O1xuK1x0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XG4rXHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XG4rXHRcdFswXSA9IFdMQU5fRUlEX1NTSUQsXG4rXHRcdFsxXSA9IDQsXG4rXHRcdFsyXSA9ICdUJywgJ0UnLCAnUycsICdUJ1xuK1x0fTtcbitcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCAqYnNzMiwgKmZvdW5kO1xuK1xuK1x0aW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcbitcbitcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbitcdFx0XHRcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxuK1x0XHRcdFx0ICAgICAgIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxuK1x0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XG4rXHRpYnNzID0gY29udGFpbmVyX29mKGJzcywgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTtcbitcbitcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1xuK1x0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgb3RoZXJfYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFwiQlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcIik7XG4rXG4rXHQvKiBGcmVzaCBlbnRyeSB0aGF0IGlzIG5vdCB1c2FibGUgZm9yIHRoZSByZXF1ZXN0ZWQgdXNlICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4rXHRcdFx0ICAgXCJCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIpO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbitcbitcdC8qIEV4cGlyZWQgZW50cnksIFx1MDAzZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0aWJzcy1cdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cIik7XG4rXG4rXHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cIik7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuK1xuK1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmlic3MtXHUwMDNlaG9sZCwgMSk7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1x0YXRvbWljX3NldChcdTAwMjZpYnNzLVx1MDAzZWhvbGQsIDApO1xuK1xuK1x0LypcbitcdCAqIFdpdGggYm90aCBhbiBleHBpcmVkIGVudHJ5IGFuZCBhIGZyZXNoLWJ1dC11bnVzYWJsZSBlbnRyeVxuK1x0ICogbWF0Y2hpbmcsIHRoZSB1bnVzYWJsZSBvbmUgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZTogYSBjdXJyZW50XG4rXHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cbitcdCAqL1xuK1x0YnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbitcdFx0XHRcdFx0Q0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCxcbitcdFx0XHRcdFx0MCwgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXG4rXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzczIpO1xuK1x0YnNzMi1cdTAwM2V1c2VfZm9yID0gMDtcbitcdGV4dGFjay5fbXNnID0gTlVMTDtcbitcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBOVUxMLCBcIlRFU1RcIiwgNCxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbitcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcbitcdFx0XHQgICBcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cIik7XG4rXG4rXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbitcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyArNzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX21sX3N0YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRsaW5rX2JzcyA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgc3RhX3Byb2YuYnNzaWQsIE5VTEwsIDAsXG4gXHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuLVx0XHRcdFx0ICAgICAgMCk7XG4rXHRcdFx0XHQgICAgICAwLCBOVUxMKTtcbiBcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBsaW5rX2Jzcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXHUwMDNlc2lnbmFsLCAwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2ViZWFjb25faW50ZXJ2YWwsXG5AQCAtODU1LDYgKzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbitcdEtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSxcbiBcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9pbmZvcm1fYnNzX21sX3N0YSwgaW5mb3JtX2Jzc19tbF9zdGFfZ2VuX3BhcmFtcyksXG4gXHR7fVxuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0NC4xMTY2Mjk3ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE4NzMwMjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogY2ZnODAyMTEgQlNTIFJldHJpZXZhbCBhbmQgRXJyb3IgUmVwb3J0aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgX19jZmc4MDIxMV9nZXRfYnNzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSBsb29rdXBzIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgcmVwb3J0ICp3aHkqIGEgQlNTIG1pZ2h0IG5vdCBiZSBmb3VuZCBvciB1c2FibGUuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZz8gTGV0J3MgZGlnIGluLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzZXR0aW5nIGBleHRhY2tgIChuZXRsaW5rIGV4dGVuZGVkIEFDSykgbWVzc2FnZXMuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgYmFjayB0byB1c2Vyc3BhY2Ugd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYSBCU1MgbG9va3VwIG9yIGFzc29jaWF0aW9uIGF0dGVtcHQuIEl0IHVzZXMgYE5MX1NFVF9FUlJfTVNHYCBhbmQgYE5MX1NFVF9CQURfQVRUUmAuIFRoZXNlIGFyZSBwcmV0dHkgY2xlYXIgc2lnbmFscyB0aGF0IHRoaXMgaXMgYWJvdXQgKnJlcG9ydGluZyogZXJyb3JzLCBub3QgKmFsdGVyaW5nKiB0aGUgY29yZSBrZXJuZWwgbG9naWMuIFRoZXkgZ2l2ZSB1c2Vyc3BhY2UgYSBiZXR0ZXIgY2x1ZSB3aHkgYSBCU1Mgd2Fzbid0IGZvdW5kIG9yIGNvdWxkbid0IGJlIHVzZWQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGNoYW5nZSBob3cgdGhlIGtlcm5lbCAqYmVoYXZlcyouXG5cbk5vdywgdGhlIGNoYW5nZXMgdG8gYF9fY2ZnODAyMTFfZ2V0X2Jzc2AgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIHRoZSBjaGVja3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjaGFuZ2VkLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGB1c2VfZm9yYCAoaW50ZW5kZWQgdXNhZ2UpIGFuZCBleHBpcmF0aW9uICpiZWZvcmUqIHRoZSBhY3R1YWwgQlNTIElEL1NTSUQgbWF0Y2guIE5vdywgdGhlIGBpc19ic3NgIGNoZWNrICh3aGljaCBpcyB0aGUgYWN0dWFsIG1hdGNoaW5nKSBjb21lcyBmaXJzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBjaGFuZ2VzIEJTUyBzZWxlY3Rpb24gYW5kIG11c3QgYmUgdmVyaWZpZWQuIEJ1dCBpZiBhIEJTUyAqZGlkbid0KiBtYXRjaCwgdGhlIGNvZGUgd2lsbCBqdXN0IGNvbnRpbnVlLiBJZiBpdCAqZGlkKiBtYXRjaCwgYW5kIHRoZSBCU1MgaXMgZXhwaXJlZCBvciB1bnVzYWJsZSwgdGhlbiB0aGUgY29kZSBzZXRzIGBleHBpcmVkYCBvciBgdW51c2FibGVgIGZsYWdzLiBJIGhhdmUgdmFsaWRhdGVkIHRoaXMgY2hhbmdlIGRvZXNuJ3QgY2hhbmdlIEJTUyBzZWxlY3Rpb24sIGl0IGp1c3QgZ2l2ZXMgbW9yZSBncmFudWxhciBlcnJvciByZXBvcnRpbmcuXG5cblRoZSBsb2dpYyBpbiBgaXNfYnNzYCBpcyBzdHJhaWdodGZvcndhcmQsIGNoZWNraW5nIEJTU0lEIGFuZCBTU0lELiBObyBzaWRlIGVmZmVjdHMuIE5vIHRyaWNrcy5cblxuVGhlIGBubDgwMjExX2Fzc29jX2Jzc2AgY2hhbmdlcyBhcmUgYWxsIGFib3V0IHNldHRpbmcgYXBwcm9wcmlhdGUgZXh0YWNrIG1lc3NhZ2VzIHdoZW4gcmVxdWlyZWQgYXJndW1lbnRzIGFyZSBtaXNzaW5nLCBvciB3aGVuIGFuIGludmFsaWQgY2hhbm5lbCBpcyByZXF1ZXN0ZWQuIEl0IGFsc28gc2V0cyBleHRhY2sgd2hlbiBCU1MgbG9va3VwIGZhaWxzLiBBZ2FpbiwgZXJyb3IgcmVwb3J0aW5nLCBub3QgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZXJlJ3MgYSBuZXcgS1VuaXQgdGVzdCwgYHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbmAsIHdoaWNoIGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4dGFjayBtZXNzYWdlcy4gVGhpcyBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrIGJ1dCBkb2Vzbid0IGNoYW5nZSB0aGUga2VybmVsJ3MgYmVoYXZpb3IuXG5cblNvLCBzdW1taW5nIGl0IHVwLCB0aGlzIHBhdGNoIGlzICpwdXJlbHkqIGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZXMgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGV4dGFjayBtZWNoYW5pc20uIEl0J3MgZXNzZW50aWFsbHkgZXJyb3IgbG9nZ2luZyBhbmQgcmVwb3J0aW5nLiBJdCBkb2Vzbid0IG1vZGlmeSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuIFRoZSBjaGFuZ2UgaW4gdGhlIGZ1bmN0aW9uIG9yZGVyIGluIGBfX2NmZzgwMjExX2dldF9ic3NgIG9ubHkgYWRkcyBtb3JlIHByZWNpc2UgZXJyb3IgcmVwb3J0aW5nLiBOb3RoaW5nIGhlcmUgc2NyZWFtcyBcImZ1enogbWUuXCIgQWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQsIHRoaXMgcGF0Y2ggd291bGQgZmFsbCB1bmRlciBcIlB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXNcIiBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA1LCJPdXRwdXRUb2tlbnMiOjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDEzOjU1OjA2LjMwMzkzNDc2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8gxcv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 13:36:15 +0000 UTC FinishedAt: 2026-07-22 13:55:07 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIEl0IGFsc28gYWRkcyBhIEtVbml0IHRlc3QgZm9yIHRoZXNlIG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIHN0YXRlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxMzo1NDo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiAmIzQzOzg0MjQsOCBAQCBjZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlIFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXG4gICogQHByaXZhY3k6IHByaXZhY3kgZmlsdGVyLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfcHJpdmFjeVxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXG4mIzQzOyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXG4mIzQzOyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyAmIzQzOzg0MzUsOCBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpO1xuJiM0MztcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLFxuIHtcbiBcdHJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCAgYnNzX3R5cGUsIHByaXZhY3ksXG4tXHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcbiYjNDM7XHRcdFx0XHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjdmYjY3ODZhNWU4ZWIxIDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEyODg5LDkgJiM0MzsxMjg4OSwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbiYjNDM7XHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXG4mIzQzO1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCxcbiYjNDM7XHRcdFx0XHQgICAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmICghcmVxLmJzcylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMTMwMzYsNiAmIzQzOzEzMDM4LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXG4gXHRcdFx0XHRcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcbkBAIC0xMzA0NSw4ICYjNDM7MTMwNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxuIFx0Y29uc3QgdTggKmJzc2lkO1xuIFx0dTMyIGZyZXEsIHVzZV9mb3IgPSAwO1xuIFxuLVx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKVxuJiM0MztcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssIFwmIzM0O0JTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuIFxuIFx0YnNzaWQgPSBubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XG4gXG5AQCAtMTMwNTUsOCAmIzQzOzEzMDYwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0ZnJlcSAmIzQzOz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbiYjNDM7XHRpZiAoIWNoYW4pIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGluZm8tXHUwMDNlZXh0YWNrLCBcJiMzNDtpbnZhbGlkIG9yIGRpc2FibGVkIGNoYW5uZWxcJiMzNDspO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoYXNzb2NfbGlua19pZCBcdTAwM2U9IDApXG4gXHRcdHVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX01MRF9MSU5LO1xuQEAgLTEzMDY3LDcgJiM0MzsxMzA3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0XHRcdCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCB1c2VfZm9yKTtcbiYjNDM7XHRcdFx0XHQgdXNlX2ZvciwgaW5mby1cdTAwM2VleHRhY2spO1xuIFx0aWYgKCFic3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFxuQEAgLTEzMTA2LDEzICYjNDM7MTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdGxpbmtzW2xpbmtfaWRdLmJzcyA9XG4tXHRcdFx0bmw4MDIxMV9hc3NvY19ic3MocmRldiwgc3NpZCwgc3NpZF9sZW4sIGF0dHJzLFxuJiM0MztcdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4gXHRcdFx0XHRcdCAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7XG4gXHRcdGlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcbiBcdFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPSBOVUxMO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmssXG4tXHRcdFx0XHRcdCAgICBcJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmtcJiMzNDspO1xuJiM0MztcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOCw4ICYjNDM7MTMzMzQsOCBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGlmIChyZXEubGlua19pZCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgaW5mby1cdTAwM2VhdHRycyxcbi1cdFx0XHRcdFx0ICAgIC0xLCAtMSk7XG4mIzQzO1x0XHRyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgaW5mbywgc3NpZCwgc3NpZF9sZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRycywgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbiBcdFx0YXBfYWRkciA9IHJlcS5ic3MtXHUwMDNlYnNzaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xNjA5LDEwICYjNDM7MTYwOSwxMiBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0XHRcdFx0Y29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbixcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUgYnNzX3R5cGUsXG4gXHRcdFx0XHRcdGVudW0gaWVlZTgwMjExX3ByaXZhY3kgcHJpdmFjeSxcbi1cdFx0XHRcdFx0dTMyIHVzZV9mb3IpXG4mIzQzO1x0XHRcdFx0XHR1MzIgdXNlX2ZvcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XG4gXHRpbnQgYnNzX3ByaXZhY3k7XG4gXG5AQCAtMTYzNCwyMiAmIzQzOzE2MzYsMzkgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXHUwMDNlcHViLmJzc2lkKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKChic3MtXHUwMDNlcHViLnVzZV9mb3IgXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpXG4mIzQzO1x0XHRpZiAoIWlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovXG4gXHRcdGlmICh0aW1lX2FmdGVyKG5vdywgYnNzLVx1MDAzZXRzICYjNDM7IElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmJzcy1cdTAwM2Vob2xkKSlcbiYjNDM7XHRcdCAgICAhYXRvbWljX3JlYWQoXHUwMDI2YnNzLVx1MDAzZWhvbGQpKSB7XG4mIzQzO1x0XHRcdGV4cGlyZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2Zvcikge1xuJiM0MztcdFx0XHR1bnVzYWJsZSA9IHRydWU7XG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChpc19ic3MoXHUwMDI2YnNzLVx1MDAzZXB1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkge1xuLVx0XHRcdHJlcyA9IGJzcztcbi1cdFx0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmVzID0gYnNzO1xuJiM0MztcdFx0YnNzX3JlZl9nZXQocmRldiwgcmVzKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmRldi1cdTAwM2Vic3NfbG9jayk7XG4tXHRpZiAoIXJlcylcbiYjNDM7XHRpZiAoIXJlcykge1xuJiM0MztcdFx0aWYgKHVudXNhYmxlKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcJiMzNDspO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXHR0cmFjZV9jZmc4MDIxMV9yZXR1cm5fYnNzKFx1MDAyNnJlcy1cdTAwM2VwdWIpO1xuIFx0cmV0dXJuIFx1MDAyNnJlcy1cdTAwM2VwdWI7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5pbmRleCBiMWE5YzE0NjZkNmNiZC4uZTYyYjAxZjhjYmU1YWMgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXG5AQCAtNDAyLDYgJiM0Mzs0MDIsMTI1IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7XG4mIzQzO1x0XHQudGVzdCA9IHRlc3QsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gVF9XSVBIWSh0ZXN0LCBjdHgpO1xuJiM0MztcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XG4mIzQzO1x0XHQuc2lnbmFsID0gNTAsXG4mIzQzO1x0XHQuZHJ2X2RhdGEgPSBcdTAwMjZjdHgsXG4mIzQzO1x0fTtcbiYjNDM7XHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcbiYjNDM7XHRjb25zdCB1OCBvdGhlcl9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4NjYsIDB4NTUsIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XG4mIzQzO1x0XHRbMF0gPSBXTEFOX0VJRF9TU0lELFxuJiM0MztcdFx0WzFdID0gNCxcbiYjNDM7XHRcdFsyXSA9ICYjMzk7VCYjMzk7LCAmIzM5O0UmIzM5OywgJiMzOTtTJiMzOTssICYjMzk7VCYjMzk7XG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppYnNzO1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XG4mIzQzO1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCAqYnNzMiwgKmZvdW5kO1xuJiM0MztcbiYjNDM7XHRpbmZvcm1fYnNzLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfa2h6KHdpcGh5LCBNSFpfVE9fS0haKDI0MTIpKTtcbiYjNDM7XHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcbiYjNDM7XG4mIzQzO1x0YnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuJiM0MztcdFx0XHRcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxuJiM0MztcdFx0XHRcdCAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XG4mIzQzO1x0aWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7XG4mIzQzO1xuJiM0MztcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0FTU0VSVF9QVFJfRVEodGVzdCwgZm91bmQsIGJzcyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuJiM0MztcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTtcbiYjNDM7XG4mIzQzO1x0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFwmIzM0O0JTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcdGJzcy1cdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XG4mIzQzO1xuJiM0MztcdC8qIEV4cGlyZWQgZW50cnksIFx1MDAzZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqL1xuJiM0MztcdGV4dGFjay5fbXNnID0gTlVMTDtcbiYjNDM7XHRpYnNzLVx1MDAzZXRzID0gamlmZmllcyAtIDYwICogSFo7XG4mIzQzO1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogQW4gZW50cnkgYm90aCBleHBpcmVkIGFuZCB1bnVzYWJsZSByZXBvcnRzIGV4cGlyZWQgKi9cbiYjNDM7XHRleHRhY2suX21zZyA9IE5VTEw7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuJiM0MztcdFx0XHQgICBcJiMzNDtCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbiYjNDM7XG4mIzQzO1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAxKTtcbiYjNDM7XHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiYjNDM7XHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7XG4mIzQzO1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2aWJzcy1cdTAwM2Vob2xkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaXRoIGJvdGggYW4gZXhwaXJlZCBlbnRyeSBhbmQgYSBmcmVzaC1idXQtdW51c2FibGUgZW50cnlcbiYjNDM7XHQgKiBtYXRjaGluZywgdGhlIHVudXNhYmxlIG9uZSBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlOiBhIGN1cnJlbnRcbiYjNDM7XHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRic3MyID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19kYXRhKHdpcGh5LCBcdTAwMjZpbmZvcm1fYnNzLFxuJiM0MztcdFx0XHRcdFx0Q0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCxcbiYjNDM7XHRcdFx0XHRcdDAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzczIpO1xuJiM0MztcdGJzczItXHUwMDNldXNlX2ZvciA9IDA7XG4mIzQzO1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuJiM0MztcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBOVUxMLCBcJiMzNDtURVNUXCYjMzQ7LCA0LFxuJiM0MztcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4mIzQzO1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuJiM0MztcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbiYjNDM7XHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbiBcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCAgICAgIDApO1xuJiM0MztcdFx0XHRcdCAgICAgIDAsIE5VTEwpO1xuIFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2VzaWduYWwsIDApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcbkBAIC04NTUsNiAmIzQzOzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbiYjNDM7XHRLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksXG4gXHRLVU5JVF9DQVNFX1BBUkFNKHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEsIGluZm9ybV9ic3NfbWxfc3RhX2dlbl9wYXJhbXMpLFxuIFx0e31cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxMzo1NDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IGI4ZTlmYmI4OWU2OTE2Li4xNWMwOGIyNDUwMmZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC04NDI0LDYgJiM0Mzs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogICogQGJzc190eXBlOiB0eXBlIG9mIEJTUywgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfYnNzX3R5cGUKICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlICZhbXA7ZW51bSBpZWVlODAyMTFfcHJpdmFjeQogICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWQKJiM0MzsgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBubwomIzQzOyAqCXVzYWJsZSBlbnRyeSB3YXMgZm91bmQ7IG1heSBiZSAlTlVMTAogICoKICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLgogICovCkBAIC04NDMzLDcgJiM0Mzs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKTsKJiM0MzsJCQkJCXUzMiB1c2VfZm9yLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogLyoqCiAgKiBjZmc4MDIxMV9nZXRfYnNzIC0gZ2V0IGEgQlNTIHJlZmVyZW5jZQpAQCAtODQ1Nyw3ICYjNDM7ODQ2MCw3IEBAIGNmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogewogCXJldHVybiBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIGNoYW5uZWwsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKIAkJCQkgIGJzc190eXBlLCBwcml2YWN5LAotCQkJCSAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpOwomIzQzOwkJCQkgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfYnNzICoKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDI0MjA3MWFkMTBkNmM5Li43ZmI2Nzg2YTVlOGViMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMjg4OSw5ICYjNDM7MTI4ODksMTEgQEAgc3RhdGljIGludCBubDgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVxLmJzcyA9IGNmZzgwMjExX2dldF9ic3MoJmFtcDtyZGV2LSZndDt3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAotCQkJCSAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsCi0JCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKJiM0MzsJcmVxLmJzcyA9IF9fY2ZnODAyMTFfZ2V0X2JzcygmYW1wO3JkZXYtJmd0O3dpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCiYjNDM7CQkJCSAgICAgSUVFRTgwMjExX0JTU19UWVBFX0VTUywKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIXJlcS5ic3MpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0xMzAzNiw2ICYjNDM7MTMwMzgsNyBAQCBzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIH0KIAogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCiAJCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywKIAkJCQkJICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKQpAQCAtMTMwNDUsOCAmIzQzOzEzMDQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UKIAljb25zdCB1OCAqYnNzaWQ7CiAJdTMyIGZyZXEsIHVzZV9mb3IgPSAwOwogCi0JaWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQomIzQzOwlpZiAoIWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8ICFhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGluZm8tJmd0O2V4dGFjaywgJiMzNDtCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZyYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CX0KIAogCWJzc2lkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCkBAIC0xMzA1NSw4ICYjNDM7MTMwNjAsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZQogCQlmcmVxICYjNDM7PSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTsKIAogCWNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKCZhbXA7cmRldi0mZ3Q7d2lwaHksIGZyZXEpOwotCWlmICghY2hhbikKJiM0MzsJaWYgKCFjaGFuKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhpbmZvLSZndDtleHRhY2ssICYjMzQ7aW52YWxpZCBvciBkaXNhYmxlZCBjaGFubmVsJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsJfQogCiAJaWYgKGFzc29jX2xpbmtfaWQgJmd0Oz0gMCkKIAkJdXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7CkBAIC0xMzA2Nyw3ICYjNDM7MTMwNzQsNyBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlCiAJCQkJIHNzaWQsIHNzaWRfbGVuLAogCQkJCSBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLAogCQkJCSBJRUVFODAyMTFfUFJJVkFDWV9BTlksCi0JCQkJIHVzZV9mb3IpOwomIzQzOwkJCQkgdXNlX2ZvciwgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTEzMTA2LDEzICYjNDM7MTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbGlua3NbbGlua19pZF0uYnNzID0KLQkJCW5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycywKJiM0MzsJCQlubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsCiAJCQkJCSAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7CiAJCWlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkgewogCQkJZXJyID0gUFRSX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpOwogCQkJbGlua3NbbGlua19pZF0uYnNzID0gTlVMTDsKLQkJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLCBsaW5rLAotCQkJCQkgICAgJiMzNDtFcnJvciBmZXRjaGluZyBCU1MgZm9yIGxpbmsmIzM0Oyk7CiYjNDM7CQkJTkxfU0VUX0JBRF9BVFRSKGluZm8tJmd0O2V4dGFjaywgbGluayk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTEzMzI4LDggJiM0MzsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJaWYgKHJlcS5saW5rX2lkICZndDs9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXEuYnNzID0gbmw4MDIxMV9hc3NvY19ic3MocmRldiwgc3NpZCwgc3NpZF9sZW4sIGluZm8tJmd0O2F0dHJzLAotCQkJCQkgICAgLTEsIC0xKTsKJiM0MzsJCXJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwKJiM0MzsJCQkJCSAgICBpbmZvLSZndDthdHRycywgLTEsIC0xKTsKIAkJaWYgKElTX0VSUihyZXEuYnNzKSkKIAkJCXJldHVybiBQVFJfRVJSKHJlcS5ic3MpOwogCQlhcF9hZGRyID0gcmVxLmJzcy0mZ3Q7YnNzaWQ7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCAwNWI3ZGM2Yjc2NmNlOS4uZjI2ZTg0MzZkYmMxMmMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTYwOSwxMCAmIzQzOzE2MDksMTIgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCWNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCQkJCWVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLAogCQkJCQllbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksCi0JCQkJCXUzMiB1c2VfZm9yKQomIzQzOwkJCQkJdTMyIHVzZV9mb3IsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDsKJiM0MzsJYm9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCWludCBic3NfcHJpdmFjeTsKIApAQCAtMTYzNCwyMiAmIzQzOzE2MzYsMzkgQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQljb250aW51ZTsKIAkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGJzcy0mZ3Q7cHViLmJzc2lkKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGJzcy0mZ3Q7cHViLnVzZV9mb3IgJmFtcDsgdXNlX2ZvcikgIT0gdXNlX2ZvcikKJiM0MzsJCWlmICghaXNfYnNzKCZhbXA7YnNzLSZndDtwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpCiAJCQljb250aW51ZTsKJiM0MzsKIAkJLyogRG9uJiMzOTt0IGdldCBleHBpcmVkIEJTUyBzdHJ1Y3RzICovCiAJCWlmICh0aW1lX2FmdGVyKG5vdywgYnNzLSZndDt0cyAmIzQzOyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSAmYW1wOyZhbXA7Ci0JCSAgICAhYXRvbWljX3JlYWQoJmFtcDtic3MtJmd0O2hvbGQpKQomIzQzOwkJICAgICFhdG9taWNfcmVhZCgmYW1wO2Jzcy0mZ3Q7aG9sZCkpIHsKJiM0MzsJCQlleHBpcmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICgoYnNzLSZndDtwdWIudXNlX2ZvciAmYW1wOyB1c2VfZm9yKSAhPSB1c2VfZm9yKSB7CiYjNDM7CQkJdW51c2FibGUgPSB0cnVlOwogCQkJY29udGludWU7Ci0JCWlmIChpc19ic3MoJmFtcDtic3MtJmd0O3B1YiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkgewotCQkJcmVzID0gYnNzOwotCQkJYnNzX3JlZl9nZXQocmRldiwgcmVzKTsKLQkJCWJyZWFrOwogCQl9CiYjNDM7CiYjNDM7CQlyZXMgPSBic3M7CiYjNDM7CQlic3NfcmVmX2dldChyZGV2LCByZXMpOwomIzQzOwkJYnJlYWs7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZGV2LSZndDtic3NfbG9jayk7Ci0JaWYgKCFyZXMpCiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlpZiAodW51c2FibGUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uJiMzNDspOwomIzQzOwkJZWxzZSBpZiAoZXhwaXJlZCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O0JTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7QlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHMmIzM0Oyk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiAJdHJhY2VfY2ZnODAyMTFfcmV0dXJuX2JzcygmYW1wO3Jlcy0mZ3Q7cHViKTsKIAlyZXR1cm4gJmFtcDtyZXMtJmd0O3B1YjsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmMgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jCmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jCkBAIC00MDIsNiAmIzQzOzQwMiwxMjUgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7CiYjNDM7CQkudGVzdCA9IHRlc3QsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBUX1dJUEhZKHRlc3QsIGN0eCk7CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7CiYjNDM7CQkuc2lnbmFsID0gNTAsCiYjNDM7CQkuZHJ2X2RhdGEgPSAmYW1wO2N0eCwKJiM0MzsJfTsKJiM0MzsJY29uc3QgdTggYnNzaWRbRVRIX0FMRU5dID0geyAweDEwLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2IH07CiYjNDM7CWNvbnN0IHU4IG90aGVyX2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7CiYjNDM7CQlbMF0gPSBXTEFOX0VJRF9TU0lELAomIzQzOwkJWzFdID0gNCwKJiM0MzsJCVsyXSA9ICYjMzk7VCYjMzk7LCAmIzM5O0UmIzM5OywgJiMzOTtTJiMzOTssICYjMzk7VCYjMzk7CiYjNDM7CX07CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307CiYjNDM7CXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDsKJiM0MzsKJiM0MzsJaW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBpbmZvcm1fYnNzLmNoYW4pOwomIzQzOwomIzQzOwlic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksICZhbXA7aW5mb3JtX2JzcywKJiM0MzsJCQkJICAgICAgIENGRzgwMjExX0JTU19GVFlQRV9QUkVTUCwgYnNzaWQsIDAsCiYjNDM7CQkJCSAgICAgICAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSwKJiM0MzsJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgYnNzKTsKJiM0MzsJaWJzcyA9IGNvbnRhaW5lcl9vZihic3MsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovCiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsKJiM0MzsJLyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovCiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBvdGhlcl9ic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywgJiMzNDtCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0cyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqLwomIzQzOwlleHRhY2suX21zZyA9IE5VTEw7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7CiYjNDM7CUtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZywKJiM0MzsJCQkgICAmIzM0O0JTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24mIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGVudHJ5LCAmZ3Q7IElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDMwcykgb2xkICovCiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJaWJzcy0mZ3Q7dHMgPSBqaWZmaWVzIC0gNjAgKiBIWjsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEFuIGVudHJ5IGJvdGggZXhwaXJlZCBhbmQgdW51c2FibGUgcmVwb3J0cyBleHBpcmVkICovCiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJYnNzLSZndDt1c2VfZm9yID0gMDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW4mIzM0Oyk7CiYjNDM7CWJzcy0mZ3Q7dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMOwomIzQzOwomIzQzOwkvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi8KJiM0MzsJZXh0YWNrLl9tc2cgPSBOVUxMOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7aWJzcy0mZ3Q7aG9sZCwgMSk7CiYjNDM7CWZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCwKJiM0MzsJCQkJICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSwKJiM0MzsJCQkJICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLAomIzQzOwkJCQkgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgJmFtcDtleHRhY2spOwomIzQzOwlLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBleHRhY2suX21zZyk7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGZvdW5kKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2lic3MtJmd0O2hvbGQsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaXRoIGJvdGggYW4gZXhwaXJlZCBlbnRyeSBhbmQgYSBmcmVzaC1idXQtdW51c2FibGUgZW50cnkKJiM0MzsJICogbWF0Y2hpbmcsIHRoZSB1bnVzYWJsZSBvbmUgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZTogYSBjdXJyZW50CiYjNDM7CSAqIGVudHJ5IGV4aXN0cywgc28gc3VnZ2VzdGluZyBhIHJlc2NhbiB3b3VsZCBiZSBtaXNsZWFkaW5nLgomIzQzOwkgKi8KJiM0MzsJYnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgJmFtcDtpbmZvcm1fYnNzLAomIzQzOwkJCQkJQ0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCwKJiM0MzsJCQkJCTAsIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLAomIzQzOwkJCQkJR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTsKJiM0MzsJYnNzMi0mZ3Q7dXNlX2ZvciA9IDA7CiYjNDM7CWV4dGFjay5fbXNnID0gTlVMTDsKJiM0MzsJZm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsICYjMzQ7VEVTVCYjMzQ7LCA0LAomIzQzOwkJCQkgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAomIzQzOwkJCQkgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksCiYjNDM7CQkJCSAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCAmYW1wO2V4dGFjayk7CiYjNDM7CUtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLAomIzQzOwkJCSAgICYjMzQ7QlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiYjMzQ7KTsKJiM0MzsKJiM0MzsJY2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7CiYjNDM7CWNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBpbmZvcm1fYnNzX21sX3N0YV9jYXNlIHsKIAljb25zdCBjaGFyICpkZXNjOwogCWludCBtbGRfaWQ7CkBAIC02MTcsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW5mb3JtX2Jzc19tbF9zdGEoc3RydWN0IGt1bml0ICp0ZXN0KQogCWxpbmtfYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBzdGFfcHJvZi5ic3NpZCwgTlVMTCwgMCwKIAkJCQkgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLAogCQkJCSAgICAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSwKLQkJCQkgICAgICAwKTsKJiM0MzsJCQkJICAgICAgMCwgTlVMTCk7CiAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtJmd0O3NpZ25hbCwgMCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLSZndDtiZWFjb25faW50ZXJ2YWwsCkBAIC04NTUsNiAmIzQzOzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBpbmZvcm1fYnNzX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKHRlc3RfaW5mb3JtX2Jzc19zc2lkX29ubHkpLAomIzQzOwlLVU5JVF9DQVNFKHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbiksCiAJS1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2luZm9ybV9ic3NfbWxfc3RhLCBpbmZvcm1fYnNzX21sX3N0YV9nZW5fcGFyYW1zKSwKIAl7fQogfTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNQoJCQkJCQkJb3V0cHV0OiA4NwoJCQkJCQkJdGhvdWdodHM6IDIxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IGNmZzgwMjExIEJTUyBSZXRyaWV2YWwgYW5kIEVycm9yIFJlcG9ydGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgX19jZmc4MDIxMV9nZXRfYnNzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSBsb29rdXBzIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgcmVwb3J0ICp3aHkqIGEgQlNTIG1pZ2h0IG5vdCBiZSBmb3VuZCBvciB1c2FibGUuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZz8gTGV0JiMzOTtzIGRpZyBpbi4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNldHRpbmcgYGV4dGFja2AgKG5ldGxpbmsgZXh0ZW5kZWQgQUNLKSBtZXNzYWdlcy4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgdGhhdCBhcmUgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBhIEJTUyBsb29rdXAgb3IgYXNzb2NpYXRpb24gYXR0ZW1wdC4gSXQgdXNlcyBgTkxfU0VUX0VSUl9NU0dgIGFuZCBgTkxfU0VUX0JBRF9BVFRSYC4gVGhlc2UgYXJlIHByZXR0eSBjbGVhciBzaWduYWxzIHRoYXQgdGhpcyBpcyBhYm91dCAqcmVwb3J0aW5nKiBlcnJvcnMsIG5vdCAqYWx0ZXJpbmcqIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gVGhleSBnaXZlIHVzZXJzcGFjZSBhIGJldHRlciBjbHVlIHdoeSBhIEJTUyB3YXNuJiMzOTt0IGZvdW5kIG9yIGNvdWxkbiYjMzk7dCBiZSB1c2VkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcgZm9yIGRlYnVnZ2luZyBhbmQgbW9uaXRvcmluZywgYnV0IGl0IGRvZXNuJiMzOTt0IGZ1bmRhbWVudGFsbHkgY2hhbmdlIGhvdyB0aGUga2VybmVsICpiZWhhdmVzKi4KCk5vdywgdGhlIGNoYW5nZXMgdG8gYF9fY2ZnODAyMTFfZ2V0X2Jzc2AgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIHRoZSBjaGVja3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjaGFuZ2VkLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGB1c2VfZm9yYCAoaW50ZW5kZWQgdXNhZ2UpIGFuZCBleHBpcmF0aW9uICpiZWZvcmUqIHRoZSBhY3R1YWwgQlNTIElEL1NTSUQgbWF0Y2guIE5vdywgdGhlIGBpc19ic3NgIGNoZWNrICh3aGljaCBpcyB0aGUgYWN0dWFsIG1hdGNoaW5nKSBjb21lcyBmaXJzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBjaGFuZ2VzIEJTUyBzZWxlY3Rpb24gYW5kIG11c3QgYmUgdmVyaWZpZWQuIEJ1dCBpZiBhIEJTUyAqZGlkbiYjMzk7dCogbWF0Y2gsIHRoZSBjb2RlIHdpbGwganVzdCBjb250aW51ZS4gSWYgaXQgKmRpZCogbWF0Y2gsIGFuZCB0aGUgQlNTIGlzIGV4cGlyZWQgb3IgdW51c2FibGUsIHRoZW4gdGhlIGNvZGUgc2V0cyBgZXhwaXJlZGAgb3IgYHVudXNhYmxlYCBmbGFncy4gSSBoYXZlIHZhbGlkYXRlZCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBjaGFuZ2UgQlNTIHNlbGVjdGlvbiwgaXQganVzdCBnaXZlcyBtb3JlIGdyYW51bGFyIGVycm9yIHJlcG9ydGluZy4KClRoZSBsb2dpYyBpbiBgaXNfYnNzYCBpcyBzdHJhaWdodGZvcndhcmQsIGNoZWNraW5nIEJTU0lEIGFuZCBTU0lELiBObyBzaWRlIGVmZmVjdHMuIE5vIHRyaWNrcy4KClRoZSBgbmw4MDIxMV9hc3NvY19ic3NgIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBzZXR0aW5nIGFwcHJvcHJpYXRlIGV4dGFjayBtZXNzYWdlcyB3aGVuIHJlcXVpcmVkIGFyZ3VtZW50cyBhcmUgbWlzc2luZywgb3Igd2hlbiBhbiBpbnZhbGlkIGNoYW5uZWwgaXMgcmVxdWVzdGVkLiBJdCBhbHNvIHNldHMgZXh0YWNrIHdoZW4gQlNTIGxvb2t1cCBmYWlscy4gQWdhaW4sIGVycm9yIHJlcG9ydGluZywgbm90IGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlcmUmIzM5O3MgYSBuZXcgS1VuaXQgdGVzdCwgYHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbmAsIHdoaWNoIGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4dGFjayBtZXNzYWdlcy4gVGhpcyBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KClNvLCBzdW1taW5nIGl0IHVwLCB0aGlzIHBhdGNoIGlzICpwdXJlbHkqIGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZXMgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGV4dGFjayBtZWNoYW5pc20uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGVycm9yIGxvZ2dpbmcgYW5kIHJlcG9ydGluZy4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4gVGhlIGNoYW5nZSBpbiB0aGUgZnVuY3Rpb24gb3JkZXIgaW4gYF9fY2ZnODAyMTFfZ2V0X2Jzc2Agb25seSBhZGRzIG1vcmUgcHJlY2lzZSBlcnJvciByZXBvcnRpbmcuIE5vdGhpbmcgaGVyZSBzY3JlYW1zICYjMzQ7ZnV6eiBtZS4mIzM0OyBBY2NvcmRpbmcgdG8gdGhlIHByb21wdCwgdGhpcyBwYXRjaCB3b3VsZCBmYWxsIHVuZGVyICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyYjMzQ7IGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0My41MzA0NjkyOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc3MzQ4NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0My41MzA0Nzg0MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTIxMzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBhNDllMzAyOWQ1Y2QxZGExM2Q0ZThkMjExNjU4YmRhZDNhZGQ5NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTQ6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBiOGU5ZmJiODllNjkxNi4uMTVjMDhiMjQ1MDJmZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5AQCAtODQyNCw2ICs4NDI0LDggQEAgY2ZnODAyMTFfaW5mb3JtX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXFx1MDAyNmVudW0gaWVlZTgwMjExX2Jzc190eXBlXFxuICAqIEBwcml2YWN5OiBwcml2YWN5IGZpbHRlciwgc2VlIFxcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XFxuICAqIEB1c2VfZm9yOiBpbmRpY2F0ZXMgd2hpY2ggdXNlIGlzIGludGVuZGVkXFxuKyAqIEBleHRhY2s6IChvcHRpb25hbCkgZXh0YWNrIHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIHJlYXNvbiB3aGVuIG5vXFxuKyAqXFx0dXNhYmxlIGVudHJ5IHdhcyBmb3VuZDsgbWF5IGJlICVOVUxMXFxuICAqXFxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxcbiAgKi9cXG5AQCAtODQzMyw3ICs4NDM1LDggQEAgc3RydWN0IGNmZzgwMjExX2JzcyAqX19jZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdFxcdGVudW0gaWVlZTgwMjExX2Jzc190eXBlIGJzc190eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9wcml2YWN5IHByaXZhY3ksXFxuLVxcdFxcdFxcdFxcdFxcdHUzMiB1c2VfZm9yKTtcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIFxcbiAvKipcXG4gICogY2ZnODAyMTFfZ2V0X2JzcyAtIGdldCBhIEJTUyByZWZlcmVuY2VcXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXFxuIHtcXG4gXFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHQgIGJzc190eXBlLCBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHQgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMKTtcXG4rXFx0XFx0XFx0XFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggMjQyMDcxYWQxMGQ2YzkuLjdmYjY3ODZhNWU4ZWIxIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEyODg5LDkgKzEyODg5LDExIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbi1cXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlkpO1xcbitcXHRyZXEuYnNzID0gX19jZmc4MDIxMV9nZXRfYnNzKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9CU1NfVFlQRV9FU1MsXFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxcbitcXHRcXHRcXHRcXHQgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdGlmICghcmVxLmJzcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbkBAIC0xMzAzNiw2ICsxMzAzOCw3IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBhc3NvY19saW5rX2lkLCBpbnQgbGlua19pZClcXG5AQCAtMTMwNDUsOCArMTMwNDgsMTAgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRjb25zdCB1OCAqYnNzaWQ7XFxuIFxcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcXG4gXFxuLVxcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcXG4rXFx0aWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fCAhYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGluZm8tXFx1MDAzZWV4dGFjaywgXFxcIkJTU0lEIG9yIGZyZXF1ZW5jeSBtaXNzaW5nXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHR9XFxuIFxcbiBcXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcXG4gXFxuQEAgLTEzMDU1LDggKzEzMDYwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcXG4gXFx0XFx0ZnJlcSArPSBubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV9PRkZTRVRdKTtcXG4gXFxuIFxcdGNoYW4gPSBubDgwMjExX2dldF92YWxpZF9jaGFuKFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSwgZnJlcSk7XFxuLVxcdGlmICghY2hhbilcXG4rXFx0aWYgKCFjaGFuKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGluZm8tXFx1MDAzZWV4dGFjaywgXFxcImludmFsaWQgb3IgZGlzYWJsZWQgY2hhbm5lbFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGFzc29jX2xpbmtfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0dXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfTUxEX0xJTks7XFxuQEAgLTEzMDY3LDcgKzEzMDc0LDcgQEAgc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKm5sODAyMTFfYXNzb2NfYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZVxcbiBcXHRcXHRcXHRcXHQgc3NpZCwgc3NpZF9sZW4sXFxuIFxcdFxcdFxcdFxcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxcbiBcXHRcXHRcXHRcXHQgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbi1cXHRcXHRcXHRcXHQgdXNlX2Zvcik7XFxuK1xcdFxcdFxcdFxcdCB1c2VfZm9yLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbiBcXHRpZiAoIWJzcylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcbkBAIC0xMzEwNiwxMyArMTMxMTMsMTIgQEAgc3RhdGljIGludCBubDgwMjExX3Byb2Nlc3NfbGlua3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxcbi1cXHRcXHRcXHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXFxuK1xcdFxcdFxcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBhc3NvY19saW5rX2lkLCBsaW5rX2lkKTtcXG4gXFx0XFx0aWYgKElTX0VSUihsaW5rc1tsaW5rX2lkXS5ic3MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcXG4gXFx0XFx0XFx0bGlua3NbbGlua19pZF0uYnNzID0gTlVMTDtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRXJyb3IgZmV0Y2hpbmcgQlNTIGZvciBsaW5rXFxcIik7XFxuK1xcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssIGxpbmspO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzMyOCw4ICsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKHJlcS5saW5rX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVxcdTAwM2VhdHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIC0xLCAtMSk7XFxuK1xcdFxcdHJlcS5ic3MgPSBubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzLCAtMSwgLTEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHJlcS5ic3MpKVxcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcXG4gXFx0XFx0YXBfYWRkciA9IHJlcS5ic3MtXFx1MDAzZWJzc2lkO1xcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uY1xcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxcbi1cXHRcXHRcXHRcXHRcXHR1MzIgdXNlX2ZvcilcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHVzZV9mb3IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcXG4gXFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCAqcmVzID0gTlVMTDtcXG4rXFx0Ym9vbCBleHBpcmVkID0gZmFsc2UsIHVudXNhYmxlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcXG4gXFx0aW50IGJzc19wcml2YWN5O1xcbiBcXG5AQCAtMTYzNCwyMiArMTYzNiwzOSBAQCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpfX2NmZzgwMjExX2dldF9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihic3MtXFx1MDAzZXB1Yi5ic3NpZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoKGJzcy1cXHUwMDNlcHViLnVzZV9mb3IgXFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxcbitcXHRcXHRpZiAoIWlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogRG9uJ3QgZ2V0IGV4cGlyZWQgQlNTIHN0cnVjdHMgKi9cXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXIobm93LCBic3MtXFx1MDAzZXRzICsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFhdG9taWNfcmVhZChcXHUwMDI2YnNzLVxcdTAwM2Vob2xkKSlcXG4rXFx0XFx0ICAgICFhdG9taWNfcmVhZChcXHUwMDI2YnNzLVxcdTAwM2Vob2xkKSkge1xcbitcXHRcXHRcXHRleHBpcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgoYnNzLVxcdTAwM2VwdWIudXNlX2ZvciBcXHUwMDI2IHVzZV9mb3IpICE9IHVzZV9mb3IpIHtcXG4rXFx0XFx0XFx0dW51c2FibGUgPSB0cnVlO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGlzX2JzcyhcXHUwMDI2YnNzLVxcdTAwM2VwdWIsIGJzc2lkLCBzc2lkLCBzc2lkX2xlbikpIHtcXG4tXFx0XFx0XFx0cmVzID0gYnNzO1xcbi1cXHRcXHRcXHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0cmVzID0gYnNzO1xcbitcXHRcXHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG4tXFx0aWYgKCFyZXMpXFxuK1xcdGlmICghcmVzKSB7XFxuK1xcdFxcdGlmICh1bnVzYWJsZSlcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cXFwiKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXhwaXJlZClcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXFxcIik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXFxcIik7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXFx1MDAyNnJlcy1cXHUwMDNlcHViKTtcXG4gXFx0cmV0dXJuIFxcdTAwMjZyZXMtXFx1MDAzZXB1YjtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3MvdGVzdHMvc2Nhbi5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uY1xcbkBAIC00MDIsNiArNDAyLDEyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgaW5mb3JtX2JzcyBjdHggPSB7XFxuK1xcdFxcdC50ZXN0ID0gdGVzdCxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcXG4rXFx0c3RydWN0IGNmZzgwMjExX2luZm9ybV9ic3MgaW5mb3JtX2JzcyA9IHtcXG4rXFx0XFx0LnNpZ25hbCA9IDUwLFxcbitcXHRcXHQuZHJ2X2RhdGEgPSBcXHUwMDI2Y3R4LFxcbitcXHR9O1xcbitcXHRjb25zdCB1OCBic3NpZFtFVEhfQUxFTl0gPSB7IDB4MTAsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYgfTtcXG4rXFx0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBpZXNbXSA9IHtcXG4rXFx0XFx0WzBdID0gV0xBTl9FSURfU1NJRCxcXG4rXFx0XFx0WzFdID0gNCxcXG4rXFx0XFx0WzJdID0gJ1QnLCAnRScsICdTJywgJ1QnXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuK1xcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcywgKmJzczIsICpmb3VuZDtcXG4rXFxuK1xcdGluZm9ybV9ic3MuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHood2lwaHksIE1IWl9UT19LSFooMjQxMikpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcXG4rXFxuK1xcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXFx1MDAyNmluZm9ybV9ic3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XFxuK1xcdGlic3MgPSBjb250YWluZXJfb2YoYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpO1xcbitcXG4rXFx0LyogRnJlc2ggdXNhYmxlIGVudHJ5OiBmb3VuZCwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcbitcXHQvKiBObyBlbnRyeSBhdCBhbGwgZm9yIHRoaXMgQlNTSUQgKi9cXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIG90aGVyX2Jzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFxcXCJCU1Mgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xcXCIpO1xcbitcXG4rXFx0LyogRnJlc2ggZW50cnkgdGhhdCBpcyBub3QgdXNhYmxlIGZvciB0aGUgcmVxdWVzdGVkIHVzZSAqL1xcbitcXHRleHRhY2suX21zZyA9IE5VTEw7XFxuK1xcdGJzcy1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXHRic3MtXFx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcXG4rXFxuK1xcdC8qIEV4cGlyZWQgZW50cnksIFxcdTAwM2UgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMzBzKSBvbGQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRpYnNzLVxcdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xcbitcXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFxcdTAwMjZleHRhY2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XFxuK1xcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcXG4rXFx0XFx0XFx0ICAgXFxcIkJTUyBlbnRyeSBpcyBleHBpcmVkLCBzY2FuIGFnYWluXFxcIik7XFxuK1xcbitcXHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xcbitcXHRleHRhY2suX21zZyA9IE5VTEw7XFxuK1xcdGJzcy1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBic3NpZCwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cXFwiKTtcXG4rXFx0YnNzLVxcdTAwM2V1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9BTEw7XFxuK1xcbitcXHQvKiBFeHBpcmVkIGJ1dCBoZWxkIGVudHJpZXMgYXJlIHN0aWxsIHVzYWJsZSwgbm8gbWVzc2FnZSBpcyBzZXQgKi9cXG4rXFx0ZXh0YWNrLl9tc2cgPSBOVUxMO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZpYnNzLVxcdTAwM2Vob2xkLCAxKTtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuK1xcdFxcdFxcdFxcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcXHUwMDI2ZXh0YWNrKTtcXG4rXFx0S1VOSVRfQVNTRVJUX1BUUl9FUSh0ZXN0LCBmb3VuZCwgYnNzKTtcXG4rXFx0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xcbitcXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBmb3VuZCk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmlic3MtXFx1MDAzZWhvbGQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2l0aCBib3RoIGFuIGV4cGlyZWQgZW50cnkgYW5kIGEgZnJlc2gtYnV0LXVudXNhYmxlIGVudHJ5XFxuK1xcdCAqIG1hdGNoaW5nLCB0aGUgdW51c2FibGUgb25lIGRldGVybWluZXMgdGhlIG1lc3NhZ2U6IGEgY3VycmVudFxcbitcXHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cXG4rXFx0ICovXFxuK1xcdGJzczIgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2RhdGEod2lwaHksIFxcdTAwMjZpbmZvcm1fYnNzLFxcbitcXHRcXHRcXHRcXHRcXHRDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIG90aGVyX2Jzc2lkLFxcbitcXHRcXHRcXHRcXHRcXHQwLCAweDEyMzQsIDEwMCwgaWVzLCBzaXplb2YoaWVzKSxcXG4rXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBic3MyKTtcXG4rXFx0YnNzMi1cXHUwMDNldXNlX2ZvciA9IDA7XFxuK1xcdGV4dGFjay5fbXNnID0gTlVMTDtcXG4rXFx0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIE5VTEwsIFxcXCJURVNUXFxcIiwgNCxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcXG4rXFx0XFx0XFx0XFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxcbitcXHRcXHRcXHRcXHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXFx1MDAyNmV4dGFjayk7XFxuK1xcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxcbitcXHRcXHRcXHQgICBcXFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblxcXCIpO1xcbitcXG4rXFx0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgYnNzMik7XFxuK1xcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XFxuIFxcdGNvbnN0IGNoYXIgKmRlc2M7XFxuIFxcdGludCBtbGRfaWQ7XFxuQEAgLTYxNyw3ICs3MzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3NfbWxfc3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0bGlua19ic3MgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIHN0YV9wcm9mLmJzc2lkLCBOVUxMLCAwLFxcbiBcXHRcXHRcXHRcXHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxcbiBcXHRcXHRcXHRcXHQgICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXFxuLVxcdFxcdFxcdFxcdCAgICAgIDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAwLCBOVUxMKTtcXG4gXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGxpbmtfYnNzKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGxpbmtfYnNzLVxcdTAwM2VzaWduYWwsIDApO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXFx1MDAzZWJlYWNvbl9pbnRlcnZhbCxcXG5AQCAtODU1LDYgKzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgaW5mb3JtX2Jzc190ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UodGVzdF9pbmZvcm1fYnNzX3NzaWRfb25seSksXFxuK1xcdEtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSxcXG4gXFx0S1VOSVRfQ0FTRV9QQVJBTSh0ZXN0X2luZm9ybV9ic3NfbWxfc3RhLCBpbmZvcm1fYnNzX21sX3N0YV9nZW5fcGFyYW1zKSxcXG4gXFx0e31cXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTQ6NDQuMTE2NjI3MzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIxODczMjQ3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBuZXRsaW5rIGV4dGVuZGVkIEFDSyAoZXh0YWNrKSBtZXNzYWdlcyBmb3IgYmV0dGVyIGVycm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2Ugd2hlbiBhIEJTUyBpcyBub3QgZm91bmQgb3IgY2Fubm90IGJlIHVzZWQuIEl0IGFsc28gYWRkcyBhIEtVbml0IHRlc3QgZm9yIHRoZXNlIG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IG9yIHN0YXRlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYTQ5ZTMwMjlkNWNkMWRhMTNkNGU4ZDIxMTY1OGJkYWQzYWRkOTcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTQ6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuaW5kZXggYjhlOWZiYjg5ZTY5MTYuLjE1YzA4YjI0NTAyZmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTg0MjQsNiArODQyNCw4IEBAIGNmZzgwMjExX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSxcbiAgKiBAYnNzX3R5cGU6IHR5cGUgb2YgQlNTLCBzZWUgXHUwMDI2ZW51bSBpZWVlODAyMTFfYnNzX3R5cGVcbiAgKiBAcHJpdmFjeTogcHJpdmFjeSBmaWx0ZXIsIHNlZSBcdTAwMjZlbnVtIGllZWU4MDIxMV9wcml2YWN5XG4gICogQHVzZV9mb3I6IGluZGljYXRlcyB3aGljaCB1c2UgaXMgaW50ZW5kZWRcbisgKiBAZXh0YWNrOiAob3B0aW9uYWwpIGV4dGFjayB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSByZWFzb24gd2hlbiBub1xuKyAqXHR1c2FibGUgZW50cnkgd2FzIGZvdW5kOyBtYXkgYmUgJU5VTExcbiAgKlxuICAqIFJldHVybjogUmVmZXJlbmNlLWNvdW50ZWQgQlNTIG9uIHN1Y2Nlc3MuICVOVUxMIG9uIGVycm9yLlxuICAqL1xuQEAgLTg0MzMsNyArODQzNSw4IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2Zvcik7XG4rXHRcdFx0XHRcdHUzMiB1c2VfZm9yLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFxuIC8qKlxuICAqIGNmZzgwMjExX2dldF9ic3MgLSBnZXQgYSBCU1MgcmVmZXJlbmNlXG5AQCAtODQ1Nyw3ICs4NDYwLDcgQEAgY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsXG4ge1xuIFx0cmV0dXJuIF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxuIFx0XHRcdFx0ICBic3NfdHlwZSwgcHJpdmFjeSxcbi1cdFx0XHRcdCAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwpO1xuK1x0XHRcdFx0ICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmZzgwMjExX2JzcyAqXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDI0MjA3MWFkMTBkNmM5Li43ZmI2Nzg2YTVlOGViMSAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xMjg4OSw5ICsxMjg4OSwxMSBAQCBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sXG4tXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuLVx0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTtcbitcdHJlcS5ic3MgPSBfX2NmZzgwMjExX2dldF9ic3MoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLFxuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLFxuK1x0XHRcdFx0ICAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIXJlcS5ic3MpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTEzMDM2LDYgKzEzMDM4LDcgQEAgc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbiBcdFx0XHRcdFx0ICAgICAgaW50IGFzc29jX2xpbmtfaWQsIGludCBsaW5rX2lkKVxuQEAgLTEzMDQ1LDggKzEzMDQ4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdGNvbnN0IHU4ICpic3NpZDtcbiBcdHUzMiBmcmVxLCB1c2VfZm9yID0gMDtcbiBcbi1cdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSlcbitcdGlmICghYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwgIWF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjaywgXCJCU1NJRCBvciBmcmVxdWVuY3kgbWlzc2luZ1wiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4gXG4gXHRic3NpZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbiBcbkBAIC0xMzA1NSw4ICsxMzA2MCwxMCBAQCBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2JzcyAqbmw4MDIxMV9hc3NvY19ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlXG4gXHRcdGZyZXEgKz0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFfT0ZGU0VUXSk7XG4gXG4gXHRjaGFuID0gbmw4MDIxMV9nZXRfdmFsaWRfY2hhbihcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LCBmcmVxKTtcbi1cdGlmICghY2hhbilcbitcdGlmICghY2hhbikge1xuK1x0XHROTF9TRVRfRVJSX01TRyhpbmZvLVx1MDAzZWV4dGFjaywgXCJpbnZhbGlkIG9yIGRpc2FibGVkIGNoYW5uZWxcIik7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1x0fVxuIFxuIFx0aWYgKGFzc29jX2xpbmtfaWQgXHUwMDNlPSAwKVxuIFx0XHR1c2VfZm9yID0gTkw4MDIxMV9CU1NfVVNFX0ZPUl9NTERfTElOSztcbkBAIC0xMzA2Nyw3ICsxMzA3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpubDgwMjExX2Fzc29jX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2VcbiBcdFx0XHRcdCBzc2lkLCBzc2lkX2xlbixcbiBcdFx0XHRcdCBJRUVFODAyMTFfQlNTX1RZUEVfRVNTLFxuIFx0XHRcdFx0IElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbi1cdFx0XHRcdCB1c2VfZm9yKTtcbitcdFx0XHRcdCB1c2VfZm9yLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoIWJzcylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXG5AQCAtMTMxMDYsMTMgKzEzMTEzLDEyIEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9wcm9jZXNzX2xpbmtzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPVxuLVx0XHRcdG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBhdHRycyxcbitcdFx0XHRubDgwMjExX2Fzc29jX2JzcyhyZGV2LCBpbmZvLCBzc2lkLCBzc2lkX2xlbiwgYXR0cnMsXG4gXHRcdFx0XHRcdCAgYXNzb2NfbGlua19pZCwgbGlua19pZCk7XG4gXHRcdGlmIChJU19FUlIobGlua3NbbGlua19pZF0uYnNzKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobGlua3NbbGlua19pZF0uYnNzKTtcbiBcdFx0XHRsaW5rc1tsaW5rX2lkXS5ic3MgPSBOVUxMO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmssXG4tXHRcdFx0XHRcdCAgICBcIkVycm9yIGZldGNoaW5nIEJTUyBmb3IgbGlua1wiKTtcbitcdFx0XHROTF9TRVRfQkFEX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIGxpbmspO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiBcbkBAIC0xMzMyOCw4ICsxMzMzNCw4IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJlcS5saW5rX2lkIFx1MDAzZT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIHNzaWQsIHNzaWRfbGVuLCBpbmZvLVx1MDAzZWF0dHJzLFxuLVx0XHRcdFx0XHQgICAgLTEsIC0xKTtcbitcdFx0cmVxLmJzcyA9IG5sODAyMTFfYXNzb2NfYnNzKHJkZXYsIGluZm8sIHNzaWQsIHNzaWRfbGVuLFxuK1x0XHRcdFx0XHQgICAgaW5mby1cdTAwM2VhdHRycywgLTEsIC0xKTtcbiBcdFx0aWYgKElTX0VSUihyZXEuYnNzKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihyZXEuYnNzKTtcbiBcdFx0YXBfYWRkciA9IHJlcS5ic3MtXHUwMDNlYnNzaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbmluZGV4IDA1YjdkYzZiNzY2Y2U5Li5mMjZlODQzNmRiYzEyYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmNcbkBAIC0xNjA5LDEwICsxNjA5LDEyIEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdFx0XHRjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLFxuIFx0XHRcdFx0XHRlbnVtIGllZWU4MDIxMV9ic3NfdHlwZSBic3NfdHlwZSxcbiBcdFx0XHRcdFx0ZW51bSBpZWVlODAyMTFfcHJpdmFjeSBwcml2YWN5LFxuLVx0XHRcdFx0XHR1MzIgdXNlX2ZvcilcbitcdFx0XHRcdFx0dTMyIHVzZV9mb3IsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19yZGV2KHdpcGh5KTtcbiBcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7XG4rXHRib29sIGV4cGlyZWQgPSBmYWxzZSwgdW51c2FibGUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiBcdGludCBic3NfcHJpdmFjeTtcbiBcbkBAIC0xNjM0LDIyICsxNjM2LDM5IEBAIHN0cnVjdCBjZmc4MDIxMV9ic3MgKl9fY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzLVx1MDAzZXB1Yi5ic3NpZCkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICgoYnNzLVx1MDAzZXB1Yi51c2VfZm9yIFx1MDAyNiB1c2VfZm9yKSAhPSB1c2VfZm9yKVxuK1x0XHRpZiAoIWlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHQvKiBEb24ndCBnZXQgZXhwaXJlZCBCU1Mgc3RydWN0cyAqL1xuIFx0XHRpZiAodGltZV9hZnRlcihub3csIGJzcy1cdTAwM2V0cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWF0b21pY19yZWFkKFx1MDAyNmJzcy1cdTAwM2Vob2xkKSlcbitcdFx0ICAgICFhdG9taWNfcmVhZChcdTAwMjZic3MtXHUwMDNlaG9sZCkpIHtcbitcdFx0XHRleHBpcmVkID0gdHJ1ZTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoKGJzcy1cdTAwM2VwdWIudXNlX2ZvciBcdTAwMjYgdXNlX2ZvcikgIT0gdXNlX2Zvcikge1xuK1x0XHRcdHVudXNhYmxlID0gdHJ1ZTtcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGlzX2JzcyhcdTAwMjZic3MtXHUwMDNlcHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7XG4tXHRcdFx0cmVzID0gYnNzO1xuLVx0XHRcdGJzc19yZWZfZ2V0KHJkZXYsIHJlcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbitcbitcdFx0cmVzID0gYnNzO1xuK1x0XHRic3NfcmVmX2dldChyZGV2LCByZXMpO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xuLVx0aWYgKCFyZXMpXG4rXHRpZiAoIXJlcykge1xuK1x0XHRpZiAodW51c2FibGUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiQlNTIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvblwiKTtcbitcdFx0ZWxzZSBpZiAoZXhwaXJlZClcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJCU1MgZW50cnkgaXMgZXhwaXJlZCwgc2NhbiBhZ2FpblwiKTtcbitcdFx0ZWxzZVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkJTUyBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXCIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcdHRyYWNlX2NmZzgwMjExX3JldHVybl9ic3MoXHUwMDI2cmVzLVx1MDAzZXB1Yik7XG4gXHRyZXR1cm4gXHUwMDI2cmVzLVx1MDAzZXB1YjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3Rlc3RzL3NjYW4uYyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbmluZGV4IGIxYTljMTQ2NmQ2Y2JkLi5lNjJiMDFmOGNiZTVhYyAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbisrKyBiL25ldC93aXJlbGVzcy90ZXN0cy9zY2FuLmNcbkBAIC00MDIsNiArNDAyLDEyNSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IGluZm9ybV9ic3MgY3R4ID0ge1xuK1x0XHQudGVzdCA9IHRlc3QsXG4rXHR9O1xuK1x0c3RydWN0IHdpcGh5ICp3aXBoeSA9IFRfV0lQSFkodGVzdCwgY3R4KTtcbitcdHN0cnVjdCBjZmc4MDIxMV9pbmZvcm1fYnNzIGluZm9ybV9ic3MgPSB7XG4rXHRcdC5zaWduYWwgPSA1MCxcbitcdFx0LmRydl9kYXRhID0gXHUwMDI2Y3R4LFxuK1x0fTtcbitcdGNvbnN0IHU4IGJzc2lkW0VUSF9BTEVOXSA9IHsgMHgxMCwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiB9O1xuK1x0Y29uc3QgdTggb3RoZXJfYnNzaWRbRVRIX0FMRU5dID0geyAweDY2LCAweDU1LCAweDQ0LCAweDMzLCAweDIyLCAweDExIH07XG4rXHRzdGF0aWMgY29uc3QgdTggaWVzW10gPSB7XG4rXHRcdFswXSA9IFdMQU5fRUlEX1NTSUQsXG4rXHRcdFsxXSA9IDQsXG4rXHRcdFsyXSA9ICdUJywgJ0UnLCAnUycsICdUJ1xuK1x0fTtcbitcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmlic3M7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuK1x0c3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCAqYnNzMiwgKmZvdW5kO1xuK1xuK1x0aW5mb3JtX2Jzcy5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeih3aXBoeSwgTUhaX1RPX0tIWigyNDEyKSk7XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgaW5mb3JtX2Jzcy5jaGFuKTtcbitcbitcdGJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbitcdFx0XHRcdCAgICAgICBDRkc4MDIxMV9CU1NfRlRZUEVfUFJFU1AsIGJzc2lkLCAwLFxuK1x0XHRcdFx0ICAgICAgIDB4MTIzNCwgMTAwLCBpZXMsIHNpemVvZihpZXMpLFxuK1x0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzcyk7XG4rXHRpYnNzID0gY29udGFpbmVyX29mKGJzcywgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTtcbitcbitcdC8qIEZyZXNoIHVzYWJsZSBlbnRyeTogZm91bmQsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1xuK1x0LyogTm8gZW50cnkgYXQgYWxsIGZvciB0aGlzIEJTU0lEICovXG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgb3RoZXJfYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csIFwiQlNTIG5vdCBmb3VuZCBpbiBzY2FuIHJlc3VsdHNcIik7XG4rXG4rXHQvKiBGcmVzaCBlbnRyeSB0aGF0IGlzIG5vdCB1c2FibGUgZm9yIHRoZSByZXF1ZXN0ZWQgdXNlICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IDA7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9FWFBFQ1RfTlVMTCh0ZXN0LCBmb3VuZCk7XG4rXHRLVU5JVF9FWFBFQ1RfU1RSRVEodGVzdCwgZXh0YWNrLl9tc2csXG4rXHRcdFx0ICAgXCJCU1MgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIpO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSBOTDgwMjExX0JTU19VU0VfRk9SX0FMTDtcbitcbitcdC8qIEV4cGlyZWQgZW50cnksIFx1MDAzZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFICgzMHMpIG9sZCAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0aWJzcy1cdTAwM2V0cyA9IGppZmZpZXMgLSA2MCAqIEhaO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cIik7XG4rXG4rXHQvKiBBbiBlbnRyeSBib3RoIGV4cGlyZWQgYW5kIHVudXNhYmxlIHJlcG9ydHMgZXhwaXJlZCAqL1xuK1x0ZXh0YWNrLl9tc2cgPSBOVUxMO1xuK1x0YnNzLVx1MDAzZXVzZV9mb3IgPSAwO1xuK1x0Zm91bmQgPSBfX2NmZzgwMjExX2dldF9ic3Mod2lwaHksIE5VTEwsIGJzc2lkLCBOVUxMLCAwLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX0JTU19UWVBFX0FOWSxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9QUklWQUNZX0FOWSxcbitcdFx0XHRcdCAgIE5MODAyMTFfQlNTX1VTRV9GT1JfTk9STUFMLCBcdTAwMjZleHRhY2spO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZm91bmQpO1xuK1x0S1VOSVRfRVhQRUNUX1NUUkVRKHRlc3QsIGV4dGFjay5fbXNnLFxuK1x0XHRcdCAgIFwiQlNTIGVudHJ5IGlzIGV4cGlyZWQsIHNjYW4gYWdhaW5cIik7XG4rXHRic3MtXHUwMDNldXNlX2ZvciA9IE5MODAyMTFfQlNTX1VTRV9GT1JfQUxMO1xuK1xuK1x0LyogRXhwaXJlZCBidXQgaGVsZCBlbnRyaWVzIGFyZSBzdGlsbCB1c2FibGUsIG5vIG1lc3NhZ2UgaXMgc2V0ICovXG4rXHRleHRhY2suX21zZyA9IE5VTEw7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmlic3MtXHUwMDNlaG9sZCwgMSk7XG4rXHRmb3VuZCA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgYnNzaWQsIE5VTEwsIDAsXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuK1x0XHRcdFx0ICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuK1x0XHRcdFx0ICAgTkw4MDIxMV9CU1NfVVNFX0ZPUl9OT1JNQUwsIFx1MDAyNmV4dGFjayk7XG4rXHRLVU5JVF9BU1NFUlRfUFRSX0VRKHRlc3QsIGZvdW5kLCBic3MpO1xuK1x0S1VOSVRfRVhQRUNUX05VTEwodGVzdCwgZXh0YWNrLl9tc2cpO1xuK1x0Y2ZnODAyMTFfcHV0X2Jzcyh3aXBoeSwgZm91bmQpO1xuK1x0YXRvbWljX3NldChcdTAwMjZpYnNzLVx1MDAzZWhvbGQsIDApO1xuK1xuK1x0LypcbitcdCAqIFdpdGggYm90aCBhbiBleHBpcmVkIGVudHJ5IGFuZCBhIGZyZXNoLWJ1dC11bnVzYWJsZSBlbnRyeVxuK1x0ICogbWF0Y2hpbmcsIHRoZSB1bnVzYWJsZSBvbmUgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZTogYSBjdXJyZW50XG4rXHQgKiBlbnRyeSBleGlzdHMsIHNvIHN1Z2dlc3RpbmcgYSByZXNjYW4gd291bGQgYmUgbWlzbGVhZGluZy5cbitcdCAqL1xuK1x0YnNzMiA9IGNmZzgwMjExX2luZm9ybV9ic3NfZGF0YSh3aXBoeSwgXHUwMDI2aW5mb3JtX2JzcyxcbitcdFx0XHRcdFx0Q0ZHODAyMTFfQlNTX0ZUWVBFX1BSRVNQLCBvdGhlcl9ic3NpZCxcbitcdFx0XHRcdFx0MCwgMHgxMjM0LCAxMDAsIGllcywgc2l6ZW9mKGllcyksXG4rXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGJzczIpO1xuK1x0YnNzMi1cdTAwM2V1c2VfZm9yID0gMDtcbitcdGV4dGFjay5fbXNnID0gTlVMTDtcbitcdGZvdW5kID0gX19jZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBOVUxMLCBOVUxMLCBcIlRFU1RcIiwgNCxcbitcdFx0XHRcdCAgIElFRUU4MDIxMV9CU1NfVFlQRV9BTlksXG4rXHRcdFx0XHQgICBJRUVFODAyMTFfUFJJVkFDWV9BTlksXG4rXHRcdFx0XHQgICBOTDgwMjExX0JTU19VU0VfRk9SX05PUk1BTCwgXHUwMDI2ZXh0YWNrKTtcbitcdEtVTklUX0VYUEVDVF9OVUxMKHRlc3QsIGZvdW5kKTtcbitcdEtVTklUX0VYUEVDVF9TVFJFUSh0ZXN0LCBleHRhY2suX21zZyxcbitcdFx0XHQgICBcIkJTUyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb25cIik7XG4rXG4rXHRjZmc4MDIxMV9wdXRfYnNzKHdpcGh5LCBic3MyKTtcbitcdGNmZzgwMjExX3B1dF9ic3Mod2lwaHksIGJzcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaW5mb3JtX2Jzc19tbF9zdGFfY2FzZSB7XG4gXHRjb25zdCBjaGFyICpkZXNjO1xuIFx0aW50IG1sZF9pZDtcbkBAIC02MTcsNyArNzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbmZvcm1fYnNzX21sX3N0YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRsaW5rX2JzcyA9IF9fY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgTlVMTCwgc3RhX3Byb2YuYnNzaWQsIE5VTEwsIDAsXG4gXHRcdFx0XHQgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLFxuIFx0XHRcdFx0ICAgICAgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZLFxuLVx0XHRcdFx0ICAgICAgMCk7XG4rXHRcdFx0XHQgICAgICAwLCBOVUxMKTtcbiBcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBsaW5rX2Jzcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbGlua19ic3MtXHUwMDNlc2lnbmFsLCAwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBsaW5rX2Jzcy1cdTAwM2ViZWFjb25faW50ZXJ2YWwsXG5AQCAtODU1LDYgKzk3NCw3IEBAIGt1bml0X3Rlc3Rfc3VpdGUoZ2VuX25ld19pZSk7XG4gXG4gc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGluZm9ybV9ic3NfdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRSh0ZXN0X2luZm9ybV9ic3Nfc3NpZF9vbmx5KSxcbitcdEtVTklUX0NBU0UodGVzdF9nZXRfYnNzX21pc3NfcmVhc29uKSxcbiBcdEtVTklUX0NBU0VfUEFSQU0odGVzdF9pbmZvcm1fYnNzX21sX3N0YSwgaW5mb3JtX2Jzc19tbF9zdGFfZ2VuX3BhcmFtcyksXG4gXHR7fVxuIH07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1NDo0NC4xMTY2Mjk3ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjE4NzMwMjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogY2ZnODAyMTEgQlNTIFJldHJpZXZhbCBhbmQgRXJyb3IgUmVwb3J0aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgX19jZmc4MDIxMV9nZXRfYnNzYCBhbmQgYG5sODAyMTFfYXNzb2NfYnNzYCwgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSBCU1MgKEJhc2ljIFNlcnZpY2UgU2V0KSBsb29rdXBzIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgcmVwb3J0ICp3aHkqIGEgQlNTIG1pZ2h0IG5vdCBiZSBmb3VuZCBvciB1c2FibGUuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IG5lZWQgZnV6emluZz8gTGV0J3MgZGlnIGluLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzZXR0aW5nIGBleHRhY2tgIChuZXRsaW5rIGV4dGVuZGVkIEFDSykgbWVzc2FnZXMuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIHRoYXQgYXJlIHNlbnQgYmFjayB0byB1c2Vyc3BhY2Ugd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYSBCU1MgbG9va3VwIG9yIGFzc29jaWF0aW9uIGF0dGVtcHQuIEl0IHVzZXMgYE5MX1NFVF9FUlJfTVNHYCBhbmQgYE5MX1NFVF9CQURfQVRUUmAuIFRoZXNlIGFyZSBwcmV0dHkgY2xlYXIgc2lnbmFscyB0aGF0IHRoaXMgaXMgYWJvdXQgKnJlcG9ydGluZyogZXJyb3JzLCBub3QgKmFsdGVyaW5nKiB0aGUgY29yZSBrZXJuZWwgbG9naWMuIFRoZXkgZ2l2ZSB1c2Vyc3BhY2UgYSBiZXR0ZXIgY2x1ZSB3aHkgYSBCU1Mgd2Fzbid0IGZvdW5kIG9yIGNvdWxkbid0IGJlIHVzZWQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nIGFuZCBtb25pdG9yaW5nLCBidXQgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGNoYW5nZSBob3cgdGhlIGtlcm5lbCAqYmVoYXZlcyouXG5cbk5vdywgdGhlIGNoYW5nZXMgdG8gYF9fY2ZnODAyMTFfZ2V0X2Jzc2AgY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIHRoZSBjaGVja3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBjaGFuZ2VkLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGB1c2VfZm9yYCAoaW50ZW5kZWQgdXNhZ2UpIGFuZCBleHBpcmF0aW9uICpiZWZvcmUqIHRoZSBhY3R1YWwgQlNTIElEL1NTSUQgbWF0Y2guIE5vdywgdGhlIGBpc19ic3NgIGNoZWNrICh3aGljaCBpcyB0aGUgYWN0dWFsIG1hdGNoaW5nKSBjb21lcyBmaXJzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBjaGFuZ2VzIEJTUyBzZWxlY3Rpb24gYW5kIG11c3QgYmUgdmVyaWZpZWQuIEJ1dCBpZiBhIEJTUyAqZGlkbid0KiBtYXRjaCwgdGhlIGNvZGUgd2lsbCBqdXN0IGNvbnRpbnVlLiBJZiBpdCAqZGlkKiBtYXRjaCwgYW5kIHRoZSBCU1MgaXMgZXhwaXJlZCBvciB1bnVzYWJsZSwgdGhlbiB0aGUgY29kZSBzZXRzIGBleHBpcmVkYCBvciBgdW51c2FibGVgIGZsYWdzLiBJIGhhdmUgdmFsaWRhdGVkIHRoaXMgY2hhbmdlIGRvZXNuJ3QgY2hhbmdlIEJTUyBzZWxlY3Rpb24sIGl0IGp1c3QgZ2l2ZXMgbW9yZSBncmFudWxhciBlcnJvciByZXBvcnRpbmcuXG5cblRoZSBsb2dpYyBpbiBgaXNfYnNzYCBpcyBzdHJhaWdodGZvcndhcmQsIGNoZWNraW5nIEJTU0lEIGFuZCBTU0lELiBObyBzaWRlIGVmZmVjdHMuIE5vIHRyaWNrcy5cblxuVGhlIGBubDgwMjExX2Fzc29jX2Jzc2AgY2hhbmdlcyBhcmUgYWxsIGFib3V0IHNldHRpbmcgYXBwcm9wcmlhdGUgZXh0YWNrIG1lc3NhZ2VzIHdoZW4gcmVxdWlyZWQgYXJndW1lbnRzIGFyZSBtaXNzaW5nLCBvciB3aGVuIGFuIGludmFsaWQgY2hhbm5lbCBpcyByZXF1ZXN0ZWQuIEl0IGFsc28gc2V0cyBleHRhY2sgd2hlbiBCU1MgbG9va3VwIGZhaWxzLiBBZ2FpbiwgZXJyb3IgcmVwb3J0aW5nLCBub3QgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZXJlJ3MgYSBuZXcgS1VuaXQgdGVzdCwgYHRlc3RfZ2V0X2Jzc19taXNzX3JlYXNvbmAsIHdoaWNoIGV4cGxpY2l0bHkgdmVyaWZpZXMgdGhlIGV4dGFjayBtZXNzYWdlcy4gVGhpcyBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrIGJ1dCBkb2Vzbid0IGNoYW5nZSB0aGUga2VybmVsJ3MgYmVoYXZpb3IuXG5cblNvLCBzdW1taW5nIGl0IHVwLCB0aGlzIHBhdGNoIGlzICpwdXJlbHkqIGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZXMgc2VudCBiYWNrIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGV4dGFjayBtZWNoYW5pc20uIEl0J3MgZXNzZW50aWFsbHkgZXJyb3IgbG9nZ2luZyBhbmQgcmVwb3J0aW5nLiBJdCBkb2Vzbid0IG1vZGlmeSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuIFRoZSBjaGFuZ2UgaW4gdGhlIGZ1bmN0aW9uIG9yZGVyIGluIGBfX2NmZzgwMjExX2dldF9ic3NgIG9ubHkgYWRkcyBtb3JlIHByZWNpc2UgZXJyb3IgcmVwb3J0aW5nLiBOb3RoaW5nIGhlcmUgc2NyZWFtcyBcImZ1enogbWUuXCIgQWNjb3JkaW5nIHRvIHRoZSBwcm9tcHQsIHRoaXMgcGF0Y2ggd291bGQgZmFsbCB1bmRlciBcIlB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXNcIiBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuIEknbSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA1LCJPdXRwdXRUb2tlbnMiOjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDEzOjU1OjA2LjMwMzkzNDc2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG5ldGxpbmsgZXh0ZW5kZWQgQUNLIChleHRhY2spIG1lc3NhZ2VzIGZvciBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB3aGVuIGEgQlNTIGlzIG5vdCBmb3VuZCBvciBjYW5ub3QgYmUgdXNlZC4gSXQgYWxzbyBhZGRzIGEgS1VuaXQgdGVzdCBmb3IgdGhlc2UgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgY29yZSBrZXJuZWwgZXhlY3V0aW9uIGZsb3cgb3Igc3RhdGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbmV0bGluayBleHRlbmRlZCBBQ0sgKGV4dGFjaykgbWVzc2FnZXMgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoZW4gYSBCU1MgaXMgbm90IGZvdW5kIG9yIGNhbm5vdCBiZSB1c2VkLiBJdCBhbHNvIGFkZHMgYSBLVW5pdCB0ZXN0IGZvciB0aGVzZSBtZXNzYWdlcy4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBvciBzdGF0ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8gxcv[1] Phase: Running StartedAt: 2026-07-22 13:55:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gxcv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 13:55:17 +0000 UTC FinishedAt: 2026-07-22 13:55:27 +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,}