Name: series-workflow7blzk Phase: Failed StartedAt: 2026-09-10 22:53:41 +0000 UTC FinishedAt: 2026-09-10 22:56:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7blzk[0] Phase: Succeeded StartedAt: 2026-09-10 22:53:41 +0000 UTC FinishedAt: 2026-09-10 22:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7blzk[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 22:53:41 +0000 UTC FinishedAt: 2026-09-10 22:55:50 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOThhYTU0NzBiMzAwMWQzNTEyNTI5NTMwOTY1ZWU0MjA1MDJkMGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jXG5pbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfaW9faW4oaW50IHNpemUsIHUxNiBwb3J0KVxuIFx0XHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcbiBcdFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxuIFx0XHQucjEyID0gc2l6ZSxcbi1cdFx0LnIxMyA9IDAsXG4mIzQzO1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXG5AQCAtMzgsNyAmIzQzOzM4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRkeF9pb19vdXQoaW50IHNpemUsIHUxNiBwb3J0LCB1MzIgdmFsdWUpXG4gXHRcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxuIFx0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4gXHRcdC5yMTIgPSBzaXplLFxuLVx0XHQucjEzID0gMSxcbiYjNDM7XHRcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1dSSVRFLFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdFx0LnIxNSA9IHZhbHVlLFxuIFx0fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCBmOTA0YTYzNmQ0NDliLi43ZDFhOTNlZTI1MzQ4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMjQsMTAgJiM0MzsyNCw2IEBAXG4gI2RlZmluZSBFUFRfUkVBRFx0MFxuICNkZWZpbmUgRVBUX1dSSVRFXHQxXG4gXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXG4tI2RlZmluZSBQT1JUX1JFQURcdDBcbi0jZGVmaW5lIFBPUlRfV1JJVEVcdDFcbi1cbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXG4gI2RlZmluZSBWRV9JU19JT19JTihlKVx0XHQoKGUpIFx1MDAyNiBCSVQoMykpXG4gI2RlZmluZSBWRV9HRVRfSU9fU0laRShlKVx0KCgoZSkgXHUwMDI2IEdFTk1BU0soMiwgMCkpICYjNDM7IDEpXG5AQCAtNjkxLDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSBQT1JUX1JFQUQsXG4mIzQzO1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXHRib29sIHN1Y2Nlc3M7XG5AQCAtNzIwLDcgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG4gXHQgKiBcJiMzNDtUREcuVlAuVk1DQUxMXHUwMDNjSW5zdHJ1Y3Rpb24uSU9cdTAwM2VcJiMzNDsuXG4gXHQgKi9cbiBcdHJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsXG4tXHRcdFx0ICAgICAgIFBPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXHUwMDNlYXggXHUwMDI2IG1hc2spO1xuJiM0MztcdFx0XHQgICAgICAgVERWTUNBTExfUE9SVF9XUklURSwgcG9ydCwgcmVncy1cdTAwM2VheCBcdTAwMjYgbWFzayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5pbmRleCBmMjBlOTFkN2FjMzViLi4yNTQyOWQ1MTVjYzU1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbkBAIC04NCw2ICYjNDM7ODQsMTAgQEBcbiAjZGVmaW5lIFREVk1DQUxMX1NUQVRVU19BTElHTl9FUlJPUlx0MHg4MDAwMDAwMDAwMDAwMDAyVUxMXG4gI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfU1VCRlVOQ19VTlNVUFBPUlRFRFx0MHg4MDAwMDAwMDAwMDAwMDAzVUxMXG4gXG4mIzQzOy8qIFRERy5WUC5WTUNBTExcdTAwM2NJbnN0cnVjdGlvbi5JT1x1MDAzZSBkaXJlY3Rpb24sIHBhc3NlZCBpbiBSMTMgKi9cbiYjNDM7I2RlZmluZSBURFZNQ0FMTF9QT1JUX1JFQURcdFx0MFxuJiM0MzsjZGVmaW5lIFREVk1DQUxMX1BPUlRfV1JJVEVcdFx0MVxuJiM0MztcbiAvKlxuICAqIEJpdG1hc2tzIG9mIGV4cG9zZWQgcmVnaXN0ZXJzICh3aXRoIFZNTSkuXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG5pbmRleCBjYmE3NTMwNmU1YjYyLi40YTcwNzk5Y2Q4MGFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmNcbkBAIC0yMSw2ICYjNDM7MjEsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi94aGNpLWRiZ3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wY2lfeDg2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zaGFyZWQvdGR4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gLyogU2ltcGxlIFZHQSBvdXRwdXQgKi9cbiAjZGVmaW5lIFZHQUJBU0VcdFx0KF9fSVNBX0lPX2Jhc2UgJiM0MzsgMHhiODAwMClcbkBAIC0xMTEsNiAmIzQzOzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTtcbiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX2luLCBpb19zZXJpYWxfaW4pO1xuIERFRklORV9TVEFUSUNfQ0FMTChzZXJpYWxfb3V0LCBpb19zZXJpYWxfb3V0KTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcbiYjNDM7LypcbiYjNDM7ICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX25vZW5kYnIgdW5zaWduZWQgaW50IHRkeF9zZXJpYWxfaW4odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4mIzQzO1x0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4mIzQzO1x0XHQucjEyID0gMSxcdFx0XHQvKiBPbmUgYnl0ZSAqL1xuJiM0MztcdFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcbiYjNDM7XHRcdC5yMTQgPSBhZGRyICYjNDM7IG9mZnNldCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoX190ZHhfaHlwZXJjYWxsKFx1MDAyNmFyZ3MpKVxuJiM0MztcdFx0cmV0dXJuIFVJTlRfTUFYO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXJncy5yMTE7XG4mIzQzO31cbiYjNDM7QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9pbik7XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2VuZGJyIHZvaWQgdGR4X3NlcmlhbF9vdXQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHQvKiBPbmUgYnl0ZSAqL1xuJiM0MztcdF90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCAxLFxuJiM0MztcdFx0ICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIGFkZHIgJiM0Mzsgb2Zmc2V0LCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xuJiM0MztcbiYjNDM7LyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqL1xuJiM0MztzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9pbiwgdGR4X3NlcmlhbF9pbik7XG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xuJiM0MztcbiBzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9wdXRjKHVuc2lnbmVkIGNoYXIgY2gpXG4ge1xuIFx0dW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjtcbkBAIC0xNjAsNiAmIzQzOzIwNCw5IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9zZXJpYWxfaW5pdChjaGFyICpzKVxuIFx0dW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEO1xuIFx0Y2hhciAqZTtcbiBcbiYjNDM7XHQvKiBNdXN0IGJlIGJlZm9yZSBlYXJseV9zZXJpYWxfaHdfaW5pdCgpLCB3aGljaCBkb2VzIHBvcnQgSS9PICovXG4mIzQzO1x0ZWFybHlfc2VyaWFsX3RkeF9pbml0KCk7XG4mIzQzO1xuIFx0aWYgKCpzID09ICYjMzk7LCYjMzk7KVxuIFx0XHQmIzQzOyYjNDM7cztcbiBcbkBAIC0zMjMsNiAmIzQzOzM3MCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcbiBcdCAqL1xuIFx0aWYgKChiYXIwIFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7XG4gXHRcdC8qIGl0IGlzIElPIG1hcHBlZCAqL1xuJiM0MztcdFx0ZWFybHlfc2VyaWFsX3RkeF9pbml0KCk7XG4gXHRcdGVhcmx5X3NlcmlhbF9iYXNlID0gYmFyMCBcdTAwMjYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLO1xuIFx0XHR3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsXG4gXHRcdFx0XHQgY21kcmVnfFBDSV9DT01NQU5EX0lPKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5OGFhNTQ3MGIzMDAxZDM1MTI1Mjk1MzA5NjVlZTQyMDUwMmQwYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMjo1NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYwppbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jCkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfaW9faW4oaW50IHNpemUsIHUxNiBwb3J0KQogCQkucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCwKIAkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAogCQkucjEyID0gc2l6ZSwKLQkJLnIxMyA9IDAsCiYjNDM7CQkucjEzID0gVERWTUNBTExfUE9SVF9SRUFELAogCQkucjE0ID0gcG9ydCwKIAl9OwogCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2lvX291dChpbnQgc2l6ZSwgdTE2IHBvcnQsIHUzMiB2YWx1ZSkKIAkJLnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsCiAJCS5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSwKIAkJLnIxMiA9IHNpemUsCi0JCS5yMTMgPSAxLAomIzQzOwkJLnIxMyA9IFREVk1DQUxMX1BPUlRfV1JJVEUsCiAJCS5yMTQgPSBwb3J0LAogCQkucjE1ID0gdmFsdWUsCiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKQEAgLTI0LDEwICYjNDM7MjQsNiBAQAogI2RlZmluZSBFUFRfUkVBRAkwCiAjZGVmaW5lIEVQVF9XUklURQkxCiAKLS8qIFBvcnQgSS9PIGRpcmVjdGlvbiAqLwotI2RlZmluZSBQT1JUX1JFQUQJMAotI2RlZmluZSBQT1JUX1dSSVRFCTEKLQogLyogU2VlIEV4aXQgUXVhbGlmaWNhdGlvbiBmb3IgSS9PIEluc3RydWN0aW9ucyBpbiBWTVggZG9jdW1lbnRhdGlvbiAqLwogI2RlZmluZSBWRV9JU19JT19JTihlKQkJKChlKSAmYW1wOyBCSVQoMykpCiAjZGVmaW5lIFZFX0dFVF9JT19TSVpFKGUpCSgoKGUpICZhbXA7IEdFTk1BU0soMiwgMCkpICYjNDM7IDEpCkBAIC02OTEsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9pbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpemUsIGludCBwb3J0KQogCQkucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCwKIAkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAogCQkucjEyID0gc2l6ZSwKLQkJLnIxMyA9IFBPUlRfUkVBRCwKJiM0MzsJCS5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsCiAJCS5yMTQgPSBwb3J0LAogCX07CiAJYm9vbCBzdWNjZXNzOwpAQCAtNzIwLDcgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpCiAJICogJiMzNDtUREcuVlAuVk1DQUxMJmx0O0luc3RydWN0aW9uLklPJmd0OyYjMzQ7LgogCSAqLwogCXJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsCi0JCQkgICAgICAgUE9SVF9XUklURSwgcG9ydCwgcmVncy0mZ3Q7YXggJmFtcDsgbWFzayk7CiYjNDM7CQkJICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtJmd0O2F4ICZhbXA7IG1hc2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKQEAgLTg0LDYgJiM0Mzs4NCwxMCBAQAogI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfQUxJR05fRVJST1IJMHg4MDAwMDAwMDAwMDAwMDAyVUxMCiAjZGVmaW5lIFREVk1DQUxMX1NUQVRVU19TVUJGVU5DX1VOU1VQUE9SVEVECTB4ODAwMDAwMDAwMDAwMDAwM1VMTAogCiYjNDM7LyogVERHLlZQLlZNQ0FMTCZsdDtJbnN0cnVjdGlvbi5JTyZndDsgZGlyZWN0aW9uLCBwYXNzZWQgaW4gUjEzICovCiYjNDM7I2RlZmluZSBURFZNQ0FMTF9QT1JUX1JFQUQJCTAKJiM0MzsjZGVmaW5lIFREVk1DQUxMX1BPUlRfV1JJVEUJCTEKJiM0MzsKIC8qCiAgKiBCaXRtYXNrcyBvZiBleHBvc2VkIHJlZ2lzdGVycyAod2l0aCBWTU0pLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggY2JhNzUzMDZlNWI2Mi4uNGE3MDc5OWNkODBhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMjEsNiAmIzQzOzIxLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC91c2IveGhjaS1kYmdwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3BjaV94ODYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGF0aWNfY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc2hhcmVkL3RkeC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKIC8qIFNpbXBsZSBWR0Egb3V0cHV0ICovCiAjZGVmaW5lIFZHQUJBU0UJCShfX0lTQV9JT19iYXNlICYjNDM7IDB4YjgwMDApCkBAIC0xMTEsNiAmIzQzOzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTsKIERFRklORV9TVEFUSUNfQ0FMTChzZXJpYWxfaW4sIGlvX3NlcmlhbF9pbik7CiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX291dCwgaW9fc2VyaWFsX291dCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0lOVEVMX1REWF9HVUVTVAomIzQzOy8qCiYjNDM7ICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19ub2VuZGJyIHVuc2lnbmVkIGludCB0ZHhfc2VyaWFsX2luKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELAomIzQzOwkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAomIzQzOwkJLnIxMiA9IDEsCQkJLyogT25lIGJ5dGUgKi8KJiM0MzsJCS5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsCiYjNDM7CQkucjE0ID0gYWRkciAmIzQzOyBvZmZzZXQsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChfX3RkeF9oeXBlcmNhbGwoJmFtcDthcmdzKSkKJiM0MzsJCXJldHVybiBVSU5UX01BWDsKJiM0MzsKJiM0MzsJcmV0dXJuIGFyZ3MucjExOwomIzQzO30KJiM0MztBTk5PVEFURV9OT0VOREJSX1NZTSh0ZHhfc2VyaWFsX2luKTsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2VuZGJyIHZvaWQgdGR4X3NlcmlhbF9vdXQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiYjNDM7ewomIzQzOwkvKiBPbmUgYnl0ZSAqLwomIzQzOwlfdGR4X2h5cGVyY2FsbChoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSwgMSwKJiM0MzsJCSAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBhZGRyICYjNDM7IG9mZnNldCwgdmFsdWUpOwomIzQzO30KJiM0MztBTk5PVEFURV9OT0VOREJSX1NZTSh0ZHhfc2VyaWFsX291dCk7CiYjNDM7CiYjNDM7LyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqLwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9zZXJpYWxfdGR4X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTsKJiM0MzsJc3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfSU5URUxfVERYX0dVRVNUICovCiYjNDM7CiBzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9wdXRjKHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAJdW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjsKQEAgLTE2MCw2ICYjNDM7MjA0LDkgQEAgc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF9pbml0KGNoYXIgKnMpCiAJdW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEOwogCWNoYXIgKmU7CiAKJiM0MzsJLyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqLwomIzQzOwllYXJseV9zZXJpYWxfdGR4X2luaXQoKTsKJiM0MzsKIAlpZiAoKnMgPT0gJiMzOTssJiMzOTspCiAJCSYjNDM7JiM0MztzOwogCkBAIC0zMjMsNiAmIzQzOzM3MCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcykKIAkgKi8KIAlpZiAoKGJhcjAgJmFtcDsgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewogCQkvKiBpdCBpcyBJTyBtYXBwZWQgKi8KJiM0MzsJCWVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpOwogCQllYXJseV9zZXJpYWxfYmFzZSA9IGJhcjAgJmFtcDsgUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwogCQl3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsCiAJCQkJIGNtZHJlZ3xQQ0lfQ09NTUFORF9JTyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIGRldGVybWluZSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBldmVuIHJlbW90ZWx5IHJlYWNoYWJsZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCBURFggKEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSwgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlbnZpcm9ubWVudC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzOiByZXBsYWNpbmcgbWFnaWMgbnVtYmVycyB3aXRoIG5hbWVkIGNvbnN0YW50cyBpbiBgdGR4LmNgIGFuZCBgdGR4LmhgLCBhbmQgYWRkaW5nIFREWC1zcGVjaWZpYyBzZXJpYWwgaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X3ByaW50ay5jYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgcHJlcGFyaW5nIHRoZSBrZXJuZWwgZm9yIFREWCBndWVzdCBlbnZpcm9ubWVudHMsIGRlYWxpbmcgd2l0aCBJL08gY2FsbHMgcmVsYXRlZCB0byBlYXJseSBwcmludCBmdW5jdGlvbmFsaXR5LgoKTm93LCBteSBrZXkgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogZnV6emluZyBpcyBvbmx5IHZhbHVhYmxlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAoUUVNVSBvciBHQ0UpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgVERYIGNvZGUgaXMgcmVhY2hhYmxlIHVuZGVyIHRob3NlIGNvbmRpdGlvbnMuIFRoZSBndWlkZSBtZW50aW9ucyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIGV4ZWN1dGlvbiBwYXRocy4gTXkgcmFkYXIgZ29lcyB1cC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZWFybHlfc2VyaWFsX2luaXQoKWAgYW5kIGBlYXJseV9zZXJpYWxfdGR4X2luaXQoKWAuIFRoZSBsYXR0ZXIgKm9ubHkqIHJ1bnMgaWYgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgY3J1eC4gQW5kIGBlYXJseV9zZXJpYWxfaW5pdCgpYCBpdHNlbGYgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgcGFyc2luZyB0aGUgYGVhcmx5cHJpbnRrPWAgcGFyYW1ldGVyLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGNhbiYjMzk7dCB0cmlnZ2VyIGBfX2luaXRgIGZ1bmN0aW9ucyBkeW5hbWljYWxseSwgb3IgY2hhbmdlIGJvb3QgcGFyYW1ldGVycyBhdCBydW50aW1lLiBJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIChRRU1VIG9yIEdDRSksIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHdpbGwgKm5vdCogYmUgZW5hYmxlZDsgdGhlcmVmb3JlLCB0aGUgY29kZSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybi4KClNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBtb2RpZmllZCBjb2RlIGlzICpub3QqIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBURFggZ3Vlc3Qgb3BlcmF0aW9uLCByZXF1aXJpbmcgdGhlIFREWCBoeXBlcnZpc29yIG9yIGhhcmR3YXJlLCB3aGljaCBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBkb24mIzM5O3QgZW11bGF0ZS4KClRvIGNvbmZpcm0sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrOiB0aGVyZSBpc24mIzM5O3Qgc29tZSBiYWNrZG9vciBvciBydW50aW1lIHRyaWdnZXIgdGhhdCBJJiMzOTttIG1pc3NpbmcuIEkmIzM5O2xsIHNlYXJjaCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jYCB3aXRoIGdyZXAgKG9yIGByZWFkLWZpbGVgKSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IGEgcnVudGltZSBzeXNjYWxsIG9yIHVzZXItcmVhY2hhYmxlIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIHRoZXNlIFREWC1zcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29uc3RhbnRzLiBCdXQgbXkgZ3V0IHNheXMgdGhhdCYjMzk7cyBoaWdobHkgdW5saWtlbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYGVhcmx5X3ByaW50a2AgYW5kIHRoZSBgVERYX0dVRVNUYCBjaGVjaywgdGhlIGFuc3dlciBzaG91bGQgYmUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWFybHlfc2VyaWFsX3RkeF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0xNDM9QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0xNDUtLyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqL1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE0NjpzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTQ3LXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU0LSNlbHNlXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM6MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9zZXJpYWxfdGR4X2luaXQodm9pZCkgeyB9XG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU2LSNlbmRpZiAvKiBDT05GSUdfSU5URUxfVERYX0dVRVNUICovXG4tLVxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jPTIwMT1zdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMjA3LVx0LyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqL1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjIwODpcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTIwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM9MzA5PXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMzcyLVx0XHQvKiBpdCBpcyBJTyBtYXBwZWQgKi9cbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYzozNzM6XHRcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTM3NC1cdFx0ZWFybHlfc2VyaWFsX2Jhc2UgPSBiYXIwIFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBURFggSW4vT3V0IEhhbmRsaW5nKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBoYW5kbGVfaW5gIGFuZCBgaGFuZGxlX291dGAgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBURFguIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgVERYIGZ1bmN0aW9uYWxpdHkgZm9yIHg4NiBpcyBnb2luZyB0byByZXNpZGUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSBndWVzdCBwZXJmb3JtcyBhbiBgSU5gIG9yIGBPVVRgIGluc3RydWN0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgcGF0aHMsIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbWFkZSB0byB0aGVzZSBoYW5kbGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBhbnkgbnVhbmNlcyBvZiBURFgmIzM5O3MgSS9PIHZpcnR1YWxpemF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb25zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCwgb2YgY291cnNlLCBhbnkgc2lnbnMgb2Ygc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmM9NTc0PXN0YXRpYyBpbnQgaGFuZGxlX21taW8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB2ZV9pbmZvICp2ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2ODQ6c3RhdGljIGJvb2wgaGFuZGxlX2luKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODUte1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTczMD1zdGF0aWMgaW50IGhhbmRsZV9pbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHZlX2luZm8gKnZlKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTc0NC1cdGlmIChpbilcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjc0NTpcdFx0cmV0ID0gaGFuZGxlX2luKHJlZ3MsIHNpemUsIHBvcnQpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzQ2LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDgKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBJbnRlbCYjMzk7cyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2YCBhcmNoaXRlY3R1cmUuIFRoZXJlIGFyZSB0d28gbWFpbiBhcmVhcyBvZiBjaGFuZ2U6CgpGaXJzdGx5LCBpbiBmaWxlcyBsaWtlIGB0ZHguY2AgaW4gYm90aCB0aGUgYm9vdCBhbmQgQ09DTyBkaXJlY3RvcmllcywgdGhlIHBhdGNoIG9ubHkgcmVuYW1lcyBzb21lIG1hY3JvcyBhbmQgcmVwbGFjZXMgbGl0ZXJhbCB2YWx1ZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgY29zbWV0aWMgY2hhbmdlLCBzd2FwcGluZyBgMGAgZm9yIGBURFZNQ0FMTF9QT1JUX1JFQURgLCBgMWAgZm9yIGBURFZNQ0FMTF9QT1JUX1dSSVRFYCwgYW5kIHNvIG9uLiBUaGVzZSByZXBsYWNlbWVudHMgZG9uJiMzOTt0IGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSBvciB0b3VjaCBhY3RpdmUgY29kZSBwYXRocy4gVGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgbmFtaW5nLgoKU2Vjb25kbHksIGFuZCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGUgcGF0Y2ggYWRkcyBjb2RlIGZvciBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIFREWCBndWVzdHMgaW4gYGVhcmx5X3ByaW50ay5jYC4gSG93ZXZlciwgdGhpcyBjb2RlIGlzICpvbmx5KiBhY3RpdmF0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgKSBpZiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIGd1ZXN0IChpbmRpY2F0ZWQgYnkgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGApLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgYWxhcm0gYmVsbHMgc3RhcnQgcmluZ2luZy4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIGxpa2UgdGhlIHR5cGljYWwgUUVNVSBvciBHQ0Ugc2V0dXBzLCBkb24mIzM5O3QgZW11bGF0ZSB0aGlzIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIFREWCBndWVzdCBjb2RlLCB0aGVyZWZvcmUsIGlzIHVucmVhY2hhYmxlIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIE1vcmVvdmVyLCB0aGUgYF9faW5pdGAgY29kZSBoYXMgYWxyZWFkeSBydW4gYmVmb3JlIHN5emthbGxlciBldmVuIGdldHMgc3RhcnRlZC4KCkNvbnNpZGVyaW5nIG15IGNvcmUgdHJpYWdlIHBoaWxvc29waHkg4oCTIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUg4oCTIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHBvaW50cyBhYm91dCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgY29kZSwgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O01VU1QgTk9UIGJlIGZ1enplZCYjMzQ7IGNhdGVnb3J5LiBJdCYjMzk7cyBlaXRoZXIgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IG5vdCBleGVjdXRlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4KCkJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gQ29uc2VxdWVudGx5LCBib3RoIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgY2FuIHNhZmVseSByZW1haW4gZW1wdHkgbGlzdHMsIGFzIHRoZXkgYXJlIGlycmVsZXZhbnQgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU1OjIxLjA3ODE3MDk2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDg1ODA1OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU1OjIxLjA3ODE3NjM4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NDYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4YWE1NDcwYjMwMDFkMzUxMjUyOTUzMDk2NWVlNDIwNTAyZDBiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMjo1NToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcXG5pbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xcbkBAIC0yMiw3ICsyMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRkeF9pb19pbihpbnQgc2l6ZSwgdTE2IHBvcnQpXFxuIFxcdFxcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxcbiBcXHRcXHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXFxuIFxcdFxcdC5yMTIgPSBzaXplLFxcbi1cXHRcXHQucjEzID0gMCxcXG4rXFx0XFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcXG4gXFx0XFx0LnIxNCA9IHBvcnQsXFxuIFxcdH07XFxuIFxcbkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW9fb3V0KGludCBzaXplLCB1MTYgcG9ydCwgdTMyIHZhbHVlKVxcbiBcXHRcXHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcXG4gXFx0XFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxcbiBcXHRcXHQucjEyID0gc2l6ZSxcXG4tXFx0XFx0LnIxMyA9IDEsXFxuK1xcdFxcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1dSSVRFLFxcbiBcXHRcXHQucjE0ID0gcG9ydCxcXG4gXFx0XFx0LnIxNSA9IHZhbHVlLFxcbiBcXHR9O1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuQEAgLTI0LDEwICsyNCw2IEBAXFxuICNkZWZpbmUgRVBUX1JFQURcXHQwXFxuICNkZWZpbmUgRVBUX1dSSVRFXFx0MVxcbiBcXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXFxuLSNkZWZpbmUgUE9SVF9SRUFEXFx0MFxcbi0jZGVmaW5lIFBPUlRfV1JJVEVcXHQxXFxuLVxcbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXFxuICNkZWZpbmUgVkVfSVNfSU9fSU4oZSlcXHRcXHQoKGUpIFxcdTAwMjYgQklUKDMpKVxcbiAjZGVmaW5lIFZFX0dFVF9JT19TSVpFKGUpXFx0KCgoZSkgXFx1MDAyNiBHRU5NQVNLKDIsIDApKSArIDEpXFxuQEAgLTY5MSw3ICs2ODcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcXG4gXFx0XFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXFxuIFxcdFxcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcXG4gXFx0XFx0LnIxMiA9IHNpemUsXFxuLVxcdFxcdC5yMTMgPSBQT1JUX1JFQUQsXFxuK1xcdFxcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsXFxuIFxcdFxcdC5yMTQgPSBwb3J0LFxcbiBcXHR9O1xcbiBcXHRib29sIHN1Y2Nlc3M7XFxuQEAgLTcyMCw3ICs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXFxuIFxcdCAqIFxcXCJUREcuVlAuVk1DQUxMXFx1MDAzY0luc3RydWN0aW9uLklPXFx1MDAzZVxcXCIuXFxuIFxcdCAqL1xcbiBcXHRyZXR1cm4gIV90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCBzaXplLFxcbi1cXHRcXHRcXHQgICAgICAgUE9SVF9XUklURSwgcG9ydCwgcmVncy1cXHUwMDNlYXggXFx1MDAyNiBtYXNrKTtcXG4rXFx0XFx0XFx0ICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXFx1MDAzZWF4IFxcdTAwMjYgbWFzayk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuQEAgLTg0LDYgKzg0LDEwIEBAXFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX0FMSUdOX0VSUk9SXFx0MHg4MDAwMDAwMDAwMDAwMDAyVUxMXFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX1NVQkZVTkNfVU5TVVBQT1JURURcXHQweDgwMDAwMDAwMDAwMDAwMDNVTExcXG4gXFxuKy8qIFRERy5WUC5WTUNBTExcXHUwMDNjSW5zdHJ1Y3Rpb24uSU9cXHUwMDNlIGRpcmVjdGlvbiwgcGFzc2VkIGluIFIxMyAqL1xcbisjZGVmaW5lIFREVk1DQUxMX1BPUlRfUkVBRFxcdFxcdDBcXG4rI2RlZmluZSBURFZNQ0FMTF9QT1JUX1dSSVRFXFx0XFx0MVxcbitcXG4gLypcXG4gICogQml0bWFza3Mgb2YgZXhwb3NlZCByZWdpc3RlcnMgKHdpdGggVk1NKS5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuY1xcbmluZGV4IGNiYTc1MzA2ZTViNjIuLjRhNzA3OTljZDgwYWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXFxuQEAgLTIxLDYgKzIxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi94aGNpLWRiZ3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wY2lfeDg2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGF0aWNfY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3NoYXJlZC90ZHguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS92bXguaFxcdTAwM2VcXG4gXFxuIC8qIFNpbXBsZSBWR0Egb3V0cHV0ICovXFxuICNkZWZpbmUgVkdBQkFTRVxcdFxcdChfX0lTQV9JT19iYXNlICsgMHhiODAwMClcXG5AQCAtMTExLDYgKzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTtcXG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9pbiwgaW9fc2VyaWFsX2luKTtcXG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9vdXQsIGlvX3NlcmlhbF9vdXQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcXG4rLypcXG4rICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC5cXG4rICovXFxuK3N0YXRpYyBfX25vZW5kYnIgdW5zaWduZWQgaW50IHRkeF9zZXJpYWxfaW4odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXFxuK1xcdFxcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcXG4rXFx0XFx0LnIxMiA9IDEsXFx0XFx0XFx0LyogT25lIGJ5dGUgKi9cXG4rXFx0XFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcXG4rXFx0XFx0LnIxNCA9IGFkZHIgKyBvZmZzZXQsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoX190ZHhfaHlwZXJjYWxsKFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIFVJTlRfTUFYO1xcbitcXG4rXFx0cmV0dXJuIGFyZ3MucjExO1xcbit9XFxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfaW4pO1xcbitcXG4rc3RhdGljIF9fbm9lbmRiciB2b2lkIHRkeF9zZXJpYWxfb3V0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9mZnNldCwgaW50IHZhbHVlKVxcbit7XFxuK1xcdC8qIE9uZSBieXRlICovXFxuK1xcdF90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCAxLFxcbitcXHRcXHQgICAgICAgVERWTUNBTExfUE9SVF9XUklURSwgYWRkciArIG9mZnNldCwgdmFsdWUpO1xcbit9XFxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfb3V0KTtcXG4rXFxuKy8qIFN1YnN0aXR1dGUgdGhlIGh5cGVyY2FsbCBhY2Nlc3NvcnMsIGJ1dCBvbmx5IGluIGFuIGFjdHVhbCBURFggZ3Vlc3QgKi9cXG4rc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKVxcbit7XFxuK1xcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTtcXG4rXFx0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxcbisjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xcbitcXG4gc3RhdGljIGludCBlYXJseV9zZXJpYWxfcHV0Yyh1bnNpZ25lZCBjaGFyIGNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIHRpbWVvdXQgPSAweGZmZmY7XFxuQEAgLTE2MCw2ICsyMDQsOSBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcXG4gXFx0dW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEO1xcbiBcXHRjaGFyICplO1xcbiBcXG4rXFx0LyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqL1xcbitcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG4rXFxuIFxcdGlmICgqcyA9PSAnLCcpXFxuIFxcdFxcdCsrcztcXG4gXFxuQEAgLTMyMyw2ICszNzAsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfcGNpX3NlcmlhbF9pbml0KGNoYXIgKnMpXFxuIFxcdCAqL1xcbiBcXHRpZiAoKGJhcjAgXFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7XFxuIFxcdFxcdC8qIGl0IGlzIElPIG1hcHBlZCAqL1xcbitcXHRcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG4gXFx0XFx0ZWFybHlfc2VyaWFsX2Jhc2UgPSBiYXIwIFxcdTAwMjYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLO1xcbiBcXHRcXHR3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsXFxuIFxcdFxcdFxcdFxcdCBjbWRyZWd8UENJX0NPTU1BTkRfSU8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NToyMS44NjgwOTg0MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3Mjk1ODYyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOThhYTU0NzBiMzAwMWQzNTEyNTI5NTMwOTY1ZWU0MjA1MDJkMGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTU6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbmluZGV4IDg0NTFkNmExMDMwYzYuLmVkMjc4YmFjM2M5MzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xuQEAgLTIyLDcgKzIyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGR4X2lvX2luKGludCBzaXplLCB1MTYgcG9ydClcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSAwLFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXG5AQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2lvX291dChpbnQgc2l6ZSwgdTE2IHBvcnQsIHUzMiB2YWx1ZSlcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSAxLFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9XUklURSxcbiBcdFx0LnIxNCA9IHBvcnQsXG4gXHRcdC5yMTUgPSB2YWx1ZSxcbiBcdH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTI0LDEwICsyNCw2IEBAXG4gI2RlZmluZSBFUFRfUkVBRFx0MFxuICNkZWZpbmUgRVBUX1dSSVRFXHQxXG4gXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXG4tI2RlZmluZSBQT1JUX1JFQURcdDBcbi0jZGVmaW5lIFBPUlRfV1JJVEVcdDFcbi1cbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXG4gI2RlZmluZSBWRV9JU19JT19JTihlKVx0XHQoKGUpIFx1MDAyNiBCSVQoMykpXG4gI2RlZmluZSBWRV9HRVRfSU9fU0laRShlKVx0KCgoZSkgXHUwMDI2IEdFTk1BU0soMiwgMCkpICsgMSlcbkBAIC02OTEsNyArNjg3LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlX2luKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG4gXHRcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxuIFx0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4gXHRcdC5yMTIgPSBzaXplLFxuLVx0XHQucjEzID0gUE9SVF9SRUFELFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXHRib29sIHN1Y2Nlc3M7XG5AQCAtNzIwLDcgKzcxNiw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9vdXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcbiBcdCAqIFwiVERHLlZQLlZNQ0FMTFx1MDAzY0luc3RydWN0aW9uLklPXHUwMDNlXCIuXG4gXHQgKi9cbiBcdHJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsXG4tXHRcdFx0ICAgICAgIFBPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXHUwMDNlYXggXHUwMDI2IG1hc2spO1xuK1x0XHRcdCAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBwb3J0LCByZWdzLVx1MDAzZWF4IFx1MDAyNiBtYXNrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTg0LDYgKzg0LDEwIEBAXG4gI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfQUxJR05fRVJST1JcdDB4ODAwMDAwMDAwMDAwMDAwMlVMTFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX1NVQkZVTkNfVU5TVVBQT1JURURcdDB4ODAwMDAwMDAwMDAwMDAwM1VMTFxuIFxuKy8qIFRERy5WUC5WTUNBTExcdTAwM2NJbnN0cnVjdGlvbi5JT1x1MDAzZSBkaXJlY3Rpb24sIHBhc3NlZCBpbiBSMTMgKi9cbisjZGVmaW5lIFREVk1DQUxMX1BPUlRfUkVBRFx0XHQwXG4rI2RlZmluZSBURFZNQ0FMTF9QT1JUX1dSSVRFXHRcdDFcbitcbiAvKlxuICAqIEJpdG1hc2tzIG9mIGV4cG9zZWQgcmVnaXN0ZXJzICh3aXRoIFZNTSkuXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG5pbmRleCBjYmE3NTMwNmU1YjYyLi40YTcwNzk5Y2Q4MGFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmNcbkBAIC0yMSw2ICsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3hoY2ktZGJncC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BjaV94ODYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19jYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc2hhcmVkL3RkeC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gLyogU2ltcGxlIFZHQSBvdXRwdXQgKi9cbiAjZGVmaW5lIFZHQUJBU0VcdFx0KF9fSVNBX0lPX2Jhc2UgKyAweGI4MDAwKVxuQEAgLTExMSw2ICsxMTMsNDggQEAgQU5OT1RBVEVfTk9FTkRCUl9TWU0oaW9fc2VyaWFsX291dCk7XG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9pbiwgaW9fc2VyaWFsX2luKTtcbiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX291dCwgaW9fc2VyaWFsX291dCk7XG4gXG4rI2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcbisvKlxuKyAqIEEgVERYIGd1ZXN0IGNhbm5vdCBleGVjdXRlIHBvcnQgSS9PIGluc3RydWN0aW9ucywgc28gYXNrIHRoZSBWTU0gdG8gZG8gaXQuXG4rICovXG4rc3RhdGljIF9fbm9lbmRiciB1bnNpZ25lZCBpbnQgdGR4X3NlcmlhbF9pbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcbitcdFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxuK1x0XHQucjEyID0gMSxcdFx0XHQvKiBPbmUgYnl0ZSAqL1xuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuK1x0XHQucjE0ID0gYWRkciArIG9mZnNldCxcbitcdH07XG4rXG4rXHRpZiAoX190ZHhfaHlwZXJjYWxsKFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gVUlOVF9NQVg7XG4rXG4rXHRyZXR1cm4gYXJncy5yMTE7XG4rfVxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfaW4pO1xuK1xuK3N0YXRpYyBfX25vZW5kYnIgdm9pZCB0ZHhfc2VyaWFsX291dCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBvZmZzZXQsIGludCB2YWx1ZSlcbit7XG4rXHQvKiBPbmUgYnl0ZSAqL1xuK1x0X3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIDEsXG4rXHRcdCAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBhZGRyICsgb2Zmc2V0LCB2YWx1ZSk7XG4rfVxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfb3V0KTtcbitcbisvKiBTdWJzdGl0dXRlIHRoZSBoeXBlcmNhbGwgYWNjZXNzb3JzLCBidXQgb25seSBpbiBhbiBhY3R1YWwgVERYIGd1ZXN0ICovXG4rc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKVxuK3tcbitcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTtcbitcdHN0YXRpY19jYWxsX3VwZGF0ZShzZXJpYWxfb3V0LCB0ZHhfc2VyaWFsX291dCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xuK1xuIHN0YXRpYyBpbnQgZWFybHlfc2VyaWFsX3B1dGModW5zaWduZWQgY2hhciBjaClcbiB7XG4gXHR1bnNpZ25lZCB0aW1lb3V0ID0gMHhmZmZmO1xuQEAgLTE2MCw2ICsyMDQsOSBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcbiBcdHVuc2lnbmVkIGxvbmcgYmF1ZCA9IERFRkFVTFRfQkFVRDtcbiBcdGNoYXIgKmU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSBlYXJseV9zZXJpYWxfaHdfaW5pdCgpLCB3aGljaCBkb2VzIHBvcnQgSS9PICovXG4rXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcbitcbiBcdGlmICgqcyA9PSAnLCcpXG4gXHRcdCsrcztcbiBcbkBAIC0zMjMsNiArMzcwLDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3BjaV9zZXJpYWxfaW5pdChjaGFyICpzKVxuIFx0ICovXG4gXHRpZiAoKGJhcjAgXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHtcbiBcdFx0LyogaXQgaXMgSU8gbWFwcGVkICovXG4rXHRcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuIFx0XHRlYXJseV9zZXJpYWxfYmFzZSA9IGJhcjAgXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSztcbiBcdFx0d3JpdGVfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsIFBDSV9DT01NQU5ELFxuIFx0XHRcdFx0IGNtZHJlZ3xQQ0lfQ09NTUFORF9JTyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NToyMS44NjgxMDE3MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzcxMTYyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enphYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoJ3MgaW1wYWN0IGFuZCBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXZlbiByZW1vdGVseSByZWFjaGFibGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgVERYIChJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyksIHNvIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzOiByZXBsYWNpbmcgbWFnaWMgbnVtYmVycyB3aXRoIG5hbWVkIGNvbnN0YW50cyBpbiBgdGR4LmNgIGFuZCBgdGR4LmhgLCBhbmQgYWRkaW5nIFREWC1zcGVjaWZpYyBzZXJpYWwgaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X3ByaW50ay5jYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgcHJlcGFyaW5nIHRoZSBrZXJuZWwgZm9yIFREWCBndWVzdCBlbnZpcm9ubWVudHMsIGRlYWxpbmcgd2l0aCBJL08gY2FsbHMgcmVsYXRlZCB0byBlYXJseSBwcmludCBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIG15IGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBmdXp6aW5nIGlzIG9ubHkgdmFsdWFibGUgaWYgdGhlIGNvZGUgKmNhbiogYWN0dWFsbHkgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChRRU1VIG9yIEdDRSkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBURFggY29kZSBpcyByZWFjaGFibGUgdW5kZXIgdGhvc2UgY29uZGl0aW9ucy4gVGhlIGd1aWRlIG1lbnRpb25zIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBhbmQgZXhlY3V0aW9uIHBhdGhzLiBNeSByYWRhciBnb2VzIHVwLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgZWFybHlfc2VyaWFsX2luaXQoKWAgYW5kIGBlYXJseV9zZXJpYWxfdGR4X2luaXQoKWAuIFRoZSBsYXR0ZXIgKm9ubHkqIHJ1bnMgaWYgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBjcnV4LiBBbmQgYGVhcmx5X3NlcmlhbF9pbml0KClgIGl0c2VsZiBydW5zIGR1cmluZyBlYXJseSBib290LCBwYXJzaW5nIHRoZSBgZWFybHlwcmludGs9YCBwYXJhbWV0ZXIuIFN5emthbGxlciBnZW5lcmFsbHkgY2FuJ3QgdHJpZ2dlciBgX19pbml0YCBmdW5jdGlvbnMgZHluYW1pY2FsbHksIG9yIGNoYW5nZSBib290IHBhcmFtZXRlcnMgYXQgcnVudGltZS4gSW4gYSB0eXBpY2FsIHN5emthbGxlciBzZXR1cCAoUUVNVSBvciBHQ0UpLCBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCB3aWxsICpub3QqIGJlIGVuYWJsZWQ7IHRoZXJlZm9yZSwgdGhlIGNvZGUgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4uXG5cblNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBtb2RpZmllZCBjb2RlIGlzICpub3QqIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBURFggZ3Vlc3Qgb3BlcmF0aW9uLCByZXF1aXJpbmcgdGhlIFREWCBoeXBlcnZpc29yIG9yIGhhcmR3YXJlLCB3aGljaCBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBkb24ndCBlbXVsYXRlLlxuXG5UbyBjb25maXJtLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrOiB0aGVyZSBpc24ndCBzb21lIGJhY2tkb29yIG9yIHJ1bnRpbWUgdHJpZ2dlciB0aGF0IEknbSBtaXNzaW5nLiBJJ2xsIHNlYXJjaCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jYCB3aXRoIGdyZXAgKG9yIGByZWFkLWZpbGVgKSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3QgYSBydW50aW1lIHN5c2NhbGwgb3IgdXNlci1yZWFjaGFibGUgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgdGhlc2UgVERYLXNwZWNpZmljIGZ1bmN0aW9ucyBvciBjb25zdGFudHMuIEJ1dCBteSBndXQgc2F5cyB0aGF0J3MgaGlnaGx5IHVubGlrZWx5LiBHaXZlbiB0aGUgbmF0dXJlIG9mIGBlYXJseV9wcmludGtgIGFuZCB0aGUgYFREWF9HVUVTVGAgY2hlY2ssIHRoZSBhbnN3ZXIgc2hvdWxkIGJlIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MjguNjM5MjY3OTYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDk4Mjg4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFybHlfc2VyaWFsX3RkeF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0xNDM9QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTE0NS0vKiBTdWJzdGl0dXRlIHRoZSBoeXBlcmNhbGwgYWNjZXNzb3JzLCBidXQgb25seSBpbiBhbiBhY3R1YWwgVERYIGd1ZXN0ICovXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE0NjpzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTE0Ny17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU0LSNlbHNlXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE1NTpzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0xNTYtI2VuZGlmIC8qIENPTkZJR19JTlRFTF9URFhfR1VFU1QgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0yMDE9c3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF9pbml0KGNoYXIgKnMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMjA3LVxcdC8qIE11c3QgYmUgYmVmb3JlIGVhcmx5X3NlcmlhbF9od19pbml0KCksIHdoaWNoIGRvZXMgcG9ydCBJL08gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM6MjA4OlxcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0yMDktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM9MzA5PXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0zNzItXFx0XFx0LyogaXQgaXMgSU8gbWFwcGVkICovXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjM3MzpcXHRcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMzc0LVxcdFxcdGVhcmx5X3NlcmlhbF9iYXNlID0gYmFyMCBcXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzAuNzg5MTAzMjMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MDA3OTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFREWCBJbi9PdXQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaGFuZGxlX2luYCBhbmQgYGhhbmRsZV9vdXRgIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSW50ZWwgVERYLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcywgb2YgY291cnNlLCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgVERYIGZ1bmN0aW9uYWxpdHkgZm9yIHg4NiBpcyBnb2luZyB0byByZXNpZGUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIGd1ZXN0IHBlcmZvcm1zIGFuIGBJTmAgb3IgYE9VVGAgaW5zdHJ1Y3Rpb24uIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHBhdGhzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlc2UgaGFuZGxlcnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgYW55IG51YW5jZXMgb2YgVERYJ3MgSS9PIHZpcnR1YWxpemF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBzaWducyBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NTozMi45NzkxODU5ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MzQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2NvY28vdGR4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz01NzQ9c3RhdGljIGludCBoYW5kbGVfbW1pbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHZlX2luZm8gKnZlKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNjgzLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjY4NDpzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODUte1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NzMwPXN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdmVfaW5mbyAqdmUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03NDQtXFx0aWYgKGluKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjc0NTpcXHRcXHRyZXQgPSBoYW5kbGVfaW4ocmVncywgc2l6ZSwgcG9ydCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzQ2LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzMuMDUzNzI0OTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjExMDIwMDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIEludGVsJ3MgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZmVhdHVyZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL3g4NmAgYXJjaGl0ZWN0dXJlLiBUaGVyZSBhcmUgdHdvIG1haW4gYXJlYXMgb2YgY2hhbmdlOlxuXG5GaXJzdGx5LCBpbiBmaWxlcyBsaWtlIGB0ZHguY2AgaW4gYm90aCB0aGUgYm9vdCBhbmQgQ09DTyBkaXJlY3RvcmllcywgdGhlIHBhdGNoIG9ubHkgcmVuYW1lcyBzb21lIG1hY3JvcyBhbmQgcmVwbGFjZXMgbGl0ZXJhbCB2YWx1ZXMuIEl0J3MgZXNzZW50aWFsbHkgYSBjb3NtZXRpYyBjaGFuZ2UsIHN3YXBwaW5nIGAwYCBmb3IgYFREVk1DQUxMX1BPUlRfUkVBRGAsIGAxYCBmb3IgYFREVk1DQUxMX1BPUlRfV1JJVEVgLCBhbmQgc28gb24uIFRoZXNlIHJlcGxhY2VtZW50cyBkb24ndCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgdG91Y2ggYWN0aXZlIGNvZGUgcGF0aHMuIFRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBpdCdzIGp1c3QgYSBtYXR0ZXIgb2YgbmFtaW5nLlxuXG5TZWNvbmRseSwgYW5kIG1vcmUgaW1wb3J0YW50bHkgZm9yIGZ1enppbmcgY29uc2lkZXJhdGlvbnMsIHRoZSBwYXRjaCBhZGRzIGNvZGUgZm9yIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgVERYIGd1ZXN0cyBpbiBgZWFybHlfcHJpbnRrLmNgLiBIb3dldmVyLCB0aGlzIGNvZGUgaXMgKm9ubHkqIGFjdGl2YXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGApIGlmIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBJbnRlbCBURFggZ3Vlc3QgKGluZGljYXRlZCBieSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCkuIE5vdywgaGVyZSdzIHdoZXJlIG15IGFsYXJtIGJlbGxzIHN0YXJ0IHJpbmdpbmcuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBsaWtlIHRoZSB0eXBpY2FsIFFFTVUgb3IgR0NFIHNldHVwcywgZG9uJ3QgZW11bGF0ZSB0aGlzIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIFREWCBndWVzdCBjb2RlLCB0aGVyZWZvcmUsIGlzIHVucmVhY2hhYmxlIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIE1vcmVvdmVyLCB0aGUgYF9faW5pdGAgY29kZSBoYXMgYWxyZWFkeSBydW4gYmVmb3JlIHN5emthbGxlciBldmVuIGdldHMgc3RhcnRlZC5cblxuQ29uc2lkZXJpbmcgbXkgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSDigJMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSDigJMgYW5kIHNwZWNpZmljYWxseSB0aGUgcG9pbnRzIGFib3V0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBjb2RlLCB0aGlzIHBhdGNoIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIFwiTVVTVCBOT1QgYmUgZnV6emVkXCIgY2F0ZWdvcnkuIEl0J3MgZWl0aGVyIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBjb2RlIHRoYXQncyBmdW5kYW1lbnRhbGx5IG5vdCBleGVjdXRlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQmFzZWQgb24gdGhpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIENvbnNlcXVlbnRseSwgYm90aCBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGNhbiBzYWZlbHkgcmVtYWluIGVtcHR5IGxpc3RzLCBhcyB0aGV5IGFyZSBpcnJlbGV2YW50IGluIHRoaXMgc2NlbmFyaW8uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NTozOS4xNjM5Mjg5OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZWFybHkgc2VyaWFsIHByaW50ayBzdXBwb3J0IGZvciBJbnRlbCBURFggZ3Vlc3RzIChlYXJseV9zZXJpYWxfdGR4X2luaXQsIHRkeF9zZXJpYWxfaW4sIHRkeF9zZXJpYWxfb3V0KSBhbmQgc3RhbmRhcmRpemVzIFREVk1DQUxMIHBvcnQgSS9PIG1hY3JvcyBhY3Jvc3MgVERYIGJvb3QgYW5kIGNvY28gZmlsZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGVpdGhlciBtYWNybyByZWZhY3RvcmluZ3MgcHJlc2VydmluZyBpZGVudGljYWwgbnVtZXJpYyB2YWx1ZXMgKDAgYW5kIDEpIG9yIGVhcmx5IGJvb3QgX19pbml0IGNvZGUgc3BlY2lmaWMgdG8gSW50ZWwgVERYIGNvbmZpZGVudGlhbCBndWVzdCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCksIHdoaWNoIGFyZSBub3QgYWN0aXZlIG9yIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzkuMTYzOTYyODkzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7blzk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 22:53:41 +0000 UTC FinishedAt: 2026-09-10 22:55:40 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOThhYTU0NzBiMzAwMWQzNTEyNTI5NTMwOTY1ZWU0MjA1MDJkMGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jXG5pbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfaW9faW4oaW50IHNpemUsIHUxNiBwb3J0KVxuIFx0XHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcbiBcdFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxuIFx0XHQucjEyID0gc2l6ZSxcbi1cdFx0LnIxMyA9IDAsXG4mIzQzO1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXG5AQCAtMzgsNyAmIzQzOzM4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRkeF9pb19vdXQoaW50IHNpemUsIHUxNiBwb3J0LCB1MzIgdmFsdWUpXG4gXHRcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxuIFx0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4gXHRcdC5yMTIgPSBzaXplLFxuLVx0XHQucjEzID0gMSxcbiYjNDM7XHRcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1dSSVRFLFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdFx0LnIxNSA9IHZhbHVlLFxuIFx0fTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5pbmRleCBmOTA0YTYzNmQ0NDliLi43ZDFhOTNlZTI1MzQ4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG5AQCAtMjQsMTAgJiM0MzsyNCw2IEBAXG4gI2RlZmluZSBFUFRfUkVBRFx0MFxuICNkZWZpbmUgRVBUX1dSSVRFXHQxXG4gXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXG4tI2RlZmluZSBQT1JUX1JFQURcdDBcbi0jZGVmaW5lIFBPUlRfV1JJVEVcdDFcbi1cbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXG4gI2RlZmluZSBWRV9JU19JT19JTihlKVx0XHQoKGUpIFx1MDAyNiBCSVQoMykpXG4gI2RlZmluZSBWRV9HRVRfSU9fU0laRShlKVx0KCgoZSkgXHUwMDI2IEdFTk1BU0soMiwgMCkpICYjNDM7IDEpXG5AQCAtNjkxLDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSBQT1JUX1JFQUQsXG4mIzQzO1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXHRib29sIHN1Y2Nlc3M7XG5AQCAtNzIwLDcgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG4gXHQgKiBcJiMzNDtUREcuVlAuVk1DQUxMXHUwMDNjSW5zdHJ1Y3Rpb24uSU9cdTAwM2VcJiMzNDsuXG4gXHQgKi9cbiBcdHJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsXG4tXHRcdFx0ICAgICAgIFBPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXHUwMDNlYXggXHUwMDI2IG1hc2spO1xuJiM0MztcdFx0XHQgICAgICAgVERWTUNBTExfUE9SVF9XUklURSwgcG9ydCwgcmVncy1cdTAwM2VheCBcdTAwMjYgbWFzayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG5pbmRleCBmMjBlOTFkN2FjMzViLi4yNTQyOWQ1MTVjYzU1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbkBAIC04NCw2ICYjNDM7ODQsMTAgQEBcbiAjZGVmaW5lIFREVk1DQUxMX1NUQVRVU19BTElHTl9FUlJPUlx0MHg4MDAwMDAwMDAwMDAwMDAyVUxMXG4gI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfU1VCRlVOQ19VTlNVUFBPUlRFRFx0MHg4MDAwMDAwMDAwMDAwMDAzVUxMXG4gXG4mIzQzOy8qIFRERy5WUC5WTUNBTExcdTAwM2NJbnN0cnVjdGlvbi5JT1x1MDAzZSBkaXJlY3Rpb24sIHBhc3NlZCBpbiBSMTMgKi9cbiYjNDM7I2RlZmluZSBURFZNQ0FMTF9QT1JUX1JFQURcdFx0MFxuJiM0MzsjZGVmaW5lIFREVk1DQUxMX1BPUlRfV1JJVEVcdFx0MVxuJiM0MztcbiAvKlxuICAqIEJpdG1hc2tzIG9mIGV4cG9zZWQgcmVnaXN0ZXJzICh3aXRoIFZNTSkuXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG5pbmRleCBjYmE3NTMwNmU1YjYyLi40YTcwNzk5Y2Q4MGFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmNcbkBAIC0yMSw2ICYjNDM7MjEsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi94aGNpLWRiZ3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wY2lfeDg2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGF0aWNfY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zaGFyZWQvdGR4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gLyogU2ltcGxlIFZHQSBvdXRwdXQgKi9cbiAjZGVmaW5lIFZHQUJBU0VcdFx0KF9fSVNBX0lPX2Jhc2UgJiM0MzsgMHhiODAwMClcbkBAIC0xMTEsNiAmIzQzOzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTtcbiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX2luLCBpb19zZXJpYWxfaW4pO1xuIERFRklORV9TVEFUSUNfQ0FMTChzZXJpYWxfb3V0LCBpb19zZXJpYWxfb3V0KTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcbiYjNDM7LypcbiYjNDM7ICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBfX25vZW5kYnIgdW5zaWduZWQgaW50IHRkeF9zZXJpYWxfaW4odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuJiM0MztcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4mIzQzO1x0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4mIzQzO1x0XHQucjEyID0gMSxcdFx0XHQvKiBPbmUgYnl0ZSAqL1xuJiM0MztcdFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcbiYjNDM7XHRcdC5yMTQgPSBhZGRyICYjNDM7IG9mZnNldCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoX190ZHhfaHlwZXJjYWxsKFx1MDAyNmFyZ3MpKVxuJiM0MztcdFx0cmV0dXJuIFVJTlRfTUFYO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXJncy5yMTE7XG4mIzQzO31cbiYjNDM7QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9pbik7XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2VuZGJyIHZvaWQgdGR4X3NlcmlhbF9vdXQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHQvKiBPbmUgYnl0ZSAqL1xuJiM0MztcdF90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCAxLFxuJiM0MztcdFx0ICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIGFkZHIgJiM0Mzsgb2Zmc2V0LCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xuJiM0MztcbiYjNDM7LyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqL1xuJiM0MztzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9pbiwgdGR4X3NlcmlhbF9pbik7XG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xuJiM0MztcbiBzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9wdXRjKHVuc2lnbmVkIGNoYXIgY2gpXG4ge1xuIFx0dW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjtcbkBAIC0xNjAsNiAmIzQzOzIwNCw5IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9zZXJpYWxfaW5pdChjaGFyICpzKVxuIFx0dW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEO1xuIFx0Y2hhciAqZTtcbiBcbiYjNDM7XHQvKiBNdXN0IGJlIGJlZm9yZSBlYXJseV9zZXJpYWxfaHdfaW5pdCgpLCB3aGljaCBkb2VzIHBvcnQgSS9PICovXG4mIzQzO1x0ZWFybHlfc2VyaWFsX3RkeF9pbml0KCk7XG4mIzQzO1xuIFx0aWYgKCpzID09ICYjMzk7LCYjMzk7KVxuIFx0XHQmIzQzOyYjNDM7cztcbiBcbkBAIC0zMjMsNiAmIzQzOzM3MCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcbiBcdCAqL1xuIFx0aWYgKChiYXIwIFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7XG4gXHRcdC8qIGl0IGlzIElPIG1hcHBlZCAqL1xuJiM0MztcdFx0ZWFybHlfc2VyaWFsX3RkeF9pbml0KCk7XG4gXHRcdGVhcmx5X3NlcmlhbF9iYXNlID0gYmFyMCBcdTAwMjYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLO1xuIFx0XHR3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsXG4gXHRcdFx0XHQgY21kcmVnfFBDSV9DT01NQU5EX0lPKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5OGFhNTQ3MGIzMDAxZDM1MTI1Mjk1MzA5NjVlZTQyMDUwMmQwYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMjo1NToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguYwppbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3RkeC5jCkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfaW9faW4oaW50IHNpemUsIHUxNiBwb3J0KQogCQkucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCwKIAkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAogCQkucjEyID0gc2l6ZSwKLQkJLnIxMyA9IDAsCiYjNDM7CQkucjEzID0gVERWTUNBTExfUE9SVF9SRUFELAogCQkucjE0ID0gcG9ydCwKIAl9OwogCkBAIC0zOCw3ICYjNDM7MzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2lvX291dChpbnQgc2l6ZSwgdTE2IHBvcnQsIHUzMiB2YWx1ZSkKIAkJLnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsCiAJCS5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSwKIAkJLnIxMiA9IHNpemUsCi0JCS5yMTMgPSAxLAomIzQzOwkJLnIxMyA9IFREVk1DQUxMX1BPUlRfV1JJVEUsCiAJCS5yMTQgPSBwb3J0LAogCQkucjE1ID0gdmFsdWUsCiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmMKQEAgLTI0LDEwICYjNDM7MjQsNiBAQAogI2RlZmluZSBFUFRfUkVBRAkwCiAjZGVmaW5lIEVQVF9XUklURQkxCiAKLS8qIFBvcnQgSS9PIGRpcmVjdGlvbiAqLwotI2RlZmluZSBQT1JUX1JFQUQJMAotI2RlZmluZSBQT1JUX1dSSVRFCTEKLQogLyogU2VlIEV4aXQgUXVhbGlmaWNhdGlvbiBmb3IgSS9PIEluc3RydWN0aW9ucyBpbiBWTVggZG9jdW1lbnRhdGlvbiAqLwogI2RlZmluZSBWRV9JU19JT19JTihlKQkJKChlKSAmYW1wOyBCSVQoMykpCiAjZGVmaW5lIFZFX0dFVF9JT19TSVpFKGUpCSgoKGUpICZhbXA7IEdFTk1BU0soMiwgMCkpICYjNDM7IDEpCkBAIC02OTEsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9pbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpemUsIGludCBwb3J0KQogCQkucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCwKIAkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAogCQkucjEyID0gc2l6ZSwKLQkJLnIxMyA9IFBPUlRfUkVBRCwKJiM0MzsJCS5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsCiAJCS5yMTQgPSBwb3J0LAogCX07CiAJYm9vbCBzdWNjZXNzOwpAQCAtNzIwLDcgJiM0Mzs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpCiAJICogJiMzNDtUREcuVlAuVk1DQUxMJmx0O0luc3RydWN0aW9uLklPJmd0OyYjMzQ7LgogCSAqLwogCXJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsCi0JCQkgICAgICAgUE9SVF9XUklURSwgcG9ydCwgcmVncy0mZ3Q7YXggJmFtcDsgbWFzayk7CiYjNDM7CQkJICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtJmd0O2F4ICZhbXA7IG1hc2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oCmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmgKQEAgLTg0LDYgJiM0Mzs4NCwxMCBAQAogI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfQUxJR05fRVJST1IJMHg4MDAwMDAwMDAwMDAwMDAyVUxMCiAjZGVmaW5lIFREVk1DQUxMX1NUQVRVU19TVUJGVU5DX1VOU1VQUE9SVEVECTB4ODAwMDAwMDAwMDAwMDAwM1VMTAogCiYjNDM7LyogVERHLlZQLlZNQ0FMTCZsdDtJbnN0cnVjdGlvbi5JTyZndDsgZGlyZWN0aW9uLCBwYXNzZWQgaW4gUjEzICovCiYjNDM7I2RlZmluZSBURFZNQ0FMTF9QT1JUX1JFQUQJCTAKJiM0MzsjZGVmaW5lIFREVk1DQUxMX1BPUlRfV1JJVEUJCTEKJiM0MzsKIC8qCiAgKiBCaXRtYXNrcyBvZiBleHBvc2VkIHJlZ2lzdGVycyAod2l0aCBWTU0pLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggY2JhNzUzMDZlNWI2Mi4uNGE3MDc5OWNkODBhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMjEsNiAmIzQzOzIxLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC91c2IveGhjaS1kYmdwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3BjaV94ODYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGF0aWNfY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc2hhcmVkL3RkeC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKIC8qIFNpbXBsZSBWR0Egb3V0cHV0ICovCiAjZGVmaW5lIFZHQUJBU0UJCShfX0lTQV9JT19iYXNlICYjNDM7IDB4YjgwMDApCkBAIC0xMTEsNiAmIzQzOzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTsKIERFRklORV9TVEFUSUNfQ0FMTChzZXJpYWxfaW4sIGlvX3NlcmlhbF9pbik7CiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX291dCwgaW9fc2VyaWFsX291dCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0lOVEVMX1REWF9HVUVTVAomIzQzOy8qCiYjNDM7ICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19ub2VuZGJyIHVuc2lnbmVkIGludCB0ZHhfc2VyaWFsX2luKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHsKJiM0MzsJCS5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELAomIzQzOwkJLnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLAomIzQzOwkJLnIxMiA9IDEsCQkJLyogT25lIGJ5dGUgKi8KJiM0MzsJCS5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsCiYjNDM7CQkucjE0ID0gYWRkciAmIzQzOyBvZmZzZXQsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChfX3RkeF9oeXBlcmNhbGwoJmFtcDthcmdzKSkKJiM0MzsJCXJldHVybiBVSU5UX01BWDsKJiM0MzsKJiM0MzsJcmV0dXJuIGFyZ3MucjExOwomIzQzO30KJiM0MztBTk5PVEFURV9OT0VOREJSX1NZTSh0ZHhfc2VyaWFsX2luKTsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2VuZGJyIHZvaWQgdGR4X3NlcmlhbF9vdXQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiYjNDM7ewomIzQzOwkvKiBPbmUgYnl0ZSAqLwomIzQzOwlfdGR4X2h5cGVyY2FsbChoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSwgMSwKJiM0MzsJCSAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBhZGRyICYjNDM7IG9mZnNldCwgdmFsdWUpOwomIzQzO30KJiM0MztBTk5PVEFURV9OT0VOREJSX1NZTSh0ZHhfc2VyaWFsX291dCk7CiYjNDM7CiYjNDM7LyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqLwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9zZXJpYWxfdGR4X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTsKJiM0MzsJc3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfSU5URUxfVERYX0dVRVNUICovCiYjNDM7CiBzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9wdXRjKHVuc2lnbmVkIGNoYXIgY2gpCiB7CiAJdW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjsKQEAgLTE2MCw2ICYjNDM7MjA0LDkgQEAgc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF9pbml0KGNoYXIgKnMpCiAJdW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEOwogCWNoYXIgKmU7CiAKJiM0MzsJLyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqLwomIzQzOwllYXJseV9zZXJpYWxfdGR4X2luaXQoKTsKJiM0MzsKIAlpZiAoKnMgPT0gJiMzOTssJiMzOTspCiAJCSYjNDM7JiM0MztzOwogCkBAIC0zMjMsNiAmIzQzOzM3MCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcykKIAkgKi8KIAlpZiAoKGJhcjAgJmFtcDsgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewogCQkvKiBpdCBpcyBJTyBtYXBwZWQgKi8KJiM0MzsJCWVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpOwogCQllYXJseV9zZXJpYWxfYmFzZSA9IGJhcjAgJmFtcDsgUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwogCQl3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsCiAJCQkJIGNtZHJlZ3xQQ0lfQ09NTUFORF9JTyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhpcyBwYXRjaCYjMzk7cyBpbXBhY3QgYW5kIGRldGVybWluZSBpZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBldmVuIHJlbW90ZWx5IHJlYWNoYWJsZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCBURFggKEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSwgc28gSSBpbW1lZGlhdGVseSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlbnZpcm9ubWVudC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzOiByZXBsYWNpbmcgbWFnaWMgbnVtYmVycyB3aXRoIG5hbWVkIGNvbnN0YW50cyBpbiBgdGR4LmNgIGFuZCBgdGR4LmhgLCBhbmQgYWRkaW5nIFREWC1zcGVjaWZpYyBzZXJpYWwgaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X3ByaW50ay5jYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgcHJlcGFyaW5nIHRoZSBrZXJuZWwgZm9yIFREWCBndWVzdCBlbnZpcm9ubWVudHMsIGRlYWxpbmcgd2l0aCBJL08gY2FsbHMgcmVsYXRlZCB0byBlYXJseSBwcmludCBmdW5jdGlvbmFsaXR5LgoKTm93LCBteSBrZXkgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogZnV6emluZyBpcyBvbmx5IHZhbHVhYmxlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IGV4ZWN1dGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAoUUVNVSBvciBHQ0UpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgVERYIGNvZGUgaXMgcmVhY2hhYmxlIHVuZGVyIHRob3NlIGNvbmRpdGlvbnMuIFRoZSBndWlkZSBtZW50aW9ucyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIGV4ZWN1dGlvbiBwYXRocy4gTXkgcmFkYXIgZ29lcyB1cC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZWFybHlfc2VyaWFsX2luaXQoKWAgYW5kIGBlYXJseV9zZXJpYWxfdGR4X2luaXQoKWAuIFRoZSBsYXR0ZXIgKm9ubHkqIHJ1bnMgaWYgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgY3J1eC4gQW5kIGBlYXJseV9zZXJpYWxfaW5pdCgpYCBpdHNlbGYgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgcGFyc2luZyB0aGUgYGVhcmx5cHJpbnRrPWAgcGFyYW1ldGVyLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGNhbiYjMzk7dCB0cmlnZ2VyIGBfX2luaXRgIGZ1bmN0aW9ucyBkeW5hbWljYWxseSwgb3IgY2hhbmdlIGJvb3QgcGFyYW1ldGVycyBhdCBydW50aW1lLiBJbiBhIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwIChRRU1VIG9yIEdDRSksIGBYODZfRkVBVFVSRV9URFhfR1VFU1RgIHdpbGwgKm5vdCogYmUgZW5hYmxlZDsgdGhlcmVmb3JlLCB0aGUgY29kZSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybi4KClNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBtb2RpZmllZCBjb2RlIGlzICpub3QqIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBURFggZ3Vlc3Qgb3BlcmF0aW9uLCByZXF1aXJpbmcgdGhlIFREWCBoeXBlcnZpc29yIG9yIGhhcmR3YXJlLCB3aGljaCBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBkb24mIzM5O3QgZW11bGF0ZS4KClRvIGNvbmZpcm0sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrOiB0aGVyZSBpc24mIzM5O3Qgc29tZSBiYWNrZG9vciBvciBydW50aW1lIHRyaWdnZXIgdGhhdCBJJiMzOTttIG1pc3NpbmcuIEkmIzM5O2xsIHNlYXJjaCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jYCB3aXRoIGdyZXAgKG9yIGByZWFkLWZpbGVgKSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IGEgcnVudGltZSBzeXNjYWxsIG9yIHVzZXItcmVhY2hhYmxlIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIHRoZXNlIFREWC1zcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29uc3RhbnRzLiBCdXQgbXkgZ3V0IHNheXMgdGhhdCYjMzk7cyBoaWdobHkgdW5saWtlbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYGVhcmx5X3ByaW50a2AgYW5kIHRoZSBgVERYX0dVRVNUYCBjaGVjaywgdGhlIGFuc3dlciBzaG91bGQgYmUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWFybHlfc2VyaWFsX3RkeF9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0xNDM9QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0xNDUtLyogU3Vic3RpdHV0ZSB0aGUgaHlwZXJjYWxsIGFjY2Vzc29ycywgYnV0IG9ubHkgaW4gYW4gYWN0dWFsIFREWCBndWVzdCAqL1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE0NjpzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTQ3LXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU0LSNlbHNlXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM6MTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9zZXJpYWxfdGR4X2luaXQodm9pZCkgeyB9XG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU2LSNlbmRpZiAvKiBDT05GSUdfSU5URUxfVERYX0dVRVNUICovXG4tLVxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jPTIwMT1zdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMjA3LVx0LyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqL1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjIwODpcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTIwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM9MzA5PXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMzcyLVx0XHQvKiBpdCBpcyBJTyBtYXBwZWQgKi9cbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYzozNzM6XHRcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTM3NC1cdFx0ZWFybHlfc2VyaWFsX2Jhc2UgPSBiYXIwIFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBURFggSW4vT3V0IEhhbmRsaW5nKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBoYW5kbGVfaW5gIGFuZCBgaGFuZGxlX291dGAgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBJbnRlbCBURFguIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIGBhcmNoL3g4Ni9jb2NvL3RkeC90ZHguY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgVERYIGZ1bmN0aW9uYWxpdHkgZm9yIHg4NiBpcyBnb2luZyB0byByZXNpZGUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSBndWVzdCBwZXJmb3JtcyBhbiBgSU5gIG9yIGBPVVRgIGluc3RydWN0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgcGF0aHMsIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gbWFkZSB0byB0aGVzZSBoYW5kbGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBhbnkgbnVhbmNlcyBvZiBURFgmIzM5O3MgSS9PIHZpcnR1YWxpemF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb25zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCwgb2YgY291cnNlLCBhbnkgc2lnbnMgb2Ygc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9jb2NvL3RkeC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvY29jby90ZHgvdGR4LmM9NTc0PXN0YXRpYyBpbnQgaGFuZGxlX21taW8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB2ZV9pbmZvICp2ZSlcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODMtXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzo2ODQ6c3RhdGljIGJvb2wgaGFuZGxlX2luKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODUte1xuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jPTczMD1zdGF0aWMgaW50IGhhbmRsZV9pbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHZlX2luZm8gKnZlKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTc0NC1cdGlmIChpbilcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjc0NTpcdFx0cmV0ID0gaGFuZGxlX2luKHJlZ3MsIHNpemUsIHBvcnQpO1xuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzQ2LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDgKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBJbnRlbCYjMzk7cyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKSBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2YCBhcmNoaXRlY3R1cmUuIFRoZXJlIGFyZSB0d28gbWFpbiBhcmVhcyBvZiBjaGFuZ2U6CgpGaXJzdGx5LCBpbiBmaWxlcyBsaWtlIGB0ZHguY2AgaW4gYm90aCB0aGUgYm9vdCBhbmQgQ09DTyBkaXJlY3RvcmllcywgdGhlIHBhdGNoIG9ubHkgcmVuYW1lcyBzb21lIG1hY3JvcyBhbmQgcmVwbGFjZXMgbGl0ZXJhbCB2YWx1ZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgY29zbWV0aWMgY2hhbmdlLCBzd2FwcGluZyBgMGAgZm9yIGBURFZNQ0FMTF9QT1JUX1JFQURgLCBgMWAgZm9yIGBURFZNQ0FMTF9QT1JUX1dSSVRFYCwgYW5kIHNvIG9uLiBUaGVzZSByZXBsYWNlbWVudHMgZG9uJiMzOTt0IGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSBvciB0b3VjaCBhY3RpdmUgY29kZSBwYXRocy4gVGhlIHZhbHVlcyBhcmUgdGhlIHNhbWU7IGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgbmFtaW5nLgoKU2Vjb25kbHksIGFuZCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb25zLCB0aGUgcGF0Y2ggYWRkcyBjb2RlIGZvciBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIFREWCBndWVzdHMgaW4gYGVhcmx5X3ByaW50ay5jYC4gSG93ZXZlciwgdGhpcyBjb2RlIGlzICpvbmx5KiBhY3RpdmF0ZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBfX2luaXRgKSBpZiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgYXMgYW4gSW50ZWwgVERYIGd1ZXN0IChpbmRpY2F0ZWQgYnkgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGApLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgYWxhcm0gYmVsbHMgc3RhcnQgcmluZ2luZy4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIGxpa2UgdGhlIHR5cGljYWwgUUVNVSBvciBHQ0Ugc2V0dXBzLCBkb24mIzM5O3QgZW11bGF0ZSB0aGlzIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIFREWCBndWVzdCBjb2RlLCB0aGVyZWZvcmUsIGlzIHVucmVhY2hhYmxlIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIE1vcmVvdmVyLCB0aGUgYF9faW5pdGAgY29kZSBoYXMgYWxyZWFkeSBydW4gYmVmb3JlIHN5emthbGxlciBldmVuIGdldHMgc3RhcnRlZC4KCkNvbnNpZGVyaW5nIG15IGNvcmUgdHJpYWdlIHBoaWxvc29waHkg4oCTIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUg4oCTIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHBvaW50cyBhYm91dCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgY29kZSwgdGhpcyBwYXRjaCBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O01VU1QgTk9UIGJlIGZ1enplZCYjMzQ7IGNhdGVnb3J5LiBJdCYjMzk7cyBlaXRoZXIgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IG5vdCBleGVjdXRlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4KCkJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gQ29uc2VxdWVudGx5LCBib3RoIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgY2FuIHNhZmVseSByZW1haW4gZW1wdHkgbGlzdHMsIGFzIHRoZXkgYXJlIGlycmVsZXZhbnQgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU1OjIxLjA3ODE3MDk2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDg1ODA1OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlYXJseSBzZXJpYWwgcHJpbnRrIHN1cHBvcnQgZm9yIEludGVsIFREWCBndWVzdHMgKGVhcmx5X3NlcmlhbF90ZHhfaW5pdCwgdGR4X3NlcmlhbF9pbiwgdGR4X3NlcmlhbF9vdXQpIGFuZCBzdGFuZGFyZGl6ZXMgVERWTUNBTEwgcG9ydCBJL08gbWFjcm9zIGFjcm9zcyBURFggYm9vdCBhbmQgY29jbyBmaWxlcy4gVGhlc2UgY2hhbmdlcyBhcmUgZWl0aGVyIG1hY3JvIHJlZmFjdG9yaW5ncyBwcmVzZXJ2aW5nIGlkZW50aWNhbCBudW1lcmljIHZhbHVlcyAoMCBhbmQgMSkgb3IgZWFybHkgYm9vdCBfX2luaXQgY29kZSBzcGVjaWZpYyB0byBJbnRlbCBURFggY29uZmlkZW50aWFsIGd1ZXN0IGVudmlyb25tZW50cyAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSwgd2hpY2ggYXJlIG5vdCBhY3RpdmUgb3IgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHN5emthbGxlciBRRU1VL0dDRSBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU1OjIxLjA3ODE3NjM4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NDYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk4YWE1NDcwYjMwMDFkMzUxMjUyOTUzMDk2NWVlNDIwNTAyZDBiMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMjo1NToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcXG5pbmRleCA4NDUxZDZhMTAzMGM2Li5lZDI3OGJhYzNjOTM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xcbkBAIC0yMiw3ICsyMiw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRkeF9pb19pbihpbnQgc2l6ZSwgdTE2IHBvcnQpXFxuIFxcdFxcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxcbiBcXHRcXHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXFxuIFxcdFxcdC5yMTIgPSBzaXplLFxcbi1cXHRcXHQucjEzID0gMCxcXG4rXFx0XFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcXG4gXFx0XFx0LnIxNCA9IHBvcnQsXFxuIFxcdH07XFxuIFxcbkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaW9fb3V0KGludCBzaXplLCB1MTYgcG9ydCwgdTMyIHZhbHVlKVxcbiBcXHRcXHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcXG4gXFx0XFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxcbiBcXHRcXHQucjEyID0gc2l6ZSxcXG4tXFx0XFx0LnIxMyA9IDEsXFxuK1xcdFxcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1dSSVRFLFxcbiBcXHRcXHQucjE0ID0gcG9ydCxcXG4gXFx0XFx0LnIxNSA9IHZhbHVlLFxcbiBcXHR9O1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xcbisrKyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuQEAgLTI0LDEwICsyNCw2IEBAXFxuICNkZWZpbmUgRVBUX1JFQURcXHQwXFxuICNkZWZpbmUgRVBUX1dSSVRFXFx0MVxcbiBcXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXFxuLSNkZWZpbmUgUE9SVF9SRUFEXFx0MFxcbi0jZGVmaW5lIFBPUlRfV1JJVEVcXHQxXFxuLVxcbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXFxuICNkZWZpbmUgVkVfSVNfSU9fSU4oZSlcXHRcXHQoKGUpIFxcdTAwMjYgQklUKDMpKVxcbiAjZGVmaW5lIFZFX0dFVF9JT19TSVpFKGUpXFx0KCgoZSkgXFx1MDAyNiBHRU5NQVNLKDIsIDApKSArIDEpXFxuQEAgLTY5MSw3ICs2ODcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcXG4gXFx0XFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXFxuIFxcdFxcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcXG4gXFx0XFx0LnIxMiA9IHNpemUsXFxuLVxcdFxcdC5yMTMgPSBQT1JUX1JFQUQsXFxuK1xcdFxcdC5yMTMgPSBURFZNQ0FMTF9QT1JUX1JFQUQsXFxuIFxcdFxcdC5yMTQgPSBwb3J0LFxcbiBcXHR9O1xcbiBcXHRib29sIHN1Y2Nlc3M7XFxuQEAgLTcyMCw3ICs3MTYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfb3V0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXFxuIFxcdCAqIFxcXCJUREcuVlAuVk1DQUxMXFx1MDAzY0luc3RydWN0aW9uLklPXFx1MDAzZVxcXCIuXFxuIFxcdCAqL1xcbiBcXHRyZXR1cm4gIV90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCBzaXplLFxcbi1cXHRcXHRcXHQgICAgICAgUE9SVF9XUklURSwgcG9ydCwgcmVncy1cXHUwMDNlYXggXFx1MDAyNiBtYXNrKTtcXG4rXFx0XFx0XFx0ICAgICAgIFREVk1DQUxMX1BPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXFx1MDAzZWF4IFxcdTAwMjYgbWFzayk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2hhcmVkL3RkeC5oXFxuQEAgLTg0LDYgKzg0LDEwIEBAXFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX0FMSUdOX0VSUk9SXFx0MHg4MDAwMDAwMDAwMDAwMDAyVUxMXFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX1NVQkZVTkNfVU5TVVBQT1JURURcXHQweDgwMDAwMDAwMDAwMDAwMDNVTExcXG4gXFxuKy8qIFRERy5WUC5WTUNBTExcXHUwMDNjSW5zdHJ1Y3Rpb24uSU9cXHUwMDNlIGRpcmVjdGlvbiwgcGFzc2VkIGluIFIxMyAqL1xcbisjZGVmaW5lIFREVk1DQUxMX1BPUlRfUkVBRFxcdFxcdDBcXG4rI2RlZmluZSBURFZNQ0FMTF9QT1JUX1dSSVRFXFx0XFx0MVxcbitcXG4gLypcXG4gICogQml0bWFza3Mgb2YgZXhwb3NlZCByZWdpc3RlcnMgKHdpdGggVk1NKS5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuY1xcbmluZGV4IGNiYTc1MzA2ZTViNjIuLjRhNzA3OTljZDgwYWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXFxuQEAgLTIxLDYgKzIxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi94aGNpLWRiZ3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wY2lfeDg2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGF0aWNfY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3NoYXJlZC90ZHguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS92bXguaFxcdTAwM2VcXG4gXFxuIC8qIFNpbXBsZSBWR0Egb3V0cHV0ICovXFxuICNkZWZpbmUgVkdBQkFTRVxcdFxcdChfX0lTQV9JT19iYXNlICsgMHhiODAwMClcXG5AQCAtMTExLDYgKzExMyw0OCBAQCBBTk5PVEFURV9OT0VOREJSX1NZTShpb19zZXJpYWxfb3V0KTtcXG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9pbiwgaW9fc2VyaWFsX2luKTtcXG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9vdXQsIGlvX3NlcmlhbF9vdXQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcXG4rLypcXG4rICogQSBURFggZ3Vlc3QgY2Fubm90IGV4ZWN1dGUgcG9ydCBJL08gaW5zdHJ1Y3Rpb25zLCBzbyBhc2sgdGhlIFZNTSB0byBkbyBpdC5cXG4rICovXFxuK3N0YXRpYyBfX25vZW5kYnIgdW5zaWduZWQgaW50IHRkeF9zZXJpYWxfaW4odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcXG4rXFx0XFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXFxuK1xcdFxcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcXG4rXFx0XFx0LnIxMiA9IDEsXFx0XFx0XFx0LyogT25lIGJ5dGUgKi9cXG4rXFx0XFx0LnIxMyA9IFREVk1DQUxMX1BPUlRfUkVBRCxcXG4rXFx0XFx0LnIxNCA9IGFkZHIgKyBvZmZzZXQsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoX190ZHhfaHlwZXJjYWxsKFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIFVJTlRfTUFYO1xcbitcXG4rXFx0cmV0dXJuIGFyZ3MucjExO1xcbit9XFxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfaW4pO1xcbitcXG4rc3RhdGljIF9fbm9lbmRiciB2b2lkIHRkeF9zZXJpYWxfb3V0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9mZnNldCwgaW50IHZhbHVlKVxcbit7XFxuK1xcdC8qIE9uZSBieXRlICovXFxuK1xcdF90ZHhfaHlwZXJjYWxsKGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLCAxLFxcbitcXHRcXHQgICAgICAgVERWTUNBTExfUE9SVF9XUklURSwgYWRkciArIG9mZnNldCwgdmFsdWUpO1xcbit9XFxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfb3V0KTtcXG4rXFxuKy8qIFN1YnN0aXR1dGUgdGhlIGh5cGVyY2FsbCBhY2Nlc3NvcnMsIGJ1dCBvbmx5IGluIGFuIGFjdHVhbCBURFggZ3Vlc3QgKi9cXG4rc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKVxcbit7XFxuK1xcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTtcXG4rXFx0c3RhdGljX2NhbGxfdXBkYXRlKHNlcmlhbF9vdXQsIHRkeF9zZXJpYWxfb3V0KTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxcbisjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xcbitcXG4gc3RhdGljIGludCBlYXJseV9zZXJpYWxfcHV0Yyh1bnNpZ25lZCBjaGFyIGNoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIHRpbWVvdXQgPSAweGZmZmY7XFxuQEAgLTE2MCw2ICsyMDQsOSBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcXG4gXFx0dW5zaWduZWQgbG9uZyBiYXVkID0gREVGQVVMVF9CQVVEO1xcbiBcXHRjaGFyICplO1xcbiBcXG4rXFx0LyogTXVzdCBiZSBiZWZvcmUgZWFybHlfc2VyaWFsX2h3X2luaXQoKSwgd2hpY2ggZG9lcyBwb3J0IEkvTyAqL1xcbitcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG4rXFxuIFxcdGlmICgqcyA9PSAnLCcpXFxuIFxcdFxcdCsrcztcXG4gXFxuQEAgLTMyMyw2ICszNzAsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfcGNpX3NlcmlhbF9pbml0KGNoYXIgKnMpXFxuIFxcdCAqL1xcbiBcXHRpZiAoKGJhcjAgXFx1MDAyNiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7XFxuIFxcdFxcdC8qIGl0IGlzIElPIG1hcHBlZCAqL1xcbitcXHRcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG4gXFx0XFx0ZWFybHlfc2VyaWFsX2Jhc2UgPSBiYXIwIFxcdTAwMjYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLO1xcbiBcXHRcXHR3cml0ZV9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywgUENJX0NPTU1BTkQsXFxuIFxcdFxcdFxcdFxcdCBjbWRyZWd8UENJX0NPTU1BTkRfSU8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NToyMS44NjgwOTg0MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3Mjk1ODYyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOThhYTU0NzBiMzAwMWQzNTEyNTI5NTMwOTY1ZWU0MjA1MDJkMGIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTU6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbmluZGV4IDg0NTFkNmExMDMwYzYuLmVkMjc4YmFjM2M5MzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdGR4LmNcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC90ZHguY1xuQEAgLTIyLDcgKzIyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGR4X2lvX2luKGludCBzaXplLCB1MTYgcG9ydClcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSAwLFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXG5AQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2lvX291dChpbnQgc2l6ZSwgdTE2IHBvcnQsIHUzMiB2YWx1ZSlcbiBcdFx0LnIxMCA9IFREWF9IWVBFUkNBTExfU1RBTkRBUkQsXG4gXHRcdC5yMTEgPSBoY2FsbF9mdW5jKEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OKSxcbiBcdFx0LnIxMiA9IHNpemUsXG4tXHRcdC5yMTMgPSAxLFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9XUklURSxcbiBcdFx0LnIxNCA9IHBvcnQsXG4gXHRcdC5yMTUgPSB2YWx1ZSxcbiBcdH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuaW5kZXggZjkwNGE2MzZkNDQ5Yi4uN2QxYTkzZWUyNTM0OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTI0LDEwICsyNCw2IEBAXG4gI2RlZmluZSBFUFRfUkVBRFx0MFxuICNkZWZpbmUgRVBUX1dSSVRFXHQxXG4gXG4tLyogUG9ydCBJL08gZGlyZWN0aW9uICovXG4tI2RlZmluZSBQT1JUX1JFQURcdDBcbi0jZGVmaW5lIFBPUlRfV1JJVEVcdDFcbi1cbiAvKiBTZWUgRXhpdCBRdWFsaWZpY2F0aW9uIGZvciBJL08gSW5zdHJ1Y3Rpb25zIGluIFZNWCBkb2N1bWVudGF0aW9uICovXG4gI2RlZmluZSBWRV9JU19JT19JTihlKVx0XHQoKGUpIFx1MDAyNiBCSVQoMykpXG4gI2RlZmluZSBWRV9HRVRfSU9fU0laRShlKVx0KCgoZSkgXHUwMDI2IEdFTk1BU0soMiwgMCkpICsgMSlcbkBAIC02OTEsNyArNjg3LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlX2luKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2l6ZSwgaW50IHBvcnQpXG4gXHRcdC5yMTAgPSBURFhfSFlQRVJDQUxMX1NUQU5EQVJELFxuIFx0XHQucjExID0gaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksXG4gXHRcdC5yMTIgPSBzaXplLFxuLVx0XHQucjEzID0gUE9SVF9SRUFELFxuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuIFx0XHQucjE0ID0gcG9ydCxcbiBcdH07XG4gXHRib29sIHN1Y2Nlc3M7XG5AQCAtNzIwLDcgKzcxNiw3IEBAIHN0YXRpYyBib29sIGhhbmRsZV9vdXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcbiBcdCAqIFwiVERHLlZQLlZNQ0FMTFx1MDAzY0luc3RydWN0aW9uLklPXHUwMDNlXCIuXG4gXHQgKi9cbiBcdHJldHVybiAhX3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIHNpemUsXG4tXHRcdFx0ICAgICAgIFBPUlRfV1JJVEUsIHBvcnQsIHJlZ3MtXHUwMDNlYXggXHUwMDI2IG1hc2spO1xuK1x0XHRcdCAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBwb3J0LCByZWdzLVx1MDAzZWF4IFx1MDAyNiBtYXNrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbmluZGV4IGYyMGU5MWQ3YWMzNWIuLjI1NDI5ZDUxNWNjNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaGFyZWQvdGR4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NoYXJlZC90ZHguaFxuQEAgLTg0LDYgKzg0LDEwIEBAXG4gI2RlZmluZSBURFZNQ0FMTF9TVEFUVVNfQUxJR05fRVJST1JcdDB4ODAwMDAwMDAwMDAwMDAwMlVMTFxuICNkZWZpbmUgVERWTUNBTExfU1RBVFVTX1NVQkZVTkNfVU5TVVBQT1JURURcdDB4ODAwMDAwMDAwMDAwMDAwM1VMTFxuIFxuKy8qIFRERy5WUC5WTUNBTExcdTAwM2NJbnN0cnVjdGlvbi5JT1x1MDAzZSBkaXJlY3Rpb24sIHBhc3NlZCBpbiBSMTMgKi9cbisjZGVmaW5lIFREVk1DQUxMX1BPUlRfUkVBRFx0XHQwXG4rI2RlZmluZSBURFZNQ0FMTF9QT1JUX1dSSVRFXHRcdDFcbitcbiAvKlxuICAqIEJpdG1hc2tzIG9mIGV4cG9zZWQgcmVnaXN0ZXJzICh3aXRoIFZNTSkuXG4gICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG5pbmRleCBjYmE3NTMwNmU1YjYyLi40YTcwNzk5Y2Q4MGFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmNcbkBAIC0yMSw2ICsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL3hoY2ktZGJncC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BjaV94ODYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19jYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc2hhcmVkL3RkeC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gLyogU2ltcGxlIFZHQSBvdXRwdXQgKi9cbiAjZGVmaW5lIFZHQUJBU0VcdFx0KF9fSVNBX0lPX2Jhc2UgKyAweGI4MDAwKVxuQEAgLTExMSw2ICsxMTMsNDggQEAgQU5OT1RBVEVfTk9FTkRCUl9TWU0oaW9fc2VyaWFsX291dCk7XG4gREVGSU5FX1NUQVRJQ19DQUxMKHNlcmlhbF9pbiwgaW9fc2VyaWFsX2luKTtcbiBERUZJTkVfU1RBVElDX0NBTEwoc2VyaWFsX291dCwgaW9fc2VyaWFsX291dCk7XG4gXG4rI2lmZGVmIENPTkZJR19JTlRFTF9URFhfR1VFU1RcbisvKlxuKyAqIEEgVERYIGd1ZXN0IGNhbm5vdCBleGVjdXRlIHBvcnQgSS9PIGluc3RydWN0aW9ucywgc28gYXNrIHRoZSBWTU0gdG8gZG8gaXQuXG4rICovXG4rc3RhdGljIF9fbm9lbmRiciB1bnNpZ25lZCBpbnQgdGR4X3NlcmlhbF9pbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBvZmZzZXQpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucjEwID0gVERYX0hZUEVSQ0FMTF9TVEFOREFSRCxcbitcdFx0LnIxMSA9IGhjYWxsX2Z1bmMoRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04pLFxuK1x0XHQucjEyID0gMSxcdFx0XHQvKiBPbmUgYnl0ZSAqL1xuK1x0XHQucjEzID0gVERWTUNBTExfUE9SVF9SRUFELFxuK1x0XHQucjE0ID0gYWRkciArIG9mZnNldCxcbitcdH07XG4rXG4rXHRpZiAoX190ZHhfaHlwZXJjYWxsKFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gVUlOVF9NQVg7XG4rXG4rXHRyZXR1cm4gYXJncy5yMTE7XG4rfVxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfaW4pO1xuK1xuK3N0YXRpYyBfX25vZW5kYnIgdm9pZCB0ZHhfc2VyaWFsX291dCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBvZmZzZXQsIGludCB2YWx1ZSlcbit7XG4rXHQvKiBPbmUgYnl0ZSAqL1xuK1x0X3RkeF9oeXBlcmNhbGwoaGNhbGxfZnVuYyhFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiksIDEsXG4rXHRcdCAgICAgICBURFZNQ0FMTF9QT1JUX1dSSVRFLCBhZGRyICsgb2Zmc2V0LCB2YWx1ZSk7XG4rfVxuK0FOTk9UQVRFX05PRU5EQlJfU1lNKHRkeF9zZXJpYWxfb3V0KTtcbitcbisvKiBTdWJzdGl0dXRlIHRoZSBoeXBlcmNhbGwgYWNjZXNzb3JzLCBidXQgb25seSBpbiBhbiBhY3R1YWwgVERYIGd1ZXN0ICovXG4rc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKVxuK3tcbitcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzdGF0aWNfY2FsbF91cGRhdGUoc2VyaWFsX2luLCB0ZHhfc2VyaWFsX2luKTtcbitcdHN0YXRpY19jYWxsX3VwZGF0ZShzZXJpYWxfb3V0LCB0ZHhfc2VyaWFsX291dCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X3NlcmlhbF90ZHhfaW5pdCh2b2lkKSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0lOVEVMX1REWF9HVUVTVCAqL1xuK1xuIHN0YXRpYyBpbnQgZWFybHlfc2VyaWFsX3B1dGModW5zaWduZWQgY2hhciBjaClcbiB7XG4gXHR1bnNpZ25lZCB0aW1lb3V0ID0gMHhmZmZmO1xuQEAgLTE2MCw2ICsyMDQsOSBAQCBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcylcbiBcdHVuc2lnbmVkIGxvbmcgYmF1ZCA9IERFRkFVTFRfQkFVRDtcbiBcdGNoYXIgKmU7XG4gXG4rXHQvKiBNdXN0IGJlIGJlZm9yZSBlYXJseV9zZXJpYWxfaHdfaW5pdCgpLCB3aGljaCBkb2VzIHBvcnQgSS9PICovXG4rXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcbitcbiBcdGlmICgqcyA9PSAnLCcpXG4gXHRcdCsrcztcbiBcbkBAIC0zMjMsNiArMzcwLDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3BjaV9zZXJpYWxfaW5pdChjaGFyICpzKVxuIFx0ICovXG4gXHRpZiAoKGJhcjAgXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHtcbiBcdFx0LyogaXQgaXMgSU8gbWFwcGVkICovXG4rXHRcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xuIFx0XHRlYXJseV9zZXJpYWxfYmFzZSA9IGJhcjAgXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSztcbiBcdFx0d3JpdGVfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsIFBDSV9DT01NQU5ELFxuIFx0XHRcdFx0IGNtZHJlZ3xQQ0lfQ09NTUFORF9JTyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NToyMS44NjgxMDE3MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzcxMTYyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enphYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoJ3MgaW1wYWN0IGFuZCBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXZlbiByZW1vdGVseSByZWFjaGFibGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgVERYIChJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyksIHNvIEkgaW1tZWRpYXRlbHkgbmVlZCB0byBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzOiByZXBsYWNpbmcgbWFnaWMgbnVtYmVycyB3aXRoIG5hbWVkIGNvbnN0YW50cyBpbiBgdGR4LmNgIGFuZCBgdGR4LmhgLCBhbmQgYWRkaW5nIFREWC1zcGVjaWZpYyBzZXJpYWwgaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X3ByaW50ay5jYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgcHJlcGFyaW5nIHRoZSBrZXJuZWwgZm9yIFREWCBndWVzdCBlbnZpcm9ubWVudHMsIGRlYWxpbmcgd2l0aCBJL08gY2FsbHMgcmVsYXRlZCB0byBlYXJseSBwcmludCBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIG15IGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBmdXp6aW5nIGlzIG9ubHkgdmFsdWFibGUgaWYgdGhlIGNvZGUgKmNhbiogYWN0dWFsbHkgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChRRU1VIG9yIEdDRSkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBURFggY29kZSBpcyByZWFjaGFibGUgdW5kZXIgdGhvc2UgY29uZGl0aW9ucy4gVGhlIGd1aWRlIG1lbnRpb25zIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBhbmQgZXhlY3V0aW9uIHBhdGhzLiBNeSByYWRhciBnb2VzIHVwLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgZWFybHlfc2VyaWFsX2luaXQoKWAgYW5kIGBlYXJseV9zZXJpYWxfdGR4X2luaXQoKWAuIFRoZSBsYXR0ZXIgKm9ubHkqIHJ1bnMgaWYgYFg4Nl9GRUFUVVJFX1REWF9HVUVTVGAgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBjcnV4LiBBbmQgYGVhcmx5X3NlcmlhbF9pbml0KClgIGl0c2VsZiBydW5zIGR1cmluZyBlYXJseSBib290LCBwYXJzaW5nIHRoZSBgZWFybHlwcmludGs9YCBwYXJhbWV0ZXIuIFN5emthbGxlciBnZW5lcmFsbHkgY2FuJ3QgdHJpZ2dlciBgX19pbml0YCBmdW5jdGlvbnMgZHluYW1pY2FsbHksIG9yIGNoYW5nZSBib290IHBhcmFtZXRlcnMgYXQgcnVudGltZS4gSW4gYSB0eXBpY2FsIHN5emthbGxlciBzZXR1cCAoUUVNVSBvciBHQ0UpLCBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCB3aWxsICpub3QqIGJlIGVuYWJsZWQ7IHRoZXJlZm9yZSwgdGhlIGNvZGUgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4uXG5cblNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBtb2RpZmllZCBjb2RlIGlzICpub3QqIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpYyB0byBURFggZ3Vlc3Qgb3BlcmF0aW9uLCByZXF1aXJpbmcgdGhlIFREWCBoeXBlcnZpc29yIG9yIGhhcmR3YXJlLCB3aGljaCBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBkb24ndCBlbXVsYXRlLlxuXG5UbyBjb25maXJtLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrOiB0aGVyZSBpc24ndCBzb21lIGJhY2tkb29yIG9yIHJ1bnRpbWUgdHJpZ2dlciB0aGF0IEknbSBtaXNzaW5nLiBJJ2xsIHNlYXJjaCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jYCB3aXRoIGdyZXAgKG9yIGByZWFkLWZpbGVgKSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3QgYSBydW50aW1lIHN5c2NhbGwgb3IgdXNlci1yZWFjaGFibGUgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgdGhlc2UgVERYLXNwZWNpZmljIGZ1bmN0aW9ucyBvciBjb25zdGFudHMuIEJ1dCBteSBndXQgc2F5cyB0aGF0J3MgaGlnaGx5IHVubGlrZWx5LiBHaXZlbiB0aGUgbmF0dXJlIG9mIGBlYXJseV9wcmludGtgIGFuZCB0aGUgYFREWF9HVUVTVGAgY2hlY2ssIHRoZSBhbnN3ZXIgc2hvdWxkIGJlIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MjguNjM5MjY3OTYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDk4Mjg4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFybHlfc2VyaWFsX3RkeF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0xNDM9QU5OT1RBVEVfTk9FTkRCUl9TWU0odGR4X3NlcmlhbF9vdXQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTE0NS0vKiBTdWJzdGl0dXRlIHRoZSBoeXBlcmNhbGwgYWNjZXNzb3JzLCBidXQgb25seSBpbiBhbiBhY3R1YWwgVERYIGd1ZXN0ICovXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE0NjpzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jLTE0Ny17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMTU0LSNlbHNlXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjE1NTpzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfc2VyaWFsX3RkeF9pbml0KHZvaWQpIHsgfVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0xNTYtI2VuZGlmIC8qIENPTkZJR19JTlRFTF9URFhfR1VFU1QgKi9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYz0yMDE9c3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3NlcmlhbF9pbml0KGNoYXIgKnMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMjA3LVxcdC8qIE11c3QgYmUgYmVmb3JlIGVhcmx5X3NlcmlhbF9od19pbml0KCksIHdoaWNoIGRvZXMgcG9ydCBJL08gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM6MjA4OlxcdGVhcmx5X3NlcmlhbF90ZHhfaW5pdCgpO1xcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0yMDktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmM9MzA5PXN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wY2lfc2VyaWFsX2luaXQoY2hhciAqcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYy0zNzItXFx0XFx0LyogaXQgaXMgSU8gbWFwcGVkICovXFxuYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jOjM3MzpcXHRcXHRlYXJseV9zZXJpYWxfdGR4X2luaXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMtMzc0LVxcdFxcdGVhcmx5X3NlcmlhbF9iYXNlID0gYmFyMCBcXHUwMDI2IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzAuNzg5MTAzMjMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MDA3OTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFREWCBJbi9PdXQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaGFuZGxlX2luYCBhbmQgYGhhbmRsZV9vdXRgIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgSW50ZWwgVERYLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcywgb2YgY291cnNlLCBgYXJjaC94ODYvY29jby90ZHgvdGR4LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgVERYIGZ1bmN0aW9uYWxpdHkgZm9yIHg4NiBpcyBnb2luZyB0byByZXNpZGUuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIGd1ZXN0IHBlcmZvcm1zIGFuIGBJTmAgb3IgYE9VVGAgaW5zdHJ1Y3Rpb24uIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHBhdGhzLCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlc2UgaGFuZGxlcnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgYW55IG51YW5jZXMgb2YgVERYJ3MgSS9PIHZpcnR1YWxpemF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBzaWducyBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NTozMi45NzkxODU5ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MzQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2NvY28vdGR4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz01NzQ9c3RhdGljIGludCBoYW5kbGVfbW1pbyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHZlX2luZm8gKnZlKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNjgzLVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjY4NDpzdGF0aWMgYm9vbCBoYW5kbGVfaW4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaXplLCBpbnQgcG9ydClcXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy02ODUte1xcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmM9NzMwPXN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdmVfaW5mbyAqdmUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYy03NDQtXFx0aWYgKGluKVxcbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjc0NTpcXHRcXHRyZXQgPSBoYW5kbGVfaW4ocmVncywgc2l6ZSwgcG9ydCk7XFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtNzQ2LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzMuMDUzNzI0OTUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjExMDIwMDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIEludGVsJ3MgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgZmVhdHVyZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoL3g4NmAgYXJjaGl0ZWN0dXJlLiBUaGVyZSBhcmUgdHdvIG1haW4gYXJlYXMgb2YgY2hhbmdlOlxuXG5GaXJzdGx5LCBpbiBmaWxlcyBsaWtlIGB0ZHguY2AgaW4gYm90aCB0aGUgYm9vdCBhbmQgQ09DTyBkaXJlY3RvcmllcywgdGhlIHBhdGNoIG9ubHkgcmVuYW1lcyBzb21lIG1hY3JvcyBhbmQgcmVwbGFjZXMgbGl0ZXJhbCB2YWx1ZXMuIEl0J3MgZXNzZW50aWFsbHkgYSBjb3NtZXRpYyBjaGFuZ2UsIHN3YXBwaW5nIGAwYCBmb3IgYFREVk1DQUxMX1BPUlRfUkVBRGAsIGAxYCBmb3IgYFREVk1DQUxMX1BPUlRfV1JJVEVgLCBhbmQgc28gb24uIFRoZXNlIHJlcGxhY2VtZW50cyBkb24ndCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgdG91Y2ggYWN0aXZlIGNvZGUgcGF0aHMuIFRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBpdCdzIGp1c3QgYSBtYXR0ZXIgb2YgbmFtaW5nLlxuXG5TZWNvbmRseSwgYW5kIG1vcmUgaW1wb3J0YW50bHkgZm9yIGZ1enppbmcgY29uc2lkZXJhdGlvbnMsIHRoZSBwYXRjaCBhZGRzIGNvZGUgZm9yIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgVERYIGd1ZXN0cyBpbiBgZWFybHlfcHJpbnRrLmNgLiBIb3dldmVyLCB0aGlzIGNvZGUgaXMgKm9ubHkqIGFjdGl2YXRlZCBkdXJpbmcgZWFybHkgYm9vdCAoYF9faW5pdGApIGlmIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhcyBhbiBJbnRlbCBURFggZ3Vlc3QgKGluZGljYXRlZCBieSBgWDg2X0ZFQVRVUkVfVERYX0dVRVNUYCkuIE5vdywgaGVyZSdzIHdoZXJlIG15IGFsYXJtIGJlbGxzIHN0YXJ0IHJpbmdpbmcuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBsaWtlIHRoZSB0eXBpY2FsIFFFTVUgb3IgR0NFIHNldHVwcywgZG9uJ3QgZW11bGF0ZSB0aGlzIFREWCBndWVzdCBlbnZpcm9ubWVudC4gVGhlIFREWCBndWVzdCBjb2RlLCB0aGVyZWZvcmUsIGlzIHVucmVhY2hhYmxlIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuIE1vcmVvdmVyLCB0aGUgYF9faW5pdGAgY29kZSBoYXMgYWxyZWFkeSBydW4gYmVmb3JlIHN5emthbGxlciBldmVuIGdldHMgc3RhcnRlZC5cblxuQ29uc2lkZXJpbmcgbXkgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSDigJMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSDigJMgYW5kIHNwZWNpZmljYWxseSB0aGUgcG9pbnRzIGFib3V0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBjb2RlLCB0aGlzIHBhdGNoIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIFwiTVVTVCBOT1QgYmUgZnV6emVkXCIgY2F0ZWdvcnkuIEl0J3MgZWl0aGVyIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBjb2RlIHRoYXQncyBmdW5kYW1lbnRhbGx5IG5vdCBleGVjdXRlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQmFzZWQgb24gdGhpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIENvbnNlcXVlbnRseSwgYm90aCBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGNhbiBzYWZlbHkgcmVtYWluIGVtcHR5IGxpc3RzLCBhcyB0aGV5IGFyZSBpcnJlbGV2YW50IGluIHRoaXMgc2NlbmFyaW8uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ4LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1NTozOS4xNjM5Mjg5OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZWFybHkgc2VyaWFsIHByaW50ayBzdXBwb3J0IGZvciBJbnRlbCBURFggZ3Vlc3RzIChlYXJseV9zZXJpYWxfdGR4X2luaXQsIHRkeF9zZXJpYWxfaW4sIHRkeF9zZXJpYWxfb3V0KSBhbmQgc3RhbmRhcmRpemVzIFREVk1DQUxMIHBvcnQgSS9PIG1hY3JvcyBhY3Jvc3MgVERYIGJvb3QgYW5kIGNvY28gZmlsZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGVpdGhlciBtYWNybyByZWZhY3RvcmluZ3MgcHJlc2VydmluZyBpZGVudGljYWwgbnVtZXJpYyB2YWx1ZXMgKDAgYW5kIDEpIG9yIGVhcmx5IGJvb3QgX19pbml0IGNvZGUgc3BlY2lmaWMgdG8gSW50ZWwgVERYIGNvbmZpZGVudGlhbCBndWVzdCBlbnZpcm9ubWVudHMgKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCksIHdoaWNoIGFyZSBub3QgYWN0aXZlIG9yIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBzeXprYWxsZXIgUUVNVS9HQ0UgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVhcmx5IHNlcmlhbCBwcmludGsgc3VwcG9ydCBmb3IgSW50ZWwgVERYIGd1ZXN0cyAoZWFybHlfc2VyaWFsX3RkeF9pbml0LCB0ZHhfc2VyaWFsX2luLCB0ZHhfc2VyaWFsX291dCkgYW5kIHN0YW5kYXJkaXplcyBURFZNQ0FMTCBwb3J0IEkvTyBtYWNyb3MgYWNyb3NzIFREWCBib290IGFuZCBjb2NvIGZpbGVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBlaXRoZXIgbWFjcm8gcmVmYWN0b3JpbmdzIHByZXNlcnZpbmcgaWRlbnRpY2FsIG51bWVyaWMgdmFsdWVzICgwIGFuZCAxKSBvciBlYXJseSBib290IF9faW5pdCBjb2RlIHNwZWNpZmljIHRvIEludGVsIFREWCBjb25maWRlbnRpYWwgZ3Vlc3QgZW52aXJvbm1lbnRzIChYODZfRkVBVFVSRV9URFhfR1VFU1QpLCB3aGljaCBhcmUgbm90IGFjdGl2ZSBvciByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFFFTVUvR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTU6MzkuMTYzOTYyODkzWiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7blzk[1] Phase: Running StartedAt: 2026-09-10 22:55:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7blzk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 22:55:50 +0000 UTC FinishedAt: 2026-09-10 22:55:56 +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,}