Name: series-workflowcd5n2 Phase: Failed StartedAt: 2026-09-10 22:32:52 +0000 UTC FinishedAt: 2026-09-10 22:54:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcd5n2[0] Phase: Succeeded StartedAt: 2026-09-10 22:32:52 +0000 UTC FinishedAt: 2026-09-10 22:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcd5n2[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 22:32:52 +0000 UTC FinishedAt: 2026-09-10 22:54:18 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjg0N2JhZjQ5YjhmMmI1YzA1NDY3MTBmZDZmNWUyN2ZmNDQxYmMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTI6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyAmIzQzOzc2LDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XHRcdFx0KCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXHQoIDMqMzImIzQzOyA4KSAvKiBcJiMzNDtjb25zdGFudF90c2NcJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXHQoIDMqMzImIzQzOyA5KSAqIFwmIzM0O3VwXCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXHRcdFx0KCAzKjMyJiM0MzsxMCkgLyogXCYjMzQ7YXJ0XCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggM2E4ZTUxYTBjOWU4OC4uMTYzNWUyZTFjNTc2YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFx0MFxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDllN2EwNzdjNDQ1ZGMuLjMyMzVlMTcxNjQ3ZGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbiYjNDM7XHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcdFx0XHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXHRcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcbiBcdHsgMCwgMCwgMCwgMCwgMCB9XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uZDhlNmI4YTA4Yjc5ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zMDMyLDYgJiM0MzszMDMyLDggQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLmMxNmY4MjY0MjM5MDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgJiM0MzsxMjUsMTcgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbiYjNDM7c3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9vcF90eXBlIHtcbiYjNDM7XHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXG4gXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpXG4ge1xuLVx0aW50IHJldDtcbiBcdHU2NCB2YWw7XG4gXG4gXHQvKlxuQEAgLTUyNiwxNCAmIzQzOzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXG4mIzQzO1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuIFxuIFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcJiMzNDtTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cJiMzNDssXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgJiM0Mzs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJtcG9wdF93cSlcbiYjNDM7XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgJiM0Mzs1ODMsMTQ3IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHJtcG9wdF9kaXNhYmxlKCk7XG4mIzQzO1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFVcbiYjNDM7XHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4mIzQzO1x0ICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXG4mIzQzOyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxuJiM0MzsgKlxuJiM0MzsgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcbiYjNDM7XHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdC8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4JiM0MzsgKi9cbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wmIzM0O1xuJiM0MztcdFx0ICAgICA6OiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGE7XG4mIzQzO1xuJiM0MztcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpXG4mIzQzO1x0XHRybXBvcHQocGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhcm0gdXAgdGhlIFJNUE9QVCBjYWNoZSBvbiB0aGlzIHBpbm5lZCBwZXItQ1BVIHdvcmtlciB3aXRoIGludGVycnVwdHNcbiYjNDM7XHQgKiBvbiwgc28gdGhlIElSUS1kaXNhYmxlZCBmYW4tb3V0IGJlbG93IG9ubHkgaXNzdWVzIGNhY2hlLWhpdCBSTVBPUFRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuJiM0MztcbiYjNDM7XHRvbl9lYWNoX2NwdV9tYXNrKGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrLCBybXBvcHRfc2Nhbl9yYW5nZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QXG4mIzQzOyAqIGd1ZXN0IGlzIHRvcm4gZG93biwgcGFzc2VkIGFzIHRoZSBkZWxheSB0byBtb2RfZGVsYXllZF93b3JrKCkuICBUaGlzIGNvYWxlc2Nlc1xuJiM0MzsgKiBhIGJ1cnN0IG9mIHRlYXJkb3ducyBpbnRvIGEgc2luZ2xlIHNjYW4gYW5kIGdpdmVzIGVhY2ggZ3Vlc3QmIzM5O3MgcGFnZXMgdGltZSB0b1xuJiM0MzsgKiBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLCBoeXBlcnZpc29yLW93bmVkIHN0YXRlLiAgVGhlIDEwIHNlY29uZCB2YWx1ZVxuJiM0MzsgKiBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3Qgc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nIGd1ZXN0cy4gIFRoZSBzY2FuXG4mIzQzOyAqIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkXG4mIzQzOyAqIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0byBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2VcbiYjNDM7ICogZ3Vlc3Qgd2hvc2UgY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcbiYjNDM7ICogdGVhcmRvd24mIzM5O3Mgc2Nhbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb25cbiYjNDM7XHQgKiBzaHV0ZG93biwgc28gYSBsYXRlciByZS1pbml0aWFsaXphdGlvbiBqdXN0IHJlLXF1ZXVlcyB0aGUgb3B0aW1pemF0aW9uXG4mIzQzO1x0ICogcGFzcyByYXRoZXIgdGhhbiByZWRvaW5nIHRoZSBzZXR1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgZGVkaWNhdGVkIHBlci1DUFUgd29ya3F1ZXVlIHNvIHRoZSBwb3RlbnRpYWxseSBsZW5ndGh5IHdhcm0tdXBcbiYjNDM7XHQgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1BFUkNQVSwgMSk7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XG4mIzQzO1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcHJpbWFyeV90aHJlYWRfbWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKVxuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuJiM0MztcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICYjNDM7NzMxLDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwmIzM0O2NjcFwmIzM0Oyk7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiAmIzQzOzc0MiwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4mIzQzO1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4mIzQzO1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4mIzQzO1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJiMzOTt0cnVlJiMzOTsgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICYjNDM7ODQ4LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuJiM0MztcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbiYjNDM7XHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4mIzQzO1x0ICogc2VnbWVudGVkIFJNUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggZjgzM2NiN2U0ZGEzNi4uMjg3YTgzNDU4NTRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNjYzLDYgJiM0MzsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTI4NDdiYWY0OWI4ZjJiNWMwNTQ2NzEwZmQ2ZjVlMjdmZjQ0MWJjMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC03Niw3ICYjNDM7NzYsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9LOAkJCSggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjUJCSggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjYJCSggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovCi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVAkJKCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MJKCAzKjMyJiM0MzsgOCkgLyogJiMzNDtjb25zdGFudF90c2MmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUAkoIDMqMzImIzQzOyA5KSAqICYjMzQ7dXAmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUCQkJKCAzKjMyJiM0MzsxMCkgLyogJiMzNDthcnQmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVAkwCiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQJQklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVCkKICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpCSgoKHgpICZhbXA7IEdFTk1BU0tfVUxMKDEzLCA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRQkJMHhjMDAxMDEzOQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUCTAKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFCQlCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVCkKIAogI2RlZmluZSBNU1JfU1ZTTV9DQUEJCQkweGMwMDFmMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcykKIAlfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpOwogfQogaW50IHNucF9wcmVwYXJlKHZvaWQpOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7CiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge30KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwppbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHsKIAl7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsCQlDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLAkJQ1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLAlDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sCiYjNDM7CXsgWDg2X0ZFQVRVUkVfUk1QT1BULAkJCUNQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsCQlDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sCiAJeyAwLCAwLCAwLCAwLCAwIH0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTMwMzIsNiAmIzQzOzMwMzIsOCBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJICovCiAJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKIAkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTsKIAl9IGVsc2UgewogCQlzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtJmd0O2hhbmRsZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwppbmRleCBjZmYyODVkOGFkOGUzLi5jMTZmODI2NDIzOTAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2FtZC1pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDsKIAogc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTsKIAomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwogCi0JcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJtcG9wdF93cSkKJiM0MzsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmspOwogfQotRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgJiMzNDtjY3AmIzM0Oyk7CiAKIHZvaWQgc25wX3NodXRkb3duKHZvaWQpCiB7CkBAIC01NjUsMTEgJiM0Mzs1ODMsMTQ3IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpCiAJaWYgKHN5c2NmZyAmYW1wOyBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTikKIAkJcmV0dXJuOwogCiYjNDM7CXJtcG9wdF9kaXNhYmxlKCk7CiYjNDM7CiAJY2xlYXJfcm1wKCk7CiAJb25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVQomIzQzOwkgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kCiYjNDM7CSAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZW5hYmxlKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgJiMzNDtjY3AmIzM0Oyk7CiAKJiM0MztzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZgomIzQzOyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LgomIzQzOyAqCiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSkKJiM0Mzt7CiYjNDM7CWVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CiYjNDM7CS8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4JiM0MzsgKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7CiYjNDM7CQkgICAgIDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCBwYTsKJiM0MzsKJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlybXBvcHQocGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXYXJtIHVwIHRoZSBSTVBPUFQgY2FjaGUgb24gdGhpcyBwaW5uZWQgcGVyLUNQVSB3b3JrZXIgd2l0aCBpbnRlcnJ1cHRzCiYjNDM7CSAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuCiYjNDM7CSAqLwomIzQzOwlybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTsKJiM0MzsKJiM0MzsJb25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QCiYjNDM7ICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzCiYjNDM7ICogYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8KJiM0MzsgKiBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLCBoeXBlcnZpc29yLW93bmVkIHN0YXRlLiAgVGhlIDEwIHNlY29uZCB2YWx1ZQomIzQzOyAqIGlzIGEgaGV1cmlzdGljIHRyYWRpbmcgcmUtb3B0aW1pemF0aW9uIGxhdGVuY3kgYWdhaW5zdCBzY2FubmluZyB0b28gZWFnZXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJKDEwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW4KJiM0MzsgKiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlciBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZAomIzQzOyAqIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0byBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UKJiM0MzsgKiBndWVzdCB3aG9zZSBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlcgomIzQzOyAqIHRlYXJkb3duJiMzOTtzIHNjYW4uCiYjNDM7ICovCiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CWlmICghcm1wb3B0X3dxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLAomIzQzOwkJCSBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCAmIzM0O2t2bS1hbWQmIzM0Oyk7CiYjNDM7CiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgcm1wb3B0X2Jhc2U7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb24KJiM0MzsJICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvbgomIzQzOwkgKiBwYXNzIHJhdGhlciB0aGFuIHJlZG9pbmcgdGhlIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJtcG9wdF93cSkgewomIzQzOwkJcXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLCAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBkZWRpY2F0ZWQgcGVyLUNQVSB3b3JrcXVldWUgc28gdGhlIHBvdGVudGlhbGx5IGxlbmd0aHkgd2FybS11cAomIzQzOwkgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1BFUkNQVSwgMSk7CiYjNDM7CWlmICghcm1wb3B0X3dxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgZG9fcm1wb3B0X3dvcmspOwomIzQzOwomIzQzOwlybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpOwomIzQzOwlybXBvcHRfYmFzZSA9IHJtcG9wdF9wYV9zdGFydCB8IE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3MKJiM0MzsJICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuCiYjNDM7CSAqLwomIzQzOwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcHJpbWFyeV90aHJlYWRfbWFzaykKJiM0MzsJCXdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7CiYjNDM7CiYjNDM7CWlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgJmd0OyBTWl8yVCkKJiM0MzsJCXJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQ7CiYjNDM7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgJiMzNDtjY3AmIzM0Oyk7CiYjNDM7CiAvKgogICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhcwogICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlAKQEAgLTU3Nyw2ICYjNDM7NzMxLDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogICovCiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiB7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiAJaWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpCiAJCXJldHVybiAtRU5PU1lTOwogCkBAIC01ODYsNiAmIzQzOzc0MiwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiAJaWYgKCFzZXR1cF9ybXB0YWJsZSgpKQogCQlyZXR1cm4gLUVOT1NZUzsKIAomIzQzOwkvKgomIzQzOwkgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXMKJiM0MzsJICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0CiYjNDM7CSAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7CiYjNDM7CWlmICh2YWwgJmFtcDsgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pCiYjNDM7CQljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiYjNDM7CiAJLyoKIAkgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pYwogCSAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC4KQEAgLTY4MywxMyAmIzQzOzg0OCwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKQogCiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpCiB7Ci0JaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpCiYjNDM7CWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7CiAJCXJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7CiAKLQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQotCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCi0JCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJCWlmIChybXBfY2ZnICZhbXA7IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpCiYjNDM7CQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXMKJiM0MzsJICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dAomIzQzOwkgKiBzZWdtZW50ZWQgUk1QLgomIzQzOwkgKi8KJiM0MzsJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwppbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKQEAgLTE2NjMsNiAmIzQzOzE2NjMsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKQogCiAJc2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFOwogCiYjNDM7CXNucF9zZXR1cF9ybXBvcHQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBicmVhayBpdCBkb3duIGFuZCBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzdGFuZGFyZCB0cmlhZ2UgdGFzaywganVzdCBhIGRldmVsb3BlciBRQSBhbmQgdHJpYWdlIG9mIGEgcGF0Y2ggc2VyaWVzLgoKRmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBSTVBPUFQgc3VwcG9ydCwgd2hpY2ggaXMgcmVsYXRlZCB0byBBTUQmIzM5O3Mgc2VjdXJlIG1lbW9yeSBlbmNyeXB0aW9uIHRlY2hub2xvZ3ksIFNFVi1TTlAuIEhlcmUmIzM5O3Mgd2hhdCBqdW1wcyBvdXQ6CgoqICAgKipIZWFkZXIgRmlsZXM6KiogV2UmIzM5O3JlIGludHJvZHVjaW5nIG5ldyBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBpbiBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGFuZCBgc2V2LmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBjb250cm9sbGVkLgoqICAgKipDUFUgRmVhdHVyZSBEZXRlY3Rpb246KiogQ2hhbmdlcyBpbiBgc2NhdHRlcmVkLmNgIGluZGljYXRlIHRoZSBhZGRpdGlvbiBvZiBhIENQVUlEIGJpdCBmb3IgUk1QT1BULiBUaGlzIGlzIGNsYXNzaWM7IHdlJiMzOTtyZSBjaGVja2luZyBmb3IgaGFyZHdhcmUgc3VwcG9ydC4KKiAgICoqS1ZNIEludGVncmF0aW9uOioqIFRoZSBga3ZtL3N2bS9zZXYuY2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBhY3Rpb24gcmVhbGx5IHNlZW1zIHRvIGJlLiBXZSYjMzk7dmUgZ290IGBzZXZfdm1fZGVzdHJveSgpYCBjYWxsaW5nIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHdpdGhpbiBgc25wX3ByZXBhcmUoKWAgYW5kIGBzbnBfc2h1dGRvd24oKWAgaW52b2x2aW5nIGhvdHBsdWcgZGlzYWJsZS9lbmFibGUuIFRoZXJlJiMzOTtzIGEgbG90IG9mIGZ1bmN0aW9uIGFjdGl2aXR5IGhlcmU6IGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBldGMuIFdlJiMzOTtyZSBjbGVhcmx5IHNldHRpbmcgdXAsIGVuYWJsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIFJNUE9QVCBmZWF0dXJlIHdpdGhpbiB0aGUgS1ZNL1NFVi1TTlAgY29udGV4dC4gQWxzbyB3aXRoaW4gYHNucF9ybXB0YWJsZV9pbml0KClgIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGVuYWJsZSB2aWEgU1lTQ0ZHIGFuZCBjYWxscyB0byBgY3B1X2hvdHBsdWdfZGlzYWJsZSgpYC4gQW5kIGZpbmFsbHksIGluIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCB0aGUgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgd2lsbCBiZSBjbGVhcmVkIGlmIG5vdCBzZWdtZW50ZWQgUk1QLgoqICAgKipDcnlwdG8gRHJpdmVyIEludm9sdmVtZW50OioqIFRoZSBgY2NwL3Nldi1kZXYuY2AgZmlsZSBpcyBjYWxsaW5nIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpdGhpbiBpdHMgaW5pdGlhbGl6YXRpb24uIFRoaXMgc2hvd3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgY3J5cHRvIGxheWVyLCB3aGljaCBpcyByZWxldmFudCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFNFVi1TTlAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgc2hvdWxkIGRvIHNvbWUgYGdyZXBgIHdvcmsgb3IgdXNlIGNvZGVzZWFyY2ggdG8gc2VlIHdoZXJlIENDUCwgU0VWLVNOUCwgYW5kIEtWTSBTRVYgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IGdldCBleGVjdXRlZCBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgZnV6emluZy4gRG9lcyB0aGlzIGludGVyYWN0IHdpdGggdXNlcnNwYWNlIGF0IGFsbD8gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEFyZSB0aGVyZSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZXhwb3NlZCBpbnRlcmZhY2VzPyBJZiBpdCYjMzk7cyBhbGwgaW50ZXJuYWwgS1ZNIHN0dWZmLCB0aGVuIGl0IG1pZ2h0IGJlIGhhcmRlciB0byBmdXp6IGVmZmVjdGl2ZWx5LiBJZiB0aGVyZSBhcmUgbmV3IGludGVyZmFjZXMgb3IgdXNlci1mYWNpbmcgcGFydHMsIGl0JiMzOTtzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9ybXB0YWJsZV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjUxOmludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY5PXN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzI1PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzEtICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzI6aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzMzLXtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDMyLVx0ICovXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQzMzpcdGlmIChzbnBfcm1wdGFibGVfaW5pdCgpKSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQzNC1cdFx0cHJfd2FybihcJiMzNDtTTlA6IFJNUCBpbml0aWFsaXphdGlvbiBmYWlsZWQsIFNOUCBjYW5ub3QgYmUgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNFVi1TTlAgSG9zdCBTdXBwb3J0IGluIFZpcnR1YWxpemVkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU0VWLVNOUCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBUaGF0IG1lYW5zIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFplbiAzJiM0Mzsgb3IgWmVuIDUvNiB3aXRoIHRoZSBSTVBPUFQgaW5zdHJ1Y3Rpb24sIEFNRCBJT01NVSwgQ0NQIGhhcmR3YXJlLi4uIGFuZCBwcm9iYWJseSBvdGhlciB0aGluZ3MuIEJ1dCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGNhbiBJICphY3R1YWxseSogdGVzdCB0aGlzIHN0dWZmIGluIGEgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuCgpGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzdHVmZiwgY29uc2lkZXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgSSYjMzk7bSB1c2luZy4gVGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoYXQgaWYgdGhlIGNvZGUmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJIHNob3VsZG4mIzM5O3QgYm90aGVyIGZ1enppbmcgaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2Ugc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGNvbXBvbmVudHMg4oCTIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFRoaW5ncyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBlZmZlY3RpdmVseS4gQWxzbywgdGhvc2UgZXhlY3V0aW9uIHBhdGhzIHRoYXQgSSBjYW4mIzM5O3QgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIHNldHVwIC0gZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1Zywgb3IgY29kZSBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBmdXp6aW5nIHRhcmdldC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6ICppcyogQU1EIFNFViBob3N0IHN1cHBvcnQgcmVhY2hhYmxlIGluIFFFTVUgb3IgR0NFPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZmlyc3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEtWTSBTRVYgb3IgQ0NQIG9yIFNFViBndWVzdCB2cyBTRVYgaG9zdCBtYXR0ZXJzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCB0cnVseSByZXF1aXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBjcml0ZXJpYSBhbmQgY2hlY2sgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgc2F5IGFib3V0IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NDX0FUVFJfSE9TVF9TRVZfU05QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vY29yZS5jPTcwPXN0YXRpYyBib29sIG5vaW5zdHIgYW1kX2NjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxMDQ6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVx0XHRyZXR1cm4gY2NfZmxhZ3MuaG9zdF9zZXZfc25wO1xuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jPTE3MD1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fY2xlYXIoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxNzM6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTc0LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jPTE5Mj1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fc2V0KGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTE5NC1cdHN3aXRjaCAoYXR0cikge1xuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1Olx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTE5Ni1cdFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzMtXHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NDpcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzc6XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy0xMTEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy0xMTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4MC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyODItXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEKSkge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI1OT1zdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTQ6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5NS1cdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMwMD1zdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzAyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE5MzpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTk0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk4Nz1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTkxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTkyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTkzLVx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMDU9dm9pZCBzZXZfZ21lbV9tYWtlX3NoYXJlZChrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjA4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjA5Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjEwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmMtMTEwLVx0ICovXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXHRcdHNucF9maXh1cF9lODIwX3RhYmxlcygpO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM6MzI6XHRcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE0OC17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNDk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTg9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYxLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYzLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYwPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2NC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYwMD1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYwMi1cdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MDM6XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYwNC19XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzMyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzY6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTczNy1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTQxPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05NDUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NDY6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05NDctXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwNjc9aW50IHBzbWFzaCh1NjQgcGZuKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEwNzEtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDcyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA3My1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE3Nj1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTgwLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE4MTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExODItXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjk9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc0LVx0ICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjc1Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc2LVx0XHR3YmludmQoKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE1MDg9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE1MTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjA2Nz1zdGF0aWMgaW50IHNldl9nZXRfYXBpX3ZlcnNpb24odm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXHQgKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA3NzpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzgtXHRcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFx1MDAyNmVycm9yKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yOTgyLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yOTg0LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzk3LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDQyOlx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM1Njc9c3RhdGljIGludCBfX2luaXQgaW9tbXVfZ29fdG9fc3RhdGUoZW51bSBpb21tdV9pbml0X3N0YXRlIHN0YXRlKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTg3LVx0ICovXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcdGlmIChyZXQgXHUwMDI2XHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cdCAgICAhV0FSTl9PTl9PTkNFKGFtZF9pb21tdV9zbnBfZW4pKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1OTA6XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTkxLVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNjk0PXZvaWQgX19pbml0IGFtZF9pb21tdV9kZXRlY3Qodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzE0Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaD0yMj1lbnVtIGNjX2F0dHIge1xuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Mi1cdC8qKlxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlx0ICogQENDX0FUVFJfSE9TVF9TRVZfU05QOiBBTUQgU05QIGVuYWJsZWQgb24gdGhlIGhvc3QuXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTQtXHQgKlxuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Ny1cdCAqL1xuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjk4Olx0Q0NfQVRUUl9IT1NUX1NFVl9TTlAsXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFNOUCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJIHN1c3BlY3Qgc29tZXRoaW5nJiMzOTtzIHVwIHdpdGggaG93IHdlJiMzOTtyZSBoYW5kbGluZyBTTlBzLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQU1EIGFyY2hpdGVjdHVyZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgYGJzcF9kZXRlcm1pbmVfc25wYCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGtleSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2YgYmVoYXZpb3IsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgcmVzaWRlcyBpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBiZWNhdXNlIHRoYXQgQU1ELXNwZWNpZmljIGZpbGUgaXMgdGhlIHJpZ2h0IGxldmVsIG9mIGFic3RyYWN0aW9uIGZvciBpbnZlc3RpZ2F0aW5nIENQVS1zcGVjaWZpYyBpZGlvc3luY3JhY2llcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XG4gMzU2Olx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIDM1NzpcdHtcbiAzNTg6XHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMzU5Olx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xuIDM2MDpcdFxuIDM2MTpcdFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcbiAzNjI6XHRcdFx0LypcbiAzNjM6XHRcdFx0ICogUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBub3QgYXJjaGl0ZWN0dXJhbCBhbmQgaXMgZGVmaW5lZCBieSB0aGVcbiAzNjQ6XHRcdFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXG4gMzY1Olx0XHRcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcbiAzNjY6XHRcdFx0ICogcHJvY2Vzc29ycyB3aGljaCBzdXBwb3J0IHRoZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBSTVBSRUFEXG4gMzY3Olx0XHRcdCAqIGluc3RydWN0aW9uLlxuIDM2ODpcdFx0XHQgKi9cbiAzNjk6XHRcdFx0aWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIFx1MDAyNlx1MDAyNlxuIDM3MDpcdFx0XHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVOMykgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XG4gMzcyOlx0XHRcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXHUwMDI2XHUwMDI2XG4gMzczOlx0XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG4gMzc0Olx0XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiAzNzU6XHRcdFx0fSBlbHNlIHtcbiAzNzY6XHRcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xuIDM3NzpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiAzNzg6XHRcdFx0fVxuIDM3OTpcdFx0fVxuIDM4MDpcdCNlbmRpZlxuIDM4MTpcdH1cbiAzODI6XHRcbiAzODM6XHQjZGVmaW5lIFpFTl9NT0RFTF9TVEVQX1VDT0RFKGZhbSwgbW9kZWwsIHN0ZXAsIHVjb2RlKSBcXFxuIDM4NDpcdFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXG4gMzg1Olx0XHRcdFx0ICAgIHN0ZXAsIHN0ZXAsIHVjb2RlKVxuIDM4NjpcdFxuIDM4NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCBhbWRfdHNhX21pY3JvY29kZVtdID0ge1xuIDM4ODpcdFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgxLCAweDBhMDAxMWQ3KSxcbiAzODk6XHRcdFpFTl9NT0RFTF9TVEVQX1VDT0RFKDB4MTksIDB4MDEsIDB4MiwgMHgwYTAwMTIzYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFJNUE9QVCBDYXBhYmlsaXRpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGxpbmVzIDM2OS0zNzAgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBjaGVjayBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIC4uLilgISBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBmb3IgcnVubmluZyB1bmRlciBhIGh5cGVydmlzb3IgbGlrZSBRRU1VIG9yIEdDRS4gQmVjYXVzZSBpZiBhIGh5cGVydmlzb3IgaXMgcHJlc2VudCwgYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGB0cnVlYCwgYW5kICp0aGF0IG1lYW5zKiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHdpbGwgKm5ldmVyKiBiZSBzZXQuIFRoYXQmIzM5O3MgYSBodWdlIHByb2JsZW0uCgpUaGlzIHRlbGxzIG1lIHRoYXQgc2V0dGluZyB1cCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhdHRyaWJ1dGUsIGFuZCBieSBleHRlbnNpb24gU0VWLVNOUCBzdXBwb3J0LCBpcyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gYmFyZS1tZXRhbCBBTUQgWmVuMyYjNDM7IC8gWmVuNSYjNDM7IGhhcmR3YXJlIHdpdGggU0VWLVNOUCBlbmFibGVkIGluIHRoZSBCSU9TL2hhcmR3YXJlLiBBbmQgUk1QT1BUIHNlZW1zIHRvIGJlIGEgbmV3IGluc3RydWN0aW9uLCB3aGljaCBpcyBmb3IgWmVuNiBvciBmdXR1cmUgQ1BVcy4KCkkgbmVlZCB0byBjaXJjbGUgYmFjayB0byB3aGF0IGBybXBvcHQoKWAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gT2theSwgaXQmIzM5O3MgdXNpbmcgYW4gaW5saW5lIGFzc2VtYmx5IGluc3RydWN0aW9uOiBgLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4KCk5vdywgY2hlY2tpbmcgYHJtcG9wdF9jYXBhYmxlKClgLiBJdCByZXF1aXJlcyAqYm90aCogYGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKWAgKmFuZCogYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBJZiBgIXJtcG9wdF9jYXBhYmxlKClgLCB0aGVuIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCBpbW1lZGlhdGVseSByZXR1cm4uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBwdXQgdGhlIHBpZWNlcyB0b2dldGhlci4KCkFuZCBJIHNlZSB0aGF0IGBzbnBfcm1wdGFibGVfaW5pdCgpYCAqaW1tZWRpYXRlbHkqIHJldHVybnMgLUVOT1NZUyBpZiBgIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBUaGUgY29kZSB3b24mIzM5O3QgZXZlbiBjb250aW51ZS4gU2ltaWxhcmx5LCBgc25wX3ByZXBhcmUoKWAgaXMgb25seSBjYWxsZWQgYnkgdGhlIENDUCBkcml2ZXIgd2hlbiBhIFNOUCBob3N0IGlzIGluaXRpYWxpemluZyB2aWEgYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYCwgYW5kIHRoYXQgZnVuY3Rpb24gKmFsc28qIGNoZWNrcyBgaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKWAsIHJldHVybmluZyAtRU5PREVWIGlmIGZhbHNlLiBBbmQgYHNucF9zaHV0ZG93bigpYCBpcyBzaW1pbGFybHkgb25seSBjYWxsZWQgdmlhIENDUCBkdXJpbmcgYW4gU05QIGhvc3Qgc2h1dGRvd24uCgpUaGlzIGlzIGFsbCBtYWtpbmcgaXQgY2xlYXIgLSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuICpBbmQqIHRoYXQgb25seSBoYXBwZW5zIGF0IGJvb3QgdGltZSBvbiBBTUQgQlNQIHdoZW4gYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUClgICppcyogdHJ1ZSBhbmQgKmFsc28qIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEdvdCBpdC4gTm93IEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBjYWxsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUxLWludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTY9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgwNT1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTg0OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjg0OTpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgc2V2X3ZtX2Rlc3Ryb3koKWAgYW5kIFNFVi1TTlAgR3Vlc3QgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgc2V2X3ZtX2Rlc3Ryb3koKWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBkZXN0cnVjdGlvbiBvZiBhIEtWTSBWTSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIFNFVi1TTlAgKFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBhc3BlY3RzLgoKTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiB0aGUgVk0gaXMgYW4gU0VWLVNOUCBndWVzdCAoY2hlY2tlZCBieSBgc2V2X3NucF9ndWVzdChrdm0pYCksIHRoZSBmdW5jdGlvbiB0YWtlcyBzcGVjaWZpYyBhY3Rpb25zLiBJdCBhcHBlYXJzIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgYHNldl9lc19pbml0X3ZtKClgIGNvdWxkIGZhaWwgYWZ0ZXIgYHNucF9pbml0X3ZtKClgLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBnZXRzIGRlY29tbWlzc2lvbmVkIHZpYSBhIGNhbGwgdG8gYHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pYC4gIElmIHRoYXQgY2FsbCBpcyBzdWNjZXNzZnVsLCB3ZSBiYWlsIG91dC4gT3RoZXJ3aXNlLCBpdCB0cmlnZ2VycyBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYC4KCklmIHRoZSBWTSAqaXNuJiMzOTt0KiBhbiBTRVYtU05QIGd1ZXN0LCB0aGUgYHNldl91bmJpbmRfYXNpZCgpYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4KClRoaXMgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBDYW4gYSBndWVzdCBWTSAqZW11bGF0ZSogYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIHJ1biBhcyBpZiBpdCAqd2VyZSogYW4gU0VWLVNOUCBndWVzdCB1bmRlciBRRU1VICp3aXRob3V0KiBhY3R1YWwgcGh5c2ljYWwgQU1EIFNFVi1TTlAgaGFyZHdhcmU/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29uZGl0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgc2V2X3NucF9ndWVzdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjb25kaXRpb25hbCBsb2dpYy4gS25vd2luZyB0aGlzIHdpbGwgY2xhcmlmeSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBhIHB1cmVseSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2ZXJzdXMgb25lIHdpdGggdHJ1ZSBoYXJkd2FyZSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfc25wX2d1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTQwPXN0YXRpYyBib29sIHNldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpzdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ3LXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ4LVx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ5Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE1MC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDk9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTMtXHRyZXR1cm4gKHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNDpcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjEzNj1pbnQgc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU3LVx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gc291cmNlX2t2bS1cdTAwM2VhcmNoLnZtX3R5cGUgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjE1ODpcdCAgICBzZXZfZ3Vlc3Qoa3ZtKSB8fCAhc2V2X2d1ZXN0KHNvdXJjZV9rdm0pIHx8IHNldl9zbnBfZ3Vlc3Qoc291cmNlX2t2bSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIyNzc9c3RhdGljIGludCBzbnBfbGF1bmNoX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI4My1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjI4NDpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjg1LVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI0MjE9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0MzA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDMxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1NjI9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NjktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1NzA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU3MS1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2Mzkte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQwOlx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0OD1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NzItXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY3MzpcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXHUwMDI2XHUwMDI2IHNldl9jbWQuaWQgXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY3NC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4NTk9aW50IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjg4My1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyODg0Olx0aWYgKHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSB8fFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODg1LVx0ICAgIGlzX21pcnJvcmluZ19lbmNfY29udGV4dChzb3VyY2Vfa3ZtKSB8fCBrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cykge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk3Nz12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMjY6XHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjctXHRcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMzNT12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0ODpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1NDc9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzU2MTpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjItXHRcdHU2NCBwZm4gPSBfX3BhKHN2bS1cdTAwM2VzZXZfZXMudm1zYSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjIwPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIyODpcdGlmICghaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMjktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI4OT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjk2Olx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTE9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzMC1cdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDMxOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzItXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0MS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0MjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTYtXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NTc6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1OC1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTA4PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0MS1cdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NDI6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0My1cdCAgICAhZ2hjYl9ncGFfaXNfcmVnaXN0ZXJlZChzdm0sIGNvbnRyb2wtXHUwMDNlZ2hjYl9ncGEpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTU4Olx0aWYgKGlzX3NucF9vbmx5X3ZtZ2V4aXQoY29udHJvbC1cdTAwM2VleGl0X2NvZGUpIFx1MDAyNlx1MDAyNiAhaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU5LVx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcJiMzNDt2bWdleGl0OiBleGl0IGNvZGUgJSNsbHggaXMgU05QLW9ubHlcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODQ0PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg1Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg1NzpcdGlmIChpbml0X2V2ZW50IFx1MDAyNlx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVx0XHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg5MT12b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKmhvc3RzYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzEtXHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVCVUdfU1dBUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MzI6XHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTMzLVx0XHRob3N0c2EtXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTE1NT1pbnQgc2V2X2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTYyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTYzOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxNjQtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTI2OD12b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgwLVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyODE6XHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyODItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMDM9aW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTMwNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTMwODpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzA5LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMTg9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzMzgtXHQvKiBDaGVjayBpZiB0aGUgU0VWIHBvbGljeSBhbGxvd3MgZGVidWdnaW5nICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzMzk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQwLVx0XHRpZiAoIShzZXYtXHUwMDNlcG9saWN5IFx1MDAyNiBTTlBfUE9MSUNZX01BU0tfREVCVUcpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0NzpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXHRcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZGJnIGRiZyA9IHswfTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjE6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX0VOQ19NQVNLKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyMi1cdFx0ZXJyb3JfY29kZSB8PSBQRkVSUl9QUklWQVRFX0FDQ0VTUztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0NDAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDE6XHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFwmIzM0O1NFVi1TTlBcJiMzNDsgOlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVx0XHQgIGlzX3Nldl9lc19ndWVzdCh2Y3B1KSA/IFwmIzM0O1NFVi1FU1wmIzM0OyA6XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMwLXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDMxOlx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMyLX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQ0Mi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDQzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYF9fX19zZXZfc25wX2d1ZXN0KGt2bSlgIGFuZCBgS1ZNX1g4Nl9TTlBfVk1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZ2VuZXNpcyBhbmQgbWVjaGFuaWNzIG9mIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYEtWTV9YODZfU05QX1ZNYCBzdHJ1Y3R1cmUuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBpcyByb2J1c3QsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzIGFsaWduIHBlcmZlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjcmVhdGlvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gLiBXaGVyZSBpcyBpdCBiZWluZyBpbnN0YW50aWF0ZWQ/IFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgcGFyYW1ldGVycyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgU0VWLVNOUCBndWVzdCB2aXJ0dWFsaXphdGlvbj8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvd2FyZCBidWlsZGluZyBhIHRydWUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MDY6XHR7XG4gNDA3Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiBzZXYtXHUwMDNlZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXHUwMDNlYWN0aXZlKTtcbiA0MTA6XHR9XG4gNDExOlx0XG4gNDEyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MTM6XHR7XG4gNDE0Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA0MTc6XHRcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xuIDQxODpcdH1cbiA0MTk6XHRcbiA0MjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDIzOlx0fVxuIDQyNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyNTpcdHtcbiA0MjY6XHRcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0Mjc6XHR9XG4gNDI4Olx0XG4gNDI5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzMDpcdHtcbiA0MzE6XHRcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDMyOlx0fVxuIDQzMzpcdCNlbHNlXG4gNDM0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDM1Olx0e1xuIDQzNjpcdFx0cmV0dXJuIGZhbHNlO1xuIDQzNzpcdH1cbiA0Mzg6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0Mzk6XHR7XG4gNDQwOlx0XHRyZXR1cm4gZmFsc2U7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0NDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgQU1EIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIFZNIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBLVk0gaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNldi0mZ3Q7dm1zYV9mZWF0dXJlc2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgaXQgc2V0cyB0aGluZ3MgdXAgZm9yIGFuIEFNRCBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwYXRoIGZvciB0aGlzLCBhcyBpdCYjMzk7cyBmb3VuZGF0aW9uYWwgdG8gdGhlIHNlY3VyaXR5IHBvc3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBBTUQgU0VWLVNOUCBhcmUgZW5hYmxlZCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpbnZvbHZlcyBwYXJzaW5nIHBsYXRmb3JtIGluZm9ybWF0aW9uIGFuZCB0aGVuIGNvbmZpZ3VyaW5nIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGFuZCBwaWVjZXMgd2l0aGluIHRoZSBWTVNBIHN0cnVjdHVyZXMuIFdoZXJlIGRvZXMgdGhlIGNvZGUgYWN0dWFsbHkgZGV0ZXJtaW5lIHdoYXQgU05QIGZlYXR1cmVzIGFyZSBhZHZlcnRpc2VkLCBhbmQgaG93IGRvZXMgaXQgZW5zdXJlIHRoZXkmIzM5O3JlIGNvcnJlY3RseSBzZXQgZHVyaW5nIHRoZSBWTSBsYXVuY2ggc2VxdWVuY2U/IEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIGNvbmZpcm0gdGhpcy4gSSBiZXQgaXQgaXMgYSBmdW5jdGlvbiBvZiB0aGUgSHlwZXJ2aXNvci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGUgY29kZSB3aGVyZSB0aGUgYHNldmAgc3RydWN0IGlzIGdldHRpbmcgYnVpbHQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBBTUQgU0VWLVNOUCBzcGVjaWZpYyBoYXJkd2FyZSBiaXRzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgYnV0IHRoZSBjb2RlIHRlbGxzIHRoZSB0cnV0aC4gSSYjMzk7bGwgbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZ2V0dGluZyBhbmQgc2V0dGluZyB0aG9zZSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGV4ZWN1dGlvbiwgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9MzA2PXN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtMzA3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVCgwKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtMzA5LSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVCgzKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNi1cdGlmIChzbnBfYWN0aXZlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1Mzc6XHRcdHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQxNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDE2Olx0cmV0dXJuIChzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTctXHQgICAgICAgIVdBUk5fT05fT05DRSghX19fX3Nldl9lc19ndWVzdChrdm0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxOTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFNFViBmcmFtZXdvcmssIGVzcGVjaWFsbHkgZm9yIEFNRCBwcm9jZXNzb3JzLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhleSYjMzk7cmUgc2V0dGluZyB0aGluZ3MgdXAgaW4gdGhlIGh5cGVydmlzb3IgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIFNFVi1FUyBvciBTRVYtU05QIGZ1bmN0aW9uYWxpdHkuIEkgc3VzcGVjdCB0aGVyZSYjMzk7bGwgYmUgc29tZSBjcnVjaWFsIGxvZ2ljIHJlZ2FyZGluZyBwYWdlIG1hcHBpbmcsIGtleSBkZXJpdmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbCBndWVzdCByZWdpc3RlciBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoYXQgYWZmZWN0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggS1ZNJiMzOTtzIGV4aXN0aW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODU6XHRcdFx0X19mcmVlX3BhZ2UodmlydF90b19wYWdlKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKSk7XG4gNDg2Olx0XG4gNDg3Olx0XHRzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiA9IE5VTEw7XG4gNDg4Olx0XHRzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYgPSBOVUxMO1xuIDQ4OTpcdH1cbiA0OTA6XHRcbiA0OTE6XHRzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4gNDkyOlx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXG4gNDkzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbiA0OTQ6XHR7XG4gNDk1Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0OTY6XHRcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcbiA0OTc6XHRcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbiA0OTg6XHRcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG4gNDk5Olx0XHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4gNTAwOlx0XHRpbnQgcmV0O1xuIDUwMTpcdFxuIDUwMjpcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzKVxuIDUwMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDQ6XHRcbiA1MDU6XHRcdGlmIChkYXRhLVx1MDAzZWZsYWdzKVxuIDUwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICghc25wX2FjdGl2ZSlcbiA1MDk6XHRcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbiA1MTA6XHRcbiA1MTE6XHRcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIDUxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTM6XHRcbiA1MTQ6XHRcdGlmIChkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2UgR0hDQl9WRVJTSU9OX01BWCB8fCAoIWVzX2FjdGl2ZSBcdTAwMjZcdTAwMjYgZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24pKVxuIDUxNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTY6XHRcbiA1MTc6XHRcdC8qXG4gNTE4Olx0XHQgKiBLVk0gc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgbWFuZGF0b3J5IGZlYXR1cmVzIGRlZmluZWQgYnkgdmVyc2lvblxuIDUxOTpcdFx0ICogMiBvZiB0aGUgR0hDQiBwcm90b2NvbCwgc28gZGVmYXVsdCB0byB0aGF0IGZvciBTRVYtRVMgZ3Vlc3RzIGNyZWF0ZWRcbiA1MjA6XHRcdCAqIHZpYSBLVk1fU0VWX0lOSVQyIChLVk1fU0VWX0lOSVQgZm9yY2VzIHZlcnNpb24gMSkuXG4gNTIxOlx0XHQgKi9cbiA1MjI6XHRcdGlmIChlc19hY3RpdmUgXHUwMDI2XHUwMDI2ICFkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbilcbiA1MjM6XHRcdFx0ZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24gPSAyO1xuIDUyNDpcdFxuIDUyNTpcdFx0aWYgKHNucF9hY3RpdmUgXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uIFx1MDAzYyAyKVxuIDUyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Mjc6XHRcbiA1Mjg6XHRcdGlmICh1bmxpa2VseShzZXYtXHUwMDNlYWN0aXZlKSlcbiA1Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTMwOlx0XG4gNTMxOlx0XHRzZXYtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiA1MzI6XHRcdHNldi1cdTAwM2Vlc19hY3RpdmUgPSBlc19hY3RpdmU7XG4gNTMzOlx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyA9IGRhdGEtXHUwMDNldm1zYV9mZWF0dXJlcztcbiA1MzQ6XHRcdHNldi1cdTAwM2VnaGNiX3ZlcnNpb24gPSBkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbjtcbiA1MzU6XHRcbiA1MzY6XHRcdGlmIChzbnBfYWN0aXZlKVxuIDUzNzpcdFx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbiA1Mzg6XHRcbiA1Mzk6XHRcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuIDU0MDpcdFx0aWYgKHJldClcbiA1NDE6XHRcdFx0Z290byBlX25vX2FzaWQ7XG4gNTQyOlx0XG4gNTQzOlx0XHRpbml0X2FyZ3MucHJvYmUgPSBmYWxzZTtcbiA1NDQ6XHRcdHJldCA9IHNldl9wbGF0Zm9ybV9pbml0KFx1MDAyNmluaXRfYXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDU2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWLVNOUCBJbml0aWFsaXphdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3RlcC1ieS1zdGVwLiBGaXJzdCwgYHNldl9wbGF0Zm9ybV9pbml0KCZhbXA7aW5pdF9hcmdzKWAgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIHRoZSBDQ1AgZHJpdmVyLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBwYXRoLiBUaGVuLCB0aGVyZSYjMzk7cyBgc2V2X3NucF9zdXBwb3J0ZWRgIHdpdGhpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNoZWNrIGlzOgoKYGBgYwpzZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCAmYW1wOyZhbXA7IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CmBgYAoKVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHZlcmlmeWluZyBib3RoIHRoYXQgU0VWLVNOUCBpcyBlbmFibGVkIGdlbmVyYWxseSwgYW5kIHRoYXQgdGhlIGhvc3QgcGxhdGZvcm0gYWN0dWFsbHkgc3VwcG9ydHMgaXQsIHVzaW5nIGBjY19wbGF0Zm9ybV9oYXMoKWAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50LiBIb3cgaXMgYHNldl92bV9pbml0YCBvciwgbW9yZSBnZW5lcmFsbHksIGBrdm1fYXJjaF9pbml0X3ZtYCBzZXR0aW5nIHRoZSBga3ZtLSZndDthcmNoLnZtX3R5cGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSYjMzk7cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgVk0gdHlwZSBpcyBiZWluZyBjb25maWd1cmVkLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgU05QIGJlaGF2aW9yLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlIGBLVk1fWDg2X1NOUF9WTWAgZmxhZyBpcyBiZWluZyBzZXQgYW5kIHVzZWQgd2l0aGluIEtWTS4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgdGhlIHJlc3Qgb2YgdGhlIFNOUCBmdW5jdGlvbmFsaXR5IGdldHMgaG9va2VkIHVwLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoZXJlIGBLVk1fWDg2X1NOUF9WTWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfU05QX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NTEyPW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTctICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTUxODogICNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdDRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE5LSAgI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0NVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cdDNcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTc0OiNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzUtI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjU9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3NDpcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3NS1cdFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTE9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk3LVx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg6XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTItXHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9FU19WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjEzOlx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxNC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2MC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NjE6XHRjYXNlIEtWTV9YODZfU05QX1ZNOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYyLVx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzUtXHR2bV90eXBlcyBcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDgtXHRcdHByX2luZm8oXCYjMzQ7U0VWLVNOUCAlcyAoQVNJRHMgJXUgLSAldSlcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XHRcdFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTAtXHRcdFx0bWluX3NucF9hc2lkLCBtYXhfc25wX2FzaWQpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzE0Nz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMzE2MS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzE2MjpcdHN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMTYzLVxuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cdDNcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTc0OiNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzUtI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTM1LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaDozNjpcdHJldHVybiB2bS1cdTAwM2V0eXBlID09IEtWTV9YODZfU05QX1ZNO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTM3LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc4PXN0YXRpYyBib29sIGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgwLSNpZmRlZiBfX3g4Nl82NF9fXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NDgxOlx0cmV0dXJuIHNoYXBlLnR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgyLSNlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM9NzQ9dm9pZCBzbnBfdm1faW5pdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jOjc4Olx0VEVTVF9BU1NFUlRfRVEodm0tXHUwMDNldHlwZSwgS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzktXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFx1MDAyNmluaXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04My1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6ODQ6XHRcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtODUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYz0xMTg9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2Olx0aGF2ZV9zbnAgPSBrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDctXHRURVNUX0FTU0VSVCghaGF2ZV9zbnAgfHwga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCksXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcdFx0dGVzdF9mbGFncyhLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2MS1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTYyOlx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzE2PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taWdyYXRlX3JlamVjdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzIxOlx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjItXHRzbnBfdm1faW5pdChzcmNfdm0pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzI2Olx0ZHN0X3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjctXHRfX3ZtX3ZjcHVfYWRkKGRzdF92bSwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jPTMzOD1zdGF0aWMgdm9pZCB0ZXN0X3Nldl9zbnBfbWlycm9yX3JlamVjdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zNDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzQzOlx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zNDQtXHRzbnBfdm1faW5pdChzcmNfdm0pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yMjE9c3RhdGljIHZvaWQgdGVzdF9zZXZfc21va2Uodm9pZCAqZ3Vlc3QsIHUzMiB0eXBlLCB1NjQgcG9saWN5KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjI1Olx0aWYgKHR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVx0XHR0ZXN0X3NldihndWVzdCwgdHlwZSwgcG9saWN5IHwgU05QX1BPTElDWV9EQkcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMzgtXHRcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjM5Olx0XHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNDAtXHRcdFx0dGVzdF9zeW5jX3Ztc2EodHlwZSwgcG9saWN5IHwgU05QX1BPTElDWV9EQkcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjYxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MjpcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MzpcdFx0dGVzdF9zZXZfc21va2UoZ3Vlc3Rfc25wX2NvZGUsIEtWTV9YODZfU05QX1ZNLCBzbnBfZGVmYXVsdF9wb2xpY3koKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgU0VWLVNOUCBDb21wYXRpYmlsaXR5KioKCkFscmlnaHQsIHNvIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYyByZWdhcmRpbmcgS1ZNIGFuZCBTRVYtU05QOiBDYW4gSSBzdWNjZXNzZnVsbHkgdXNlIGBLVk1fQ1JFQVRFX1ZNYCB3aXRoIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJiMzOTt0KiBzdXBwb3J0IFNFVi1TTlA/IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGdyYWNlZnVsIGZhbGxiYWNrLCBvciBwZXJoYXBzIGFuIGVycm9yIGlzIGV4cGxpY2l0bHkgdGhyb3duLgoKVG8gZmlndXJlIHRoaXMgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24sIHByb2JhYmx5IGZvdW5kIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gT3IgbWF5YmUgdGhlcmUmIzM5O3Mgc29tZSBzZXR1cCByZWxhdGVkIHRvIFNFViBoYXJkd2FyZSwgc29tZXRoaW5nIGNhbGxlZCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgdGhhdCBoYW5kbGVzIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdGhlIHJlcXVpcmVkIGNoZWNrcyBmb3IgU0VWLVNOUCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBrdm1fYXJjaF9pbml0X3ZtYCBhbmQgZ28gZnJvbSB0aGVyZSwgYW5kIHNlZSB3aGVyZSBgc2V2X2hhcmR3YXJlX3NldHVwYCBmaXRzIGluIGlmIG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBkZXRlY3Qgb3IgZ3JhY2VmdWxseSBoYW5kbGUgdW5zdXBwb3J0ZWQgZmVhdHVyZXMuIExldCYjMzk7cyBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9TTlBfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY1PXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ny1cdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4Olx0Ym9vbCBzbnBfYWN0aXZlID0gdm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5LVx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjEyLVx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTYxOlx0Y2FzZSBLVk1fWDg2X1NOUF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2Mi1cdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMzLVx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjM0Olx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM1LVx0dm1fdHlwZXMgXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVx0XHRwcl9pbmZvKFwmIzM0O1NFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQ5Olx0XHRcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc25wX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUwLVx0XHRcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uIG9uIHg4NioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6ZXMgb24geDg2LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSByZWNhbGwsIGlzIHByb2JhYmx5IHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uICprdm1fYXJjaF9pbml0X3ZtKiBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmaWxlIG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3ctbGV2ZWwsIHg4Ni1zcGVjaWZpYyBwYXJ0cyBvZiB2aXJ0dWFsIG1hY2hpbmUgc2V0dXAgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhbmQgZW50cnkgcG9pbnRzIGludm9sdmVkIGluIHRoZSBWTSYjMzk7cyBhcmNoaXRlY3R1cmFsIGluaXRpYWxpemF0aW9uLCBzbyBkaWdnaW5nIGludG8gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6Mzk0Olx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzk1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NTctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTg6XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTU5LVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU4NS1cdCAgICAhKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihjcjJfb3JfZ3BhKSkpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NjA4PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxNy1cdH07XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc2MTg6XHRib29sIHphcF9hbGwgPSBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxOS1cdFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTk0LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTk1Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xOTYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNodGFibGUuaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY1OnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTM6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk3Olx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg6XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzOTpcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01ODYtXHR9O1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1ODc6XHR1bnNpZ25lZCBsb25nIHZtX3R5cGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4OC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTg5Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTAtXHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5MjpcdHZtX3R5cGUgPSAoYXJncC1cdTAwM2VpZCA9PSBLVk1fU0VWX0lOSVQgPyBLVk1fWDg2X1NFVl9WTSA6IEtWTV9YODZfU0VWX0VTX1ZNKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTk3LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5ODpcdGlmICh2bV90eXBlID09IEtWTV9YODZfU0VWX0VTX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTktXHRcdGRhdGEuZ2hjYl92ZXJzaW9uID0gR0hDQl9WRVJTSU9OX01JTjtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTE6XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjEyOlx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9OTY4PXN0YXRpYyBpbnQgc2V2X2VzX3N5bmNfdm1zYShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwMjctXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTAyODpcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwMjktXHRcdHhzYXZlID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXJlZ3MueHNhdmU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMTM2PWludCBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNTYtXHQvKiBEbyBub3QgYWxsb3cgU05QIFZNIG1pZ3JhdGlvbiB1bnRpbCBhZGRpdGlvbmFsIHN0YXRlIHRyYW5zZmVyIGlzIGltcGxlbWVudGVkICAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMTU3Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gc291cmNlX2t2bS1cdTAwM2VhcmNoLnZtX3R5cGUgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OC1cdCAgICBzZXZfZ3Vlc3Qoa3ZtKSB8fCAhc2V2X2d1ZXN0KHNvdXJjZV9rdm0pIHx8IHNldl9zbnBfZ3Vlc3Qoc291cmNlX2t2bSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NTU9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTYte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTU3Olx0c3dpdGNoIChrdm0tXHUwMDNlYXJjaC52bV90eXBlKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzEtXHRkZWZhdWx0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTcyOlx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7VW5zdXBwb3J0ZWQgVk0gdHlwZSAldVwmIzM0Oywga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTQtXHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA5NTpcdHUzMiB2bV90eXBlcyA9IDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVx0aWYgKHNldl9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2IG1pbl9zZXZfYXNpZCBcdTAwM2M9IG1heF9zZXZfYXNpZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzMDpcdFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX1ZNKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMS1cdGlmIChzZXZfZXNfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNiBtaW5fc2V2X2VzX2FzaWQgXHUwMDNjPSBtYXhfc2V2X2VzX2FzaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzI6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NFVl9FU19WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzU6XHR2bV90eXBlcyBcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzNi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNzpcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSB2bV90eXBlcztcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzOC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDAtXHRcdHByX2luZm8oXCYjMzQ7U0VWICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0MTpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQyLVx0XHRcdG1pbl9zZXZfYXNpZCwgbWF4X3Nldl9hc2lkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDQtXHRcdHByX2luZm8oXCYjMzQ7U0VWLUVTICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NTpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X2VzX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9FU19WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVx0XHRcdG1pbl9zZXZfZXNfYXNpZCwgbWF4X3Nldl9lc19hc2lkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDgtXHRcdHByX2luZm8oXCYjMzQ7U0VWLVNOUCAlcyAoQVNJRHMgJXUgLSAldSlcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XHRcdFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTAtXHRcdFx0bWluX3NucF9hc2lkLCBtYXhfc25wX2FzaWQpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyNj1zdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQzMS1cdHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZTAxID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQzMjpcdGNoYXIgKnZtX3R5cGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MzMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQxOlx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0NS1cdHByX2VycihcJiMzNDslcyB2Q1BVJXUgVk1DQiAlcCwgbGFzdCBhdHRlbXB0ZWQgVk1SVU4gb24gQ1BVICVkXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQ2Olx0ICAgICAgIHZtX3R5cGUsIHZjcHUtXHUwMDNldmNwdV9pZCwgc3ZtLVx1MDAzZWN1cnJlbnRfdm1jYi1cdTAwM2VwdHIsIHZjcHUtXHUwMDNlYXJjaC5sYXN0X3ZtZW50cnlfY3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Ny1cdHByX2VycihcJiMzNDtWTUNCIENvbnRyb2wgQXJlYTpcXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjI6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzk6XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA4MC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjE3MT1zdGF0aWMgaW50IGt2bV9pb2N0bF9nZXRfc3VwcG9ydGVkX2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoyMTkzOnN0YXRpYyBib29sIGt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5NC17XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5NTpcdHJldHVybiB0eXBlIFx1MDAzYyAzMiBcdTAwMjZcdTAwMjYgKGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyBcdTAwMjYgQklUKHR5cGUpKTtcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk2LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjIwMz1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0yNDA0LVx0Y2FzZSBLVk1fQ0FQX1ZNX1RZUEVTOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0MDU6XHRcdHIgPSBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXM7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5OTk9aW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2Mi1cbmFyY2gveDg2L2t2bS94ODYuYzo3MDYzOlx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzID0gQklUKEtWTV9YODZfREVGQVVMVF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2NC1cdGt2bV9jYXBzLnN1cHBvcnRlZF9tY2VfY2FwID0gTUNHX0NUTF9QIHwgTUNHX1NFUl9QO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03MTI0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tWTV9TV19QUk9URUNURURfVk0pIFx1MDAyNlx1MDAyNiB0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzEyNTpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzEyNi1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg0Ny1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODQ4Olx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg0OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1MC1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODUxOlx0a3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9IHR5cGU7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1Mi1cdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDI4CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDE1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGluIFN0YW5kYXJkIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgKnVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJiMzOTtyZSB0eXBpY2FsbHkgd29ya2luZyB3aXRoLCBsaWtlIFFFTVUgYW5kIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKS4gSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOgoKRmlyc3QsIHRoZSBjb2RlIHRvdWNoZXMgYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gIOKAkyB3aGljaCBpcyBrZXkgaGVyZSDigJMgaXMgY29udGluZ2VudCBvbiBgc2V2X3NucF9zdXBwb3J0ZWRgIGJlaW5nIHRydWUuIEFuZCBgc2V2X3NucF9zdXBwb3J0ZWRgIGlzIGRpcmVjdGx5IGxpbmtlZCB0byBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFRoaXMsIGluIHR1cm4sICpyZXF1aXJlcyogYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIHN1cHBvcnQsIGFuZCBleHBsaWNpdGx5ICpleGNsdWRlcyogdGhlIGh5cGVydmlzb3IgY2FzZSAoYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCkuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgUk1QT1BUYCBzdHVmZiDigJMgYWxsIHRob3NlIGNoYW5nZXMgYXJvdW5kIGBYODZfRkVBVFVSRV9STVBPUFRgLCBgc25wX3NldHVwX3JtcG9wdGAsIGV0Yy4gVGhlc2UgYXJlICphbHNvKiB0aWdodGx5IGNvdXBsZWQgdG8gYmFyZS1tZXRhbCBoYXJkd2FyZSB3aXRoIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYW5kIHNwZWNpZmljIENQVSBmZWF0dXJlcyBsaWtlIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBTZWdtZW50ZWQgUk1QIHN1cHBvcnQgKHdoaWNoIGFwcGVhcnMgdG8gYmUgWmVuIDUvWmVuIDYgc3BlY2lmaWMpLiBFeGVjdXRpbmcgdGhlIGJpbnV0aWxzIFJNUE9QVCBvcGNvZGUgYW5kIGhhdmluZyBwaHlzaWNhbCBBTUQgSU9NTVUgLyBDQ1AgY28tcHJvY2Vzc29yIGhhcmR3YXJlIGlzIGFub3RoZXIgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgSSYjMzk7dmUgbG9va2VkIGF0OgoKMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYDogSnVzdCBkZWZpbml0aW9ucyBhbmQgaGVhZGVycy4gTm8gZXhlY3V0aW9uIHBhdGguCjIuICBgYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY2A6IENQVUlEIGRldGVjdGlvbiBjb2RlOyB0aGF0JiMzOTtzIGZpbmUsIGJ1dCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBDUFUgdG8gKmhhdmUqIFJNUE9QVCwgd2hpY2ggaW4gYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBpdCB3b24mIzM5O3QuCjMuICBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6IGBzZXZfdm1fZGVzdHJveWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gICpvbmx5KiBpZiBpdCYjMzk7cyBhbiBTTlAgZ3Vlc3QgVk0uIEFuIFNOUCBndWVzdCBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuCjQuICBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgOiBGdW5jdGlvbnMgbGlrZSBgc25wX3ByZXBhcmVgLCBgc25wX3NodXRkb3duYCwgYW5kIG90aGVycyBhcmUgZ3VhcmRlZCBieSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgKm9yKiBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgb3IgdGhleSBhcmUgY2FsbGVkIGZyb20gQU1EIElPTU1VIGluaXQsIHdoaWNoIGFsc28gY2hlY2tzIGAhY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBhbHNvIG5lZWRzIGEgcGh5c2ljYWwgQU1EIFplbjMmIzQzOyBDUFUuCjUuICBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2A6IGBfX3Nldl9zbnBfaW5pdF9sb2NrZWRgICppbW1lZGlhdGVseSogY2hlY2tzIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIGJhaWxzIG91dCBpZiBpdCYjMzk7cyBub3QgcHJlc2VudC4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgKm5vbmUqIG9mIHRoaXMgY29kZSBjYW4gZXhlY3V0ZSBiZWNhdXNlIHRoZSBjb3JlIHByZXJlcXVpc2l0ZXMgYXJlIGFic2VudCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBRRU1VIGFuZCBHQ0UgKmV4cGxpY2l0bHkqIGV4cG9zZSBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAsIHdoaWNoICpkaXNhYmxlcyogdGhlIG5lY2Vzc2FyeSBBTUQgU05QIGhvc3QgcGxhdGZvcm0gc3VwcG9ydC4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgKipzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqKiBoYXJkd2FyZS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpTbywgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBmb3Igb3VyIHRvb2w6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYGZhbHNlYAoqICAgKipFbmFibGVDb25maWdzOioqIGBudWxsYCBvciBgW11gCiogICAqKkZvY3VzU3ltYm9sczoqKiBgbnVsbGAgb3IgYFtdYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtNb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBSTVBPUFQgYW5kIFNFVi1TTlAgaG9zdCBmdW5jdGlvbmFsaXR5IHJlcXVpcmUgYmFyZS1tZXRhbCBBTUQgcGh5c2ljYWwgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydC4gIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgZXhwbGljaXRseSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgYSBoeXBlcnZpc29yIChgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmApLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTMuNjY5NTk2ODgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMTkyMzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCAoUk1QIG9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgU0VWLVNOUCBob3N0IGluaXRpYWxpemF0aW9uL3RlYXJkb3duIHBhdGhzLiBBbGwgbW9kaWZpZWQgY29kZSBwYXRocyByZXF1aXJlIEFNRCBTRVYtU05QIGhvc3Qgc3VwcG9ydCAoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBDUFUvZmlybXdhcmUgY2FwYWJpbGl0aWVzIChzdWNoIGFzIFg4Nl9GRUFUVVJFX1JNUE9QVCBhbmQgU2VnbWVudGVkIFJNUCkuIEluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgcHJlc2VudCB3aGljaCBwcmV2ZW50cyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBmcm9tIGJlaW5nIGVuYWJsZWQgKGluIGJzcF9kZXRlcm1pbmVfc25wKCkpLCBtYWtpbmcgYWxsIG1vZGlmaWVkIGxvZ2ljIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIGJhcmUtbWV0YWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBhbmQgUk1QT1BULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTMuNjY5NjAyMDkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU2ODI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjg0N2JhZjQ5YjhmMmI1YzA1NDY3MTBmZDZmNWUyN2ZmNDQxYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC03Niw3ICs3Niw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcXHRcXHRcXHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVxcdFxcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XFx0XFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyKyA3KSAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFxcdFxcdCggMyozMisgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1xcdCggMyozMisgOCkgLyogXFxcImNvbnN0YW50X3RzY1xcXCIgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xcbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFxcdCggMyozMisgOSkgKiBcXFwidXBcXFwiIFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFxcdFxcdFxcdCggMyozMisxMCkgLyogXFxcImFydFxcXCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IDNhOGU1MWEwYzllODguLjE2MzVlMmUxYzU3NmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC03NjEsNiArNzYxLDkgQEBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFxcdDBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcXHQoKCh4KSBcXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXFx1MDAzZVxcdTAwM2UgOClcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcXHRcXHQweGMwMDEwMTM5XFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXFx0MFxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXFx0XFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXFxuIFxcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVxcdFxcdFxcdDB4YzAwMWYwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXFxuIFxcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XFxuIH1cXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbkBAIC02ODAsNiArNjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXFx0XFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXFxuK1xcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFxcdFxcdFxcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFxcdFxcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcXG4gXFx0eyAwLCAwLCAwLCAwLCAwIH1cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTMwMzIsNiArMzAzMiw4IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uYzE2ZjgyNjQyMzkwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC0xMjQsNiArMTI1LDE3IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcXG4gXFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XFxuK1xcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuK1xcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2MywxNyBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBybXBvcHRfZGlzYWJsZSh2b2lkKVxcbit7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChybXBvcHRfd3EpXFxuK1xcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4ge1xcbkBAIC01NjUsMTEgKzU4MywxNDcgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4gXFx0aWYgKHN5c2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRybXBvcHRfZGlzYWJsZSgpO1xcbitcXG4gXFx0Y2xlYXJfcm1wKCk7XFxuIFxcdG9uX2VhY2hfY3B1KG1mZF9yZWNvbmZpZ3VyZSwgTlVMTCwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXFxuK1xcdCAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmRcXG4rXFx0ICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbiBcXG4rc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcXG4rICogbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuXFxuKyAqXFxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSlcXG4re1xcbitcXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXG4rXFx0LyogU3VwcG9ydGVkIGJ5IGJpbnV0aWxzIDIuNDgrICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1xcXCJcXG4rXFx0XFx0ICAgICA6OiBcXFwiYVxcXCIgKHBhX3N0YXJ0KSwgXFxcImNcXFwiIChvcClcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rfVxcbitcXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxcbit7XFxuK1xcdHU2NCBwYTtcXG4rXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdHJtcG9wdChwYSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXYXJtIHVwIHRoZSBSTVBPUFQgY2FjaGUgb24gdGhpcyBwaW5uZWQgcGVyLUNQVSB3b3JrZXIgd2l0aCBpbnRlcnJ1cHRzXFxuK1xcdCAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuXFxuK1xcdCAqL1xcbitcXHRybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTtcXG4rXFxuK1xcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcXG4rfVxcbitcXG4rLypcXG4rICogRGVsYXksIGluIG1pbGxpc2Vjb25kcywgYmVmb3JlIHRoZSBSTVAgcmUtb3B0aW1pemF0aW9uIHBhc3MgcnVucyBhZnRlciBhbiBTTlBcXG4rICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzXFxuKyAqIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhbiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCdzIHBhZ2VzIHRpbWUgdG9cXG4rICogYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCwgaHlwZXJ2aXNvci1vd25lZCBzdGF0ZS4gIFRoZSAxMCBzZWNvbmQgdmFsdWVcXG4rICogaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0IHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxcbisgKi9cXG4rI2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXFx0KDEwICogTVNFQ19QRVJfU0VDKVxcbitcXG4rLypcXG4rICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW5cXG4rICogaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXIgc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWRcXG4rICogdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG8gc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlXFxuKyAqIGd1ZXN0IHdob3NlIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXFxuKyAqIHRlYXJkb3duJ3Mgc2Nhbi5cXG4rICovXFxuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxcbit7XFxuK1xcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFybXBvcHRfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayxcXG4rXFx0XFx0XFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgXFxcImt2bS1hbWRcXFwiKTtcXG4rXFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxcbit7XFxuK1xcdHU2NCBybXBvcHRfYmFzZTtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb25cXG4rXFx0ICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvblxcbitcXHQgKiBwYXNzIHJhdGhlciB0aGFuIHJlZG9pbmcgdGhlIHNldHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIGEgZGVkaWNhdGVkIHBlci1DUFUgd29ya3F1ZXVlIHNvIHRoZSBwb3RlbnRpYWxseSBsZW5ndGh5IHdhcm0tdXBcXG4rXFx0ICogc2NhbiBkb2VzIG5vdCB0aWUgdXAgYSBzaGFyZWQgd29ya3F1ZXVlIHdvcmtlci5cXG4rXFx0ICovXFxuK1xcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwicm1wb3B0X3dxXFxcIiwgV1FfUEVSQ1BVLCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIGRvX3JtcG9wdF93b3JrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVClcXG4rXFx0XFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCArIFNaXzJUO1xcbitcXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiUk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcXFwiY2NwXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXFxuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXFxuQEAgLTU3Nyw2ICs3MzEsOCBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbiAgKi9cXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIFxcbkBAIC01ODYsNiArNzQyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4gXFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xcbitcXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcXG4rXFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbitcXHRcXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICd0cnVlJyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWNcXG4gXFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxcbkBAIC02ODMsMTMgKzg0OCwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxcbiBcXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxcbiB7XFxuLVxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxcbitcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xcbiBcXHRcXHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xcbiBcXG4tXFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbi1cXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XFxuK1xcdFxcdGlmIChybXBfY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcXG4rXFx0XFx0XFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXFxuK1xcdCAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXRcXG4rXFx0ICogc2VnbWVudGVkIFJNUC5cXG4rXFx0ICovXFxuK1xcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTtcXG4rXFxuK1xcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5pbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXFxuQEAgLTE2NjMsNiArMTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuIFxcbiBcXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XFxuIFxcbitcXHRzbnBfc2V0dXBfcm1wb3B0KCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTQuMTg1OTE3MTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MzUwMjg5NjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTI4NDdiYWY0OWI4ZjJiNWMwNTQ2NzEwZmQ2ZjVlMjdmZjQ0MWJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uZDE3OTVjZTIxOWRhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiArMzAzMiw4IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbitcbitcdFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVx1MDAzZWhhbmRsZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uYzE2ZjgyNjQyMzkwMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYW1kLWlvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgKzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xuIFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X29wX3R5cGUge1xuK1x0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbitcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXG4re1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJtcG9wdF93cSlcbitcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgKzU4MywxNDcgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRybXBvcHRfZGlzYWJsZSgpO1xuK1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFVcbitcdCAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmRcbitcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuIFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuK31cbitcbisvKlxuKyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxuKyAqXG4rICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4rICovXG4rc3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSlcbit7XG4rXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcbitcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcbitcbitcdC8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4KyAqL1xuK1x0YXNtIHZvbGF0aWxlKFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wiXG4rXHRcdCAgICAgOjogXCJhXCIgKHBhX3N0YXJ0KSwgXCJjXCIgKG9wKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbit9XG4rXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cbitzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4re1xuK1x0dTY0IHBhO1xuK1xuK1x0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICs9IFNaXzFHKVxuK1x0XHRybXBvcHQocGEpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0LypcbitcdCAqIFdhcm0gdXAgdGhlIFJNUE9QVCBjYWNoZSBvbiB0aGlzIHBpbm5lZCBwZXItQ1BVIHdvcmtlciB3aXRoIGludGVycnVwdHNcbitcdCAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuXG4rXHQgKi9cbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1xuK1x0b25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuK31cbitcbisvKlxuKyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QXG4rICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzXG4rICogYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuIGFuZCBnaXZlcyBlYWNoIGd1ZXN0J3MgcGFnZXMgdGltZSB0b1xuKyAqIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsIGh5cGVydmlzb3Itb3duZWQgc3RhdGUuICBUaGUgMTAgc2Vjb25kIHZhbHVlXG4rICogaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0IHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuKyAqL1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0KDEwICogTVNFQ19QRVJfU0VDKVxuK1xuKy8qXG4rICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW5cbisgKiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlciBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZFxuKyAqIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZVxuKyAqIGd1ZXN0IHdob3NlIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4rICogdGVhcmRvd24ncyBzY2FuLlxuKyAqL1xuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuK3tcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXG4rXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFwia3ZtLWFtZFwiKTtcbitcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbit7XG4rXHR1NjQgcm1wb3B0X2Jhc2U7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZXQgdXAgb25jZTogdGhlIHdvcmtxdWV1ZSBhbmQgUk1QT1BUX0JBU0UgTVNScyBhcmUgbGVmdCBpbiBwbGFjZSBvblxuK1x0ICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvblxuK1x0ICogcGFzcyByYXRoZXIgdGhhbiByZWRvaW5nIHRoZSBzZXR1cC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFVzZSBhIGRlZGljYXRlZCBwZXItQ1BVIHdvcmtxdWV1ZSBzbyB0aGUgcG90ZW50aWFsbHkgbGVuZ3RoeSB3YXJtLXVwXG4rXHQgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLlxuK1x0ICovXG4rXHRybXBvcHRfd3EgPSBhbGxvY193b3JrcXVldWUoXCJybXBvcHRfd3FcIiwgV1FfUEVSQ1BVLCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4rXG4rXHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuK1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbitcbitcdC8qXG4rXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xuK1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4rXG4rXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcbitcbitcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKVxuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcbitcdHByX2luZm8oXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxuXCIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFwiY2NwXCIpO1xuK1xuIC8qXG4gICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhc1xuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXG5AQCAtNTc3LDYgKzczMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiAgKi9cbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4ge1xuK1x0dTY0IHZhbDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiArNzQyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiBcdGlmICghc2V0dXBfcm1wdGFibGUoKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG4rXHQvKlxuK1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4rXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbitcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuK1x0ICovXG4rXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcbitcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuK1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4rXG4gXHQvKlxuIFx0ICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAndHJ1ZScgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICs4NDgsMjEgQEAgc3RhdGljIGJvb2wgcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8odm9pZClcbiBcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG4ge1xuLVx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXG4rXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xuIFx0XHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xuIFxuLVx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4tXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4rXHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuK1x0XHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXG4rXHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4rXHQgKiBzZWdtZW50ZWQgUk1QLlxuK1x0ICovXG4rXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4rXG4rXHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTY2Myw2ICsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbitcdHNucF9zZXR1cF9ybXBvcHQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUyOjU0LjE4NTkxODMyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNTgwMjYwMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3MgYnJlYWsgaXQgZG93biBhbmQgc2VlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgc3RhbmRhcmQgdHJpYWdlIHRhc2ssIGp1c3QgYSBkZXZlbG9wZXIgUUEgYW5kIHRyaWFnZSBvZiBhIHBhdGNoIHNlcmllcy5cblxuRmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYWRkaXRpb24gb2YgUk1QT1BUIHN1cHBvcnQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gQU1EJ3Mgc2VjdXJlIG1lbW9yeSBlbmNyeXB0aW9uIHRlY2hub2xvZ3ksIFNFVi1TTlAuIEhlcmUncyB3aGF0IGp1bXBzIG91dDpcblxuKiAgICoqSGVhZGVyIEZpbGVzOioqIFdlJ3JlIGludHJvZHVjaW5nIG5ldyBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBpbiBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGFuZCBgc2V2LmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBjb250cm9sbGVkLlxuKiAgICoqQ1BVIEZlYXR1cmUgRGV0ZWN0aW9uOioqIENoYW5nZXMgaW4gYHNjYXR0ZXJlZC5jYCBpbmRpY2F0ZSB0aGUgYWRkaXRpb24gb2YgYSBDUFVJRCBiaXQgZm9yIFJNUE9QVC4gVGhpcyBpcyBjbGFzc2ljOyB3ZSdyZSBjaGVja2luZyBmb3IgaGFyZHdhcmUgc3VwcG9ydC5cbiogICAqKktWTSBJbnRlZ3JhdGlvbjoqKiBUaGUgYGt2bS9zdm0vc2V2LmNgIGZpbGVzIGFyZSB3aGVyZSB0aGUgYWN0aW9uIHJlYWxseSBzZWVtcyB0byBiZS4gV2UndmUgZ290IGBzZXZfdm1fZGVzdHJveSgpYCBjYWxsaW5nIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHdpdGhpbiBgc25wX3ByZXBhcmUoKWAgYW5kIGBzbnBfc2h1dGRvd24oKWAgaW52b2x2aW5nIGhvdHBsdWcgZGlzYWJsZS9lbmFibGUuIFRoZXJlJ3MgYSBsb3Qgb2YgZnVuY3Rpb24gYWN0aXZpdHkgaGVyZTogYHJtcG9wdF9jYXBhYmxlKClgLCBgcm1wb3B0KClgLCBgcm1wb3B0X3NjYW5fcmFuZ2UoKWAsIGV0Yy4gV2UncmUgY2xlYXJseSBzZXR0aW5nIHVwLCBlbmFibGluZywgYW5kIG1hbmFnaW5nIHRoZSBSTVBPUFQgZmVhdHVyZSB3aXRoaW4gdGhlIEtWTS9TRVYtU05QIGNvbnRleHQuIEFsc28gd2l0aGluIGBzbnBfcm1wdGFibGVfaW5pdCgpYCB0aGVyZSBhcmUgY2hhbmdlcyB0byBlbmFibGUgdmlhIFNZU0NGRyBhbmQgY2FsbHMgdG8gYGNwdV9ob3RwbHVnX2Rpc2FibGUoKWAuIEFuZCBmaW5hbGx5LCBpbiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIHdpbGwgYmUgY2xlYXJlZCBpZiBub3Qgc2VnbWVudGVkIFJNUC5cbiogICAqKkNyeXB0byBEcml2ZXIgSW52b2x2ZW1lbnQ6KiogVGhlIGBjY3Avc2V2LWRldi5jYCBmaWxlIGlzIGNhbGxpbmcgYHNucF9zZXR1cF9ybXBvcHQoKWAgd2l0aGluIGl0cyBpbml0aWFsaXphdGlvbi4gVGhpcyBzaG93cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjcnlwdG8gbGF5ZXIsIHdoaWNoIGlzIHJlbGV2YW50IGFzIG1lbW9yeSBlbmNyeXB0aW9uIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgU0VWLVNOUC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgc2hvdWxkIGRvIHNvbWUgYGdyZXBgIHdvcmsgb3IgdXNlIGNvZGVzZWFyY2ggdG8gc2VlIHdoZXJlIENDUCwgU0VWLVNOUCwgYW5kIEtWTSBTRVYgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IGdldCBleGVjdXRlZCBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgZnV6emluZy4gRG9lcyB0aGlzIGludGVyYWN0IHdpdGggdXNlcnNwYWNlIGF0IGFsbD8gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEFyZSB0aGVyZSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZXhwb3NlZCBpbnRlcmZhY2VzPyBJZiBpdCdzIGFsbCBpbnRlcm5hbCBLVk0gc3R1ZmYsIHRoZW4gaXQgbWlnaHQgYmUgaGFyZGVyIHRvIGZ1enogZWZmZWN0aXZlbHkuIElmIHRoZXJlIGFyZSBuZXcgaW50ZXJmYWNlcyBvciB1c2VyLWZhY2luZyBwYXJ0cywgaXQncyB2ZXJ5IHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjA3Ljc2NjE4MTc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MDI0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MTppbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUyLWludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY2OT1zdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NzA6c3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03MjU9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcXFwiY2NwXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzEtICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NzMyOmludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzMte1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzOTU9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDMyLVxcdCAqL1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDMzOlxcdGlmIChzbnBfcm1wdGFibGVfaW5pdCgpKSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MzQtXFx0XFx0cHJfd2FybihcXFwiU05QOiBSTVAgaW5pdGlhbGl6YXRpb24gZmFpbGVkLCBTTlAgY2Fubm90IGJlIHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzowOS43NzAyMTA4ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDEwMzUxOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgU0VWLVNOUCBIb3N0IFN1cHBvcnQgaW4gVmlydHVhbGl6ZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU0VWLVNOUCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBUaGF0IG1lYW5zIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFplbiAzKyBvciBaZW4gNS82IHdpdGggdGhlIFJNUE9QVCBpbnN0cnVjdGlvbiwgQU1EIElPTU1VLCBDQ1AgaGFyZHdhcmUuLi4gYW5kIHByb2JhYmx5IG90aGVyIHRoaW5ncy4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIEkgKmFjdHVhbGx5KiB0ZXN0IHRoaXMgc3R1ZmYgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/IFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzdHVmZiwgY29uc2lkZXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgSSdtIHVzaW5nLiBUaGUgY29yZSBwcmluY2lwbGUgaXMgdGhhdCBpZiB0aGUgY29kZSdzIG5vdCByZWFjaGFibGUgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSBzaG91bGRuJ3QgYm90aGVyIGZ1enppbmcgaXQuIEknbSB0aGlua2luZyBhYm91dCB0aG9zZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgY29tcG9uZW50cyDigJMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMgdGhhdCByZWx5IG9uIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhpbmdzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgZWZmZWN0aXZlbHkuIEFsc28sIHRob3NlIGV4ZWN1dGlvbiBwYXRocyB0aGF0IEkgY2FuJ3QgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIHNldHVwIC0gZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1Zywgb3IgY29kZSBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBmdXp6aW5nIHRhcmdldC5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogKmlzKiBBTUQgU0VWIGhvc3Qgc3VwcG9ydCByZWFjaGFibGUgaW4gUUVNVSBvciBHQ0U/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGZpcnN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBLVk0gU0VWIG9yIENDUCBvciBTRVYgZ3Vlc3QgdnMgU0VWIGhvc3QgbWF0dGVycyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBhbmQgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgdHJ1bHkgcmVxdWlyZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhvc2UgY3JpdGVyaWEgYW5kIGNoZWNrIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHNheSBhYm91dCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzoxOC43ODA1NjQ1NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTgwNDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDQ19BVFRSX0hPU1RfU0VWX1NOUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0OlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc3OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgyLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTk9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTUtXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTkzOlxcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTk0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTg3PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5OTI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5My1cXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIwNT12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIwOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMDk6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cXHRcXHRzbnBfZml4dXBfZTgyMF90YWJsZXMoKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jOjMyOlxcdFxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDgte1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjQtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjAwPXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MDItXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYwMzpcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MDQtfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzMyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTczNS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzY6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzM3LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTQxPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk0NS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NDY6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk0Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwNjc9aW50IHBzbWFzaCh1NjQgcGZuKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA3MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDcyOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDczLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE3Nj1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExODAtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE4MTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTE4Mi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjk9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyNzQtXFx0ICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTI3NTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc2LVxcdFxcdHdiaW52ZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xNTA4PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNTE3OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwNjc9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3OlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDc4LVxcdFxcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFxcdTAwMjZlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQ0MjpcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4Ny1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY5ND12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXFx0LyoqXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlxcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cXHQgKlxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcXHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjIwLjU1NjM3MzgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTQ5MTY4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgU05QIEJlaGF2aW9yKipcblxuT2theSwgc28gSSBzdXNwZWN0IHNvbWV0aGluZydzIHVwIHdpdGggaG93IHdlJ3JlIGhhbmRsaW5nIFNOUHMsIGFuZCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIEFNRCBhcmNoaXRlY3R1cmUuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgYGJzcF9kZXRlcm1pbmVfc25wYCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgYWx3YXlzIGEga2V5IHBvaW50IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBiZWhhdmlvciwgYW5kIHNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGl0IHJlc2lkZXMgaW4gdGhlIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgYmVjYXVzZSB0aGF0IEFNRC1zcGVjaWZpYyBmaWxlIGlzIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBmb3IgaW52ZXN0aWdhdGluZyBDUFUtc3BlY2lmaWMgaWRpb3N5bmNyYWNpZXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjI0LjMxMTI5NDAyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0I2lmZGVmIENPTkZJR19BUkNIX0hBU19DQ19QTEFURk9STVxcbiAzNTk6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0FNRDtcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcXG4gMzYyOlxcdFxcdFxcdC8qXFxuIDM2MzpcXHRcXHRcXHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxcbiAzNjQ6XFx0XFx0XFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXFxuIDM2NTpcXHRcXHRcXHQgKiBmb3Igd2hpY2ggdGhlIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgY3VycmVudGx5IGRlZmluZWQgb3IgZm9yXFxuIDM2NjpcXHRcXHRcXHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcXG4gMzY3OlxcdFxcdFxcdCAqIGluc3RydWN0aW9uLlxcbiAzNjg6XFx0XFx0XFx0ICovXFxuIDM2OTpcXHRcXHRcXHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXFx1MDAyNlxcdTAwMjZcXG4gMzcwOlxcdFxcdFxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxcbiAzNzE6XFx0XFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XFxuIDM3MjpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuIDM3MzpcXHRcXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbiAzNzQ6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4gMzc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDM3NjpcXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbiAzNzc6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzg6XFx0XFx0XFx0fVxcbiAzNzk6XFx0XFx0fVxcbiAzODA6XFx0I2VuZGlmXFxuIDM4MTpcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXFxcXG4gMzg0OlxcdFxcdFg4Nl9NQVRDSF9WRk1fU1RFUFMoVkZNX01BS0UoWDg2X1ZFTkRPUl9BTUQsIGZhbSwgbW9kZWwpLCBcXFxcXFxuIDM4NTpcXHRcXHRcXHRcXHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXFxuIDM4NjpcXHRcXG4gMzg3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCBhbWRfdHNhX21pY3JvY29kZVtdID0ge1xcbiAzODg6XFx0XFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgxLCAweDBhMDAxMWQ3KSxcXG4gMzg5OlxcdFxcdFpFTl9NT0RFTF9TVEVQX1VDT0RFKDB4MTksIDB4MDEsIDB4MiwgMHgwYTAwMTIzYiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjI0LjMxMTM5MzA1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MDk2MzYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFJNUE9QVCBDYXBhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGxpbmVzIDM2OS0zNzAgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBjaGVjayBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIC4uLilgISBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBmb3IgcnVubmluZyB1bmRlciBhIGh5cGVydmlzb3IgbGlrZSBRRU1VIG9yIEdDRS4gQmVjYXVzZSBpZiBhIGh5cGVydmlzb3IgaXMgcHJlc2VudCwgYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGB0cnVlYCwgYW5kICp0aGF0IG1lYW5zKiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHdpbGwgKm5ldmVyKiBiZSBzZXQuIFRoYXQncyBhIGh1Z2UgcHJvYmxlbS5cblxuVGhpcyB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYXR0cmlidXRlLCBhbmQgYnkgZXh0ZW5zaW9uIFNFVi1TTlAgc3VwcG9ydCwgaXMgZnVuZGFtZW50YWxseSB0aWVkIHRvIGJhcmUtbWV0YWwgQU1EIFplbjMrIC8gWmVuNSsgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGVuYWJsZWQgaW4gdGhlIEJJT1MvaGFyZHdhcmUuIEFuZCBSTVBPUFQgc2VlbXMgdG8gYmUgYSBuZXcgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIGZvciBaZW42IG9yIGZ1dHVyZSBDUFVzLlxuXG5JIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gd2hhdCBgcm1wb3B0KClgIGlzIGFjdHVhbGx5ICpkb2luZyouIE9rYXksIGl0J3MgdXNpbmcgYW4gaW5saW5lIGFzc2VtYmx5IGluc3RydWN0aW9uOiBgLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIGNoZWNraW5nIGBybXBvcHRfY2FwYWJsZSgpYC4gSXQgcmVxdWlyZXMgKmJvdGgqIGBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVClgICphbmQqIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYC4gSWYgYCFybXBvcHRfY2FwYWJsZSgpYCwgdGhlbiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBhbmQgYHNucF9zZXR1cF9ybXBvcHQoKWAgaW1tZWRpYXRlbHkgcmV0dXJuLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gcHV0IHRoZSBwaWVjZXMgdG9nZXRoZXIuXG5cbkFuZCBJIHNlZSB0aGF0IGBzbnBfcm1wdGFibGVfaW5pdCgpYCAqaW1tZWRpYXRlbHkqIHJldHVybnMgLUVOT1NZUyBpZiBgIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBUaGUgY29kZSB3b24ndCBldmVuIGNvbnRpbnVlLiBTaW1pbGFybHksIGBzbnBfcHJlcGFyZSgpYCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgQ0NQIGRyaXZlciB3aGVuIGEgU05QIGhvc3QgaXMgaW5pdGlhbGl6aW5nIHZpYSBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLCBhbmQgdGhhdCBmdW5jdGlvbiAqYWxzbyogY2hlY2tzIGBpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpYCwgcmV0dXJuaW5nIC1FTk9ERVYgaWYgZmFsc2UuIEFuZCBgc25wX3NodXRkb3duKClgIGlzIHNpbWlsYXJseSBvbmx5IGNhbGxlZCB2aWEgQ0NQIGR1cmluZyBhbiBTTlAgaG9zdCBzaHV0ZG93bi5cblxuVGhpcyBpcyBhbGwgbWFraW5nIGl0IGNsZWFyIC0gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGJzcF9kZXRlcm1pbmVfc25wKClgLiAqQW5kKiB0aGF0IG9ubHkgaGFwcGVucyBhdCBib290IHRpbWUgb24gQU1EIEJTUCB3aGVuIGBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1NFVl9TTlApYCAqaXMqIHRydWUgYW5kICphbHNvKiBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBHb3QgaXQuIE5vdyBJIHNob3VsZCBjaGVjayB3aGVyZSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzoyOS45MjEwMzE5NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc0MjMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX3Byb2JlX3JtcHRhYmxlX2luZm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjQ1PXN0YXRpYyBpbmxpbmUgdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZykgeyByZXR1cm4gMDsgfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTA6Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NTEtaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY3PXZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2OC0jZWxzZVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzAtc3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTY9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzItXFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzczOlxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzQtXFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgwNT1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODQ4LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjg0OTpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODUwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzEuNTI4NDYzMjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDkxNTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHNldl92bV9kZXN0cm95KClgIGFuZCBTRVYtU05QIEd1ZXN0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBzZXZfdm1fZGVzdHJveSgpYCB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBLVk0gVk0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBTRVYtU05QIChTZWN1cmUgTmVzdGVkIFBhZ2luZykgYXNwZWN0cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiB0aGUgVk0gaXMgYW4gU0VWLVNOUCBndWVzdCAoY2hlY2tlZCBieSBgc2V2X3NucF9ndWVzdChrdm0pYCksIHRoZSBmdW5jdGlvbiB0YWtlcyBzcGVjaWZpYyBhY3Rpb25zLiBJdCBhcHBlYXJzIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgYHNldl9lc19pbml0X3ZtKClgIGNvdWxkIGZhaWwgYWZ0ZXIgYHNucF9pbml0X3ZtKClgLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBnZXRzIGRlY29tbWlzc2lvbmVkIHZpYSBhIGNhbGwgdG8gYHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pYC4gIElmIHRoYXQgY2FsbCBpcyBzdWNjZXNzZnVsLCB3ZSBiYWlsIG91dC4gT3RoZXJ3aXNlLCBpdCB0cmlnZ2VycyBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYC5cblxuSWYgdGhlIFZNICppc24ndCogYW4gU0VWLVNOUCBndWVzdCwgdGhlIGBzZXZfdW5iaW5kX2FzaWQoKWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuXG5cblRoaXMgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBDYW4gYSBndWVzdCBWTSAqZW11bGF0ZSogYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIHJ1biBhcyBpZiBpdCAqd2VyZSogYW4gU0VWLVNOUCBndWVzdCB1bmRlciBRRU1VICp3aXRob3V0KiBhY3R1YWwgcGh5c2ljYWwgQU1EIFNFVi1TTlAgaGFyZHdhcmU/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBzZXZfc25wX2d1ZXN0YCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBpdCdzIGhhbmRsZWQgaW4gYSBwdXJlbHkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmVyc3VzIG9uZSB3aXRoIHRydWUgaGFyZHdhcmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzQuNzM3NjE1Mzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNjI5MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9zbnBfZ3Vlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xNDA9c3RhdGljIGJvb2wgc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ2OnN0YXRpYyBib29sIHNldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ3LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0OC1cXHRrdm1fbG9ja2RlcF9hc3NlcnRfc2V2X2xvY2tfaGVsZChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ5OlxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTUwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjA5PXN0YXRpYyBib29sIHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTMtXFx0cmV0dXJuIChzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNDpcXHQgICAgICAgIVdBUk5fT05fT05DRSghc2V2X3NucF9ndWVzdChrdm0pKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIxMzY9aW50IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU3LVxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBzb3VyY2Vfa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgfHxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNTg6XFx0ICAgIHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjc3PXN0YXRpYyBpbnQgc25wX2xhdW5jaF9zdGFydChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI4My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyODQ6XFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjg1LVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU2Mj1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU3MDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NzEtXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mzg9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2Mzkte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MDpcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ4PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjcyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY3MzpcXHRpZiAoc2V2X3NucF9ndWVzdChrdm0pIFxcdTAwMjZcXHUwMDI2IHNldl9jbWQuaWQgXFx1MDAzYyBLVk1fU0VWX1NOUF9MQVVOQ0hfU1RBUlQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjc0LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4NTk9aW50IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODgzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjg4NDpcXHRpZiAoc2V2X2d1ZXN0KGt2bSkgfHwgIXNldl9ndWVzdChzb3VyY2Vfa3ZtKSB8fCBzZXZfc25wX2d1ZXN0KHNvdXJjZV9rdm0pIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODg1LVxcdCAgICBpc19taXJyb3JpbmdfZW5jX2NvbnRleHQoc291cmNlX2t2bSkgfHwga3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5Nzc9dm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDI2OlxcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjctXFx0XFx0c25wX2d1ZXN0X3JlcV9jbGVhbnVwKGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMzMzU9dm9pZCBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzQ4OlxcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzU0Nz12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzU2MTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU2Mi1cXHRcXHR1NjQgcGZuID0gX19wYShzdm0tXFx1MDAzZXNldl9lcy52bXNhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjIwPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIyODpcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Mjg5PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyOTY6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1MT1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzAtXFx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDMxOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzItXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0MjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1Ni1cXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDU3OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTgtXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTA4PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQxLVxcdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTQyOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQzLVxcdCAgICAhZ2hjYl9ncGFfaXNfcmVnaXN0ZXJlZChzdm0sIGNvbnRyb2wtXFx1MDAzZWdoY2JfZ3BhKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU1ODpcXHRpZiAoaXNfc25wX29ubHlfdm1nZXhpdChjb250cm9sLVxcdTAwM2VleGl0X2NvZGUpIFxcdTAwMjZcXHUwMDI2ICFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU5LVxcdFxcdHZjcHVfdW5pbXBsKHZjcHUsIFxcXCJ2bWdleGl0OiBleGl0IGNvZGUgJSNsbHggaXMgU05QLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NDQ9dm9pZCBzZXZfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGluaXRfZXZlbnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODU3OlxcdGlmIChpbml0X2V2ZW50IFxcdTAwMjZcXHUwMDI2IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxcdFxcdHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OTE9dm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVhICpob3N0c2EpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzEtXFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQlVHX1NXQVApIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTMyOlxcdCAgICAgaXNfc2V2X3NucF9ndWVzdChcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzMtXFx0XFx0aG9zdHNhLVxcdTAwM2VkcjBfYWRkcl9tYXNrID0gYW1kX2dldF9kcl9hZGRyX21hc2soMCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxNTU9aW50IHNldl9nbWVtX21ha2VfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwga3ZtX3Bmbl90IG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTYyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTE2MzpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxNjQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNjg9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTI4MTpcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMwMz1pbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzMDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzA4OlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTMwOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMxOD1zdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzM4LVxcdC8qIENoZWNrIGlmIHRoZSBTRVYgcG9saWN5IGFsbG93cyBkZWJ1Z2dpbmcgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzMzk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDAtXFx0XFx0aWYgKCEoc2V2LVxcdTAwM2Vwb2xpY3kgXFx1MDAyNiBTTlBfUE9MSUNZX01BU0tfREVCVUcpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQ2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0NzpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0OC1cXHRcXHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjE6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIyLVxcdFxcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDE6XFx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcXFwiU0VWLVNOUFxcXCIgOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cXHRcXHQgIGlzX3Nldl9lc19ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtRVNcXFwiIDpcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDMxOlxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0NDM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzYuMzMxMjUwOTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDQxNzI0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIGBLVk1fWDg2X1NOUF9WTWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZ2VuZXNpcyBhbmQgbWVjaGFuaWNzIG9mIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYEtWTV9YODZfU05QX1ZNYCBzdHJ1Y3R1cmUuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBpcyByb2J1c3QsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzIGFsaWduIHBlcmZlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjcmVhdGlvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gLiBXaGVyZSBpcyBpdCBiZWluZyBpbnN0YW50aWF0ZWQ/IFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgcGFyYW1ldGVycyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgU0VWLVNOUCBndWVzdCB2aXJ0dWFsaXphdGlvbj8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG93YXJkIGJ1aWxkaW5nIGEgdHJ1ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDIxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NDAuMTM1NDI1NjE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRyZXR1cm4gc2V2LVxcdTAwM2Vlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT05fT05DRSghc2V2LVxcdTAwM2VhY3RpdmUpO1xcbiA0MTA6XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdHJldHVybiAoc2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuIDQxNzpcXHRcXHQgICAgICAgIVdBUk5fT05fT05DRSghX19fX3Nldl9lc19ndWVzdChrdm0pKTtcXG4gNDE4OlxcdH1cXG4gNDE5OlxcdFxcbiA0MjA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MjM6XFx0fVxcbiA0MjQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyNTpcXHR7XFxuIDQyNjpcXHRcXHRyZXR1cm4gX19fX3Nldl9lc19ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0Mjc6XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQzMDpcXHR7XFxuIDQzMTpcXHRcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDMyOlxcdH1cXG4gNDMzOlxcdCNlbHNlXFxuIDQzNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0Mzk6XFx0e1xcbiA0NDA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQ0NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjQwLjEzNTUyNDk0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODcwMzc1NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSdzIEFNRCBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSBWTSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IEtWTSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IGl0IHNldHMgdGhpbmdzIHVwIGZvciBhbiBBTUQgU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNOUCkgdmlydHVhbCBtYWNoaW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcGF0aCBmb3IgdGhpcywgYXMgaXQncyBmb3VuZGF0aW9uYWwgdG8gdGhlIHNlY3VyaXR5IHBvc3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIEFNRCBTRVYtU05QIGFyZSBlbmFibGVkLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgaW52b2x2ZXMgcGFyc2luZyBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhbmQgdGhlbiBjb25maWd1cmluZyB0aGUgYXBwcm9wcmlhdGUgYml0cyBhbmQgcGllY2VzIHdpdGhpbiB0aGUgVk1TQSBzdHJ1Y3R1cmVzLiBXaGVyZSBkb2VzIHRoZSBjb2RlIGFjdHVhbGx5IGRldGVybWluZSB3aGF0IFNOUCBmZWF0dXJlcyBhcmUgYWR2ZXJ0aXNlZCwgYW5kIGhvdyBkb2VzIGl0IGVuc3VyZSB0aGV5J3JlIGNvcnJlY3RseSBzZXQgZHVyaW5nIHRoZSBWTSBsYXVuY2ggc2VxdWVuY2U/IEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIGNvbmZpcm0gdGhpcy4gSSBiZXQgaXQgaXMgYSBmdW5jdGlvbiBvZiB0aGUgSHlwZXJ2aXNvci4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoZSBjb2RlIHdoZXJlIHRoZSBgc2V2YCBzdHJ1Y3QgaXMgZ2V0dGluZyBidWlsdC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQU1EIFNFVi1TTlAgc3BlY2lmaWMgaGFyZHdhcmUgYml0cy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgYnV0IHRoZSBjb2RlIHRlbGxzIHRoZSB0cnV0aC4gSSdsbCBsb29rIGZvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBnZXR0aW5nIGFuZCBzZXR0aW5nIHRob3NlIGZlYXR1cmVzLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBleGVjdXRpb24sIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0My4wMDU5MDMzNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzg5NTE5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9MzA2PXN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC0zMDctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcXHRcXHRcXHRcXHRCSVQoMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC0zMDktI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT05cXHRcXHRCSVQoMylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM2LVxcdGlmIChzbnBfYWN0aXZlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM3OlxcdFxcdHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDEyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQxNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQxNjpcXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDE3LVxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0NC41NDQ4NjAwMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMDU2NDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19zZXZfZ3Vlc3RfaW5pdGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0J3MgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBndWVzdCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgU0VWIGZyYW1ld29yaywgZXNwZWNpYWxseSBmb3IgQU1EIHByb2Nlc3NvcnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5J3JlIHNldHRpbmcgdGhpbmdzIHVwIGluIHRoZSBoeXBlcnZpc29yIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBTRVYtRVMgb3IgU0VWLVNOUCBmdW5jdGlvbmFsaXR5LiBJIHN1c3BlY3QgdGhlcmUnbGwgYmUgc29tZSBjcnVjaWFsIGxvZ2ljIHJlZ2FyZGluZyBwYWdlIG1hcHBpbmcsIGtleSBkZXJpdmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbCBndWVzdCByZWdpc3RlciBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGF0IGFmZmVjdCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIEtWTSdzIGV4aXN0aW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxOTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0Ni44NTU0MjYyNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdFxcdF9fZnJlZV9wYWdlKHZpcnRfdG9fcGFnZShzZXYtXFx1MDAzZWd1ZXN0X3JlcV9idWYpKTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0XFx0c2V2LVxcdTAwM2VndWVzdF9yZXFfYnVmID0gTlVMTDtcXG4gNDg4OlxcdFxcdHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYgPSBOVUxMO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuIDQ5MjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcXG4gNDkzOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuIDQ5NDpcXHR7XFxuIDQ5NTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDk2OlxcdFxcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcXG4gNDk3OlxcdFxcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcXG4gNDk4OlxcdFxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuIDQ5OTpcXHRcXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XFxuIDUwMDpcXHRcXHRpbnQgcmV0O1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmIChkYXRhLVxcdTAwM2VmbGFncylcXG4gNTA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoIXNucF9hY3RpdmUpXFxuIDUwOTpcXHRcXHRcXHR2YWxpZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcXG4gNTEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlZ2hjYl92ZXJzaW9uIFxcdTAwM2UgR0hDQl9WRVJTSU9OX01BWCB8fCAoIWVzX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24pKVxcbiA1MTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdC8qXFxuIDUxODpcXHRcXHQgKiBLVk0gc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgbWFuZGF0b3J5IGZlYXR1cmVzIGRlZmluZWQgYnkgdmVyc2lvblxcbiA1MTk6XFx0XFx0ICogMiBvZiB0aGUgR0hDQiBwcm90b2NvbCwgc28gZGVmYXVsdCB0byB0aGF0IGZvciBTRVYtRVMgZ3Vlc3RzIGNyZWF0ZWRcXG4gNTIwOlxcdFxcdCAqIHZpYSBLVk1fU0VWX0lOSVQyIChLVk1fU0VWX0lOSVQgZm9yY2VzIHZlcnNpb24gMSkuXFxuIDUyMTpcXHRcXHQgKi9cXG4gNTIyOlxcdFxcdGlmIChlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIWRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbilcXG4gNTIzOlxcdFxcdFxcdGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiA9IDI7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmIChzbnBfYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiBcXHUwMDNjIDIpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0aWYgKHVubGlrZWx5KHNldi1cXHUwMDNlYWN0aXZlKSlcXG4gNTI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRzZXYtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuIDUzMjpcXHRcXHRzZXYtXFx1MDAzZWVzX2FjdGl2ZSA9IGVzX2FjdGl2ZTtcXG4gNTMzOlxcdFxcdHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyA9IGRhdGEtXFx1MDAzZXZtc2FfZmVhdHVyZXM7XFxuIDUzNDpcXHRcXHRzZXYtXFx1MDAzZWdoY2JfdmVyc2lvbiA9IGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbjtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0aWYgKHNucF9hY3RpdmUpXFxuIDUzNzpcXHRcXHRcXHRzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xcbiA1NDA6XFx0XFx0aWYgKHJldClcXG4gNTQxOlxcdFxcdFxcdGdvdG8gZV9ub19hc2lkO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRpbml0X2FyZ3MucHJvYmUgPSBmYWxzZTtcXG4gNTQ0OlxcdFxcdHJldCA9IHNldl9wbGF0Zm9ybV9pbml0KFxcdTAwMjZpbml0X2FyZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0Ni44NTU3MjMwODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM5Mjc4ODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEZpcnN0LCBgc2V2X3BsYXRmb3JtX2luaXQoXHUwMDI2aW5pdF9hcmdzKWAgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgdGhlIENDUCBkcml2ZXIuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGF0aC4gVGhlbiwgdGhlcmUncyBgc2V2X3NucF9zdXBwb3J0ZWRgIHdpdGhpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNoZWNrIGlzOlxuXG5gYGBjXG5zZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmBgYFxuXG5UaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHZlcmlmeWluZyBib3RoIHRoYXQgU0VWLVNOUCBpcyBlbmFibGVkIGdlbmVyYWxseSwgYW5kIHRoYXQgdGhlIGhvc3QgcGxhdGZvcm0gYWN0dWFsbHkgc3VwcG9ydHMgaXQsIHVzaW5nIGBjY19wbGF0Zm9ybV9oYXMoKWAuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudC4gSG93IGlzIGBzZXZfdm1faW5pdGAgb3IsIG1vcmUgZ2VuZXJhbGx5LCBga3ZtX2FyY2hfaW5pdF92bWAgc2V0dGluZyB0aGUgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBWTSB0eXBlIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIFNOUCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcgaXMgYmVpbmcgc2V0IGFuZCB1c2VkIHdpdGhpbiBLVk0uIFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHRoZSByZXN0IG9mIHRoZSBTTlAgZnVuY3Rpb25hbGl0eSBnZXRzIGhvb2tlZCB1cC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGVyZSBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGFjdHVhbGx5IHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ1NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjUyLjI0ODUxNDEyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMTQ4NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTUxMj1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTctICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXFx0M1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTE4OiAgI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdDRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUxOS0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHQ1XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjU9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3NDpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjc1LVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTE9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTctXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxMi1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NTU9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTYxOlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYyLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg4PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMzLVxcdGlmIChzZXZfc25wX3N1cHBvcnRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzUtXFx0dm1fdHlwZXMgXFx1MDAyNj0gc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0OTpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUwLVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzE0Nz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMTYxLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzE2MjpcXHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMxNjMtXFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3OD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgwLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ4MTpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgyLSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTgzLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg0OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTE4PWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NjpcXHRoYXZlX3NucCA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ3LVxcdFRFU1RfQVNTRVJUKCFoYXZlX3NucCB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU1LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTYxLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MjpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzE2PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taWdyYXRlX3JlamVjdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzIxOlxcdHNyY192bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NOUF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyMi1cXHRzbnBfdm1faW5pdChzcmNfdm0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzI2OlxcdGRzdF92bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NOUF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyNy1cXHRfX3ZtX3ZjcHVfYWRkKGRzdF92bSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzM4PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taXJyb3JfcmVqZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzQyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYzozNDM6XFx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzQ0LVxcdHNucF92bV9pbml0KHNyY192bSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MjpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MzpcXHRcXHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo1NC4yODAwMDkyNzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyMDAyODkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBTRVYtU05QIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gd29uZGVyaW5nIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYyByZWdhcmRpbmcgS1ZNIGFuZCBTRVYtU05QOiBDYW4gSSBzdWNjZXNzZnVsbHkgdXNlIGBLVk1fQ1JFQVRFX1ZNYCB3aXRoIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJ3QqIHN1cHBvcnQgU0VWLVNOUD8gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZ3JhY2VmdWwgZmFsbGJhY2ssIG9yIHBlcmhhcHMgYW4gZXJyb3IgaXMgZXhwbGljaXRseSB0aHJvd24uXG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYGt2bV9hcmNoX2luaXRfdm1gIGZ1bmN0aW9uLCBwcm9iYWJseSBmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIE9yIG1heWJlIHRoZXJlJ3Mgc29tZSBzZXR1cCByZWxhdGVkIHRvIFNFViBoYXJkd2FyZSwgc29tZXRoaW5nIGNhbGxlZCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgdGhhdCBoYW5kbGVzIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdGhlIHJlcXVpcmVkIGNoZWNrcyBmb3IgU0VWLVNOUCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBnbyBmcm9tIHRoZXJlLCBhbmQgc2VlIHdoZXJlIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGZpdHMgaW4gaWYgbmVlZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGRldGVjdCBvciBncmFjZWZ1bGx5IGhhbmRsZSB1bnN1cHBvcnRlZCBmZWF0dXJlcy4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NTYuODAwMDQxNjc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY1PXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XFx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3NS1cXHRcXHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk3LVxcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODpcXHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5LVxcdHU2NCB2YWxpZF92bXNhX2ZlYXR1cmVzID0gZXNfYWN0aXZlID8gc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIDogMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTItXFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTM6XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYwLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk2MTpcXHRjYXNlIEtWTV9YODZfU05QX1ZNOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2Mi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMy1cXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjM0OlxcdFxcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM1LVxcdHZtX3R5cGVzIFxcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cXHRcXHRwcl9pbmZvKFxcXCJTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MC1cXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjU2Ljg1NTk5NTcyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI4ODYzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uIG9uIHg4NioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBpbml0aWFsaXplcyBvbiB4ODYuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBJIHJlY2FsbCwgaXMgcHJvYmFibHkgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIExldCdzIHNlZS4uLiAqa3ZtX2FyY2hfaW5pdF92bSogaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQgZmlsZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS4gVGhpcyBpcyB3aGVyZSB0aGUgbG93LWxldmVsLCB4ODYtc3BlY2lmaWMgcGFydHMgb2YgdmlydHVhbCBtYWNoaW5lIHNldHVwIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGVudHJ5IHBvaW50cyBpbnZvbHZlZCBpbiB0aGUgVk0ncyBhcmNoaXRlY3R1cmFsIGluaXRpYWxpemF0aW9uLCBzbyBkaWdnaW5nIGludG8gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo1OC40ODQ4NjE4MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjIyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XFxuYXJjaC94ODYva3ZtL21tdS5oOjM5NDpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL21tdS5oLTM5NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTg6XFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1OS1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXFx0ICAgICEoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XFx0ICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVxcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKGNyMl9vcl9ncGEpKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzYwOD12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxNy1cXHR9O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzYxODpcXHRib29sIHphcF9hbGwgPSBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc2MTktXFx0XFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzojaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY1OnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjc0OlxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXFx0XFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MT1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTItXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTM6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTc6XFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1Mzk6XFx0cmV0ID0gc2V2X2FzaWRfbmV3KHNldiwgdm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NDAtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4Ni1cXHR9O1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTg3OlxcdHVuc2lnbmVkIGxvbmcgdm1fdHlwZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU4OTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTkyOlxcdHZtX3R5cGUgPSAoYXJncC1cXHUwMDNlaWQgPT0gS1ZNX1NFVl9JTklUID8gS1ZNX1g4Nl9TRVZfVk0gOiBLVk1fWDg2X1NFVl9FU19WTSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU5Ny1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5ODpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NFVl9FU19WTSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU5OS1cXHRcXHRkYXRhLmdoY2JfdmVyc2lvbiA9IEdIQ0JfVkVSU0lPTl9NSU47XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwgdm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMjpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxOTpcXHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFxcdTAwMjZkYXRhLCBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz05Njg9c3RhdGljIGludCBzZXZfZXNfc3luY192bXNhKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDI3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTAyODpcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDI5LVxcdFxcdHhzYXZlID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXFx1MDAzZXJlZ3MueHNhdmU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIxMzY9aW50IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU2LVxcdC8qIERvIG5vdCBhbGxvdyBTTlAgVk0gbWlncmF0aW9uIHVudGlsIGFkZGl0aW9uYWwgc3RhdGUgdHJhbnNmZXIgaXMgaW1wbGVtZW50ZWQgICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMTU3OlxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBzb3VyY2Vfa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgfHxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNTgtXFx0ICAgIHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk1Ni17XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTU3OlxcdHN3aXRjaCAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzEtXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NzI6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJVbnN1cHBvcnRlZCBWTSB0eXBlICV1XFxcIiwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk3My1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA5NC1cXHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTU6XFx0dTMyIHZtX3R5cGVzID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjktXFx0aWYgKHNldl9zdXBwb3J0ZWQgXFx1MDAyNlxcdTAwMjYgbWluX3Nldl9hc2lkIFxcdTAwM2M9IG1heF9zZXZfYXNpZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzA6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzEtXFx0aWYgKHNldl9lc19zdXBwb3J0ZWQgXFx1MDAyNlxcdTAwMjYgbWluX3Nldl9lc19hc2lkIFxcdTAwM2M9IG1heF9zZXZfZXNfYXNpZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzI6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX0VTX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNDpcXHRcXHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNTpcXHR2bV90eXBlcyBcXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNzpcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gdm1fdHlwZXM7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQwLVxcdFxcdHByX2luZm8oXFxcIlNFViAlcyAoQVNJRHMgJXUgLSAldSlcXFxcblxcXCIsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQxOlxcdFxcdFxcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0Mi1cXHRcXHRcXHRtaW5fc2V2X2FzaWQsIG1heF9zZXZfYXNpZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDQtXFx0XFx0cHJfaW5mbyhcXFwiU0VWLUVTICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDU6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9lc19zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU0VWX0VTX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVxcdFxcdFxcdG1pbl9zZXZfZXNfYXNpZCwgbWF4X3Nldl9lc19hc2lkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cXHRcXHRwcl9pbmZvKFxcXCJTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MC1cXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQzMS1cXHRzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUwMSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDMyOlxcdGNoYXIgKnZtX3R5cGU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQ0MTpcXHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtU05QXFxcIiA6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVxcdFxcdCAgaXNfc2V2X2VzX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1FU1xcXCIgOlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQ1LVxcdHByX2VycihcXFwiJXMgdkNQVSV1IFZNQ0IgJXAsIGxhc3QgYXR0ZW1wdGVkIFZNUlVOIG9uIENQVSAlZFxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDY6XFx0ICAgICAgIHZtX3R5cGUsIHZjcHUtXFx1MDAzZXZjcHVfaWQsIHN2bS1cXHUwMDNlY3VycmVudF92bWNiLVxcdTAwM2VwdHIsIHZjcHUtXFx1MDAzZWFyY2gubGFzdF92bWVudHJ5X2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQ3LVxcdHByX2VycihcXFwiVk1DQiBDb250cm9sIEFyZWE6XFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxODojaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYyOlxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3OC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc5OlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwODAtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTIxNzE9c3RhdGljIGludCBrdm1faW9jdGxfZ2V0X3N1cHBvcnRlZF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5MzpzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk0LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5NTpcXHRyZXR1cm4gdHlwZSBcXHUwMDNjIDMyIFxcdTAwMjZcXHUwMDI2IChrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0yMjAzPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNC1cXHRjYXNlIEtWTV9DQVBfVk1fVFlQRVM6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0MDU6XFx0XFx0ciA9IGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcztcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzA2MzpcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgPSBCSVQoS1ZNX1g4Nl9ERUZBVUxUX1ZNKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2NC1cXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfbWNlX2NhcCA9IE1DR19DVExfUCB8IE1DR19TRVJfUDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MTI0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fU1dfUFJPVEVDVEVEX1ZNKSBcXHUwMDI2XFx1MDAyNiB0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcxMjU6XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODQ3LVxcbmFyY2gveDg2L2t2bS94ODYuYzo5ODQ4OlxcdGlmICgha3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkKHR5cGUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODQ5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODUwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo5ODUxOlxcdGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID0gdHlwZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1Mi1cXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NTguNTUwNDkwMzU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMzgyNTcyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGluIFN0YW5kYXJkIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNvZGUgdGhhdCdzIGZ1bmRhbWVudGFsbHkgKnVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJ3JlIHR5cGljYWxseSB3b3JraW5nIHdpdGgsIGxpa2UgUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLiBIZXJlJ3MgdGhlIHJlYXNvbmluZzpcblxuRmlyc3QsIHRoZSBjb2RlIHRvdWNoZXMgYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gIOKAkyB3aGljaCBpcyBrZXkgaGVyZSDigJMgaXMgY29udGluZ2VudCBvbiBgc2V2X3NucF9zdXBwb3J0ZWRgIGJlaW5nIHRydWUuIEFuZCBgc2V2X3NucF9zdXBwb3J0ZWRgIGlzIGRpcmVjdGx5IGxpbmtlZCB0byBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFRoaXMsIGluIHR1cm4sICpyZXF1aXJlcyogYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIHN1cHBvcnQsIGFuZCBleHBsaWNpdGx5ICpleGNsdWRlcyogdGhlIGh5cGVydmlzb3IgY2FzZSAoYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCkuXG5cblRoZW4gdGhlcmUncyB0aGUgYFJNUE9QVGAgc3R1ZmYg4oCTIGFsbCB0aG9zZSBjaGFuZ2VzIGFyb3VuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgYHNucF9zZXR1cF9ybXBvcHRgLCBldGMuIFRoZXNlIGFyZSAqYWxzbyogdGlnaHRseSBjb3VwbGVkIHRvIGJhcmUtbWV0YWwgaGFyZHdhcmUgd2l0aCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFuZCBzcGVjaWZpYyBDUFUgZmVhdHVyZXMgbGlrZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgU2VnbWVudGVkIFJNUCBzdXBwb3J0ICh3aGljaCBhcHBlYXJzIHRvIGJlIFplbiA1L1plbiA2IHNwZWNpZmljKS4gRXhlY3V0aW5nIHRoZSBiaW51dGlscyBSTVBPUFQgb3Bjb2RlIGFuZCBoYXZpbmcgcGh5c2ljYWwgQU1EIElPTU1VIC8gQ0NQIGNvLXByb2Nlc3NvciBoYXJkd2FyZSBpcyBhbm90aGVyIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdDpcblxuMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYDogSnVzdCBkZWZpbml0aW9ucyBhbmQgaGVhZGVycy4gTm8gZXhlY3V0aW9uIHBhdGguXG4yLiAgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgOiBDUFVJRCBkZXRlY3Rpb24gY29kZTsgdGhhdCdzIGZpbmUsIGJ1dCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBDUFUgdG8gKmhhdmUqIFJNUE9QVCwgd2hpY2ggaW4gYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBpdCB3b24ndC5cbjMuICBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6IGBzZXZfdm1fZGVzdHJveWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gICpvbmx5KiBpZiBpdCdzIGFuIFNOUCBndWVzdCBWTS4gQW4gU05QIGd1ZXN0IGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC5cbjQuICBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgOiBGdW5jdGlvbnMgbGlrZSBgc25wX3ByZXBhcmVgLCBgc25wX3NodXRkb3duYCwgYW5kIG90aGVycyBhcmUgZ3VhcmRlZCBieSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgKm9yKiBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgb3IgdGhleSBhcmUgY2FsbGVkIGZyb20gQU1EIElPTU1VIGluaXQsIHdoaWNoIGFsc28gY2hlY2tzIGAhY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBhbHNvIG5lZWRzIGEgcGh5c2ljYWwgQU1EIFplbjMrIENQVS5cbjUuICBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2A6IGBfX3Nldl9zbnBfaW5pdF9sb2NrZWRgICppbW1lZGlhdGVseSogY2hlY2tzIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIGJhaWxzIG91dCBpZiBpdCdzIG5vdCBwcmVzZW50LlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0ICpub25lKiBvZiB0aGlzIGNvZGUgY2FuIGV4ZWN1dGUgYmVjYXVzZSB0aGUgY29yZSBwcmVyZXF1aXNpdGVzIGFyZSBhYnNlbnQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gUUVNVSBhbmQgR0NFICpleHBsaWNpdGx5KiBleHBvc2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCB3aGljaCAqZGlzYWJsZXMqIHRoZSBuZWNlc3NhcnkgQU1EIFNOUCBob3N0IHBsYXRmb3JtIHN1cHBvcnQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgKipzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqKiBoYXJkd2FyZS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblNvLCBzZXR0aW5nIHRoZSBwYXJhbWV0ZXJzIGZvciBvdXIgdG9vbDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIGBmYWxzZWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYG51bGxgIG9yIGBbXWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgbnVsbGAgb3IgYFtdYFxuKiAgICoqUmVhc29uaW5nOioqIFwiTW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gUk1QT1BUIGFuZCBTRVYtU05QIGhvc3QgZnVuY3Rpb25hbGl0eSByZXF1aXJlIGJhcmUtbWV0YWwgQU1EIHBoeXNpY2FsIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQuICBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgd2hlbiBydW5uaW5nIHVuZGVyIGEgaHlwZXJ2aXNvciAoYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgKS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQyOCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU0OjA3LjY4ODc1MzQ0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCAoUk1QIG9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgU0VWLVNOUCBob3N0IGluaXRpYWxpemF0aW9uL3RlYXJkb3duIHBhdGhzLiBBbGwgbW9kaWZpZWQgY29kZSBwYXRocyByZXF1aXJlIEFNRCBTRVYtU05QIGhvc3Qgc3VwcG9ydCAoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBDUFUvZmlybXdhcmUgY2FwYWJpbGl0aWVzIChzdWNoIGFzIFg4Nl9GRUFUVVJFX1JNUE9QVCBhbmQgU2VnbWVudGVkIFJNUCkuIEluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgcHJlc2VudCB3aGljaCBwcmV2ZW50cyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBmcm9tIGJlaW5nIGVuYWJsZWQgKGluIGJzcF9kZXRlcm1pbmVfc25wKCkpLCBtYWtpbmcgYWxsIG1vZGlmaWVkIGxvZ2ljIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIGJhcmUtbWV0YWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBhbmQgUk1QT1BULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTQ6MDcuNjg4ODE2OTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcd5n2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 22:32:52 +0000 UTC FinishedAt: 2026-09-10 22:54:08 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjg0N2JhZjQ5YjhmMmI1YzA1NDY3MTBmZDZmNWUyN2ZmNDQxYmMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6NTI6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyAmIzQzOzc2LDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XHRcdFx0KCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXHQoIDMqMzImIzQzOyA4KSAvKiBcJiMzNDtjb25zdGFudF90c2NcJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXHQoIDMqMzImIzQzOyA5KSAqIFwmIzM0O3VwXCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXHRcdFx0KCAzKjMyJiM0MzsxMCkgLyogXCYjMzQ7YXJ0XCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggM2E4ZTUxYTBjOWU4OC4uMTYzNWUyZTFjNTc2YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFx0MFxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDllN2EwNzdjNDQ1ZGMuLjMyMzVlMTcxNjQ3ZGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbiYjNDM7XHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcdFx0XHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXHRcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcbiBcdHsgMCwgMCwgMCwgMCwgMCB9XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uZDhlNmI4YTA4Yjc5ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0zMDMyLDYgJiM0MzszMDMyLDggQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLmMxNmY4MjY0MjM5MDMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgJiM0MzsxMjUsMTcgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbiYjNDM7c3RhdGljIHU2NCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9vcF90eXBlIHtcbiYjNDM7XHRSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xuJiM0MztcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXG4gXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpXG4ge1xuLVx0aW50IHJldDtcbiBcdHU2NCB2YWw7XG4gXG4gXHQvKlxuQEAgLTUyNiwxNCAmIzQzOzUzNywxOCBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcbiBcdGNsZWFyX3JtcCgpO1xuIFxuLVx0Y3B1c19yZWFkX2xvY2soKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXG4mIzQzO1x0ICogaG90cGx1ZyBoZXJlIGFuZCByZS1lbmFibGUgaXQgaW4gc25wX3NodXRkb3duKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuIFxuIFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcbi1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiBcdFx0cHJfd2FybihcJiMzNDtTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cJiMzNDssXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXG4gXHRcdFx0Y3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTtcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4gXHR3YmludmRfb25fYWxsX2NwdXMoKTtcbkBAIC01NDgsMTQgJiM0Mzs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbi11bmxvY2s6XG4tXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJtcG9wdF93cSlcbiYjNDM7XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgJiM0Mzs1ODMsMTQ3IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4gXHRpZiAoc3lzY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHJtcG9wdF9kaXNhYmxlKCk7XG4mIzQzO1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFVcbiYjNDM7XHQgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kXG4mIzQzO1x0ICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUk1QT1BUIG9wdGltaXphdGlvbnMgc2tpcCBSTVAgY2hlY2tzIGF0IDFHQiBncmFudWxhcml0eSBpZiB0aGlzIHJhbmdlIG9mXG4mIzQzOyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxuJiM0MzsgKlxuJiM0MzsgKiBAcGEgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzczsgUk1QT1BUIG9wZXJhdGVzIG9uIHRoZSBjb250YWluaW5nIDFHQi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcbiYjNDM7XHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdC8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4JiM0MzsgKi9cbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wmIzM0O1xuJiM0MztcdFx0ICAgICA6OiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wKVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O21lbW9yeVwmIzM0OywgXCYjMzQ7Y2NcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGE7XG4mIzQzO1xuJiM0MztcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpXG4mIzQzO1x0XHRybXBvcHQocGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhcm0gdXAgdGhlIFJNUE9QVCBjYWNoZSBvbiB0aGlzIHBpbm5lZCBwZXItQ1BVIHdvcmtlciB3aXRoIGludGVycnVwdHNcbiYjNDM7XHQgKiBvbiwgc28gdGhlIElSUS1kaXNhYmxlZCBmYW4tb3V0IGJlbG93IG9ubHkgaXNzdWVzIGNhY2hlLWhpdCBSTVBPUFRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuJiM0MztcbiYjNDM7XHRvbl9lYWNoX2NwdV9tYXNrKGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrLCBybXBvcHRfc2Nhbl9yYW5nZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QXG4mIzQzOyAqIGd1ZXN0IGlzIHRvcm4gZG93biwgcGFzc2VkIGFzIHRoZSBkZWxheSB0byBtb2RfZGVsYXllZF93b3JrKCkuICBUaGlzIGNvYWxlc2Nlc1xuJiM0MzsgKiBhIGJ1cnN0IG9mIHRlYXJkb3ducyBpbnRvIGEgc2luZ2xlIHNjYW4gYW5kIGdpdmVzIGVhY2ggZ3Vlc3QmIzM5O3MgcGFnZXMgdGltZSB0b1xuJiM0MzsgKiBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLCBoeXBlcnZpc29yLW93bmVkIHN0YXRlLiAgVGhlIDEwIHNlY29uZCB2YWx1ZVxuJiM0MzsgKiBpcyBhIGhldXJpc3RpYyB0cmFkaW5nIHJlLW9wdGltaXphdGlvbiBsYXRlbmN5IGFnYWluc3Qgc2Nhbm5pbmcgdG9vIGVhZ2VybHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVRcdCgxMCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nIGd1ZXN0cy4gIFRoZSBzY2FuXG4mIzQzOyAqIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkXG4mIzQzOyAqIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0byBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2VcbiYjNDM7ICogZ3Vlc3Qgd2hvc2UgY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcbiYjNDM7ICogdGVhcmRvd24mIzM5O3Mgc2Nhbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb25cbiYjNDM7XHQgKiBzaHV0ZG93biwgc28gYSBsYXRlciByZS1pbml0aWFsaXphdGlvbiBqdXN0IHJlLXF1ZXVlcyB0aGUgb3B0aW1pemF0aW9uXG4mIzQzO1x0ICogcGFzcyByYXRoZXIgdGhhbiByZWRvaW5nIHRoZSBzZXR1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgZGVkaWNhdGVkIHBlci1DUFUgd29ya3F1ZXVlIHNvIHRoZSBwb3RlbnRpYWxseSBsZW5ndGh5IHdhcm0tdXBcbiYjNDM7XHQgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1BFUkNQVSwgMSk7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XG4mIzQzO1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcHJpbWFyeV90aHJlYWRfbWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcbiYjNDM7XG4mIzQzO1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4mIzQzO1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKVxuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7Uk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcJiMzNDtjY3BcJiMzNDspO1xuJiM0MztcbiAvKlxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcbiAgKiBkZXNjcmliZWQgaW4gdGhlIFNOUF9JTklUX0VYIGZpcm13YXJlIGNvbW1hbmQgZGVzY3JpcHRpb24gaW4gdGhlIFNOUFxuQEAgLTU3Nyw2ICYjNDM7NzMxLDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwmIzM0O2NjcFwmIzM0Oyk7XG4gICovXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiAmIzQzOzc0MiwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4gXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXG4gXHRcdHJldHVybiAtRU5PU1lTO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4mIzQzO1x0ICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0XG4mIzQzO1x0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7XG4mIzQzO1x0aWYgKHZhbCBcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXG4mIzQzO1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJiMzOTt0cnVlJiMzOTsgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICYjNDM7ODQ4LDIxIEBAIHN0YXRpYyBib29sIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIHtcbi1cdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxuJiM0MztcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7XG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbi1cdFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXNcbiYjNDM7XHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4mIzQzO1x0ICogc2VnbWVudGVkIFJNUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xuaW5kZXggZjgzM2NiN2U0ZGEzNi4uMjg3YTgzNDU4NTRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbkBAIC0xNjYzLDYgJiM0MzsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTI4NDdiYWY0OWI4ZjJiNWMwNTQ2NzEwZmQ2ZjVlMjdmZjQ0MWJjMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC03Niw3ICYjNDM7NzYsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9LOAkJCSggMyozMiYjNDM7IDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjUJCSggMyozMiYjNDM7IDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjYJCSggMyozMiYjNDM7IDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovCi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVAkJKCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MJKCAzKjMyJiM0MzsgOCkgLyogJiMzNDtjb25zdGFudF90c2MmIzM0OyBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovCiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUAkoIDMqMzImIzQzOyA5KSAqICYjMzQ7dXAmIzM0OyBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUCQkJKCAzKjMyJiM0MzsxMCkgLyogJiMzNDthcnQmIzM0OyBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtNzYxLDYgJiM0Mzs3NjEsOSBAQAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVAkwCiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQJQklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVCkKICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpCSgoKHgpICZhbXA7IEdFTk1BU0tfVUxMKDEzLCA4KSkgJmd0OyZndDsgOCkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRQkJMHhjMDAxMDEzOQomIzQzOyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUCTAKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFCQlCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVCkKIAogI2RlZmluZSBNU1JfU1ZTTV9DQUEJCQkweGMwMDFmMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKaW5kZXggOWU3YTA3N2M0NDVkYy4uMzIzNWUxNzE2NDdkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTY2Miw2ICYjNDM7NjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcykKIAlfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpOwogfQogaW50IHNucF9wcmVwYXJlKHZvaWQpOwomIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7CiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY4MCw2ICYjNDM7NjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge30KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwppbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHsKIAl7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsCQlDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLAkJQ1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLAlDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sCiYjNDM7CXsgWDg2X0ZFQVRVUkVfUk1QT1BULAkJCUNQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsCQlDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sCiAJeyAwLCAwLCAwLCAwLCAwIH0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTMwMzIsNiAmIzQzOzMwMzIsOCBAQCB2b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKIAkJICovCiAJCWlmIChzbnBfZGVjb21taXNzaW9uX2NvbnRleHQoa3ZtKSkKIAkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTsKIAl9IGVsc2UgewogCQlzZXZfdW5iaW5kX2FzaWQoa3ZtLCBzZXYtJmd0O2hhbmRsZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwppbmRleCBjZmYyODVkOGFkOGUzLi5jMTZmODI2NDIzOTAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYwpAQCAtMTksNiAmIzQzOzE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2FtZC1pb21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vc3BlYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC0xMjQsNiAmIzQzOzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDsKIAogc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTsKIAomIzQzO3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X29wX3R5cGUgewomIzQzOwlSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfT1BfUkVQT1JUX1NUQVRVUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpybXBvcHRfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yazsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7CiYjNDM7CiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTsKIApAQCAtNTEzLDcgJiM0Mzs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpCiAKIGludCBzbnBfcHJlcGFyZSh2b2lkKQogewotCWludCByZXQ7CiAJdTY0IHZhbDsKIAogCS8qCkBAIC01MjYsMTQgJiM0Mzs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAKIAljbGVhcl9ybXAoKTsKIAotCWNwdXNfcmVhZF9sb2NrKCk7CiYjNDM7CS8qCiYjNDM7CSAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlCiYjNDM7CSAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwogCiAJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQljcHVfaG90cGx1Z19lbmFibGUoKTsKIAkJcHJfd2FybigmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSAmbHQ7LSZndDsgJSpwYmwgcHJlc2VudCBtYXNrcykuXG4mIzM0OywKIAkJCWNwdW1hc2tfcHJfYXJncyhjcHVfb25saW5lX21hc2spLAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9wcmVzZW50X21hc2spKTsKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJd2JpbnZkX29uX2FsbF9jcHVzKCk7CkBAIC01NDgsMTQgJiM0Mzs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpCiAJLyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovCiAJb25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpOwogCi0JcmV0ID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsICYjMzQ7Y2NwJiMzNDspOwogCi11bmxvY2s6Ci0JY3B1c19yZWFkX3VubG9jaygpOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwogCi0JcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJtcG9wdF93cSkKJiM0MzsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmspOwogfQotRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgJiMzNDtjY3AmIzM0Oyk7CiAKIHZvaWQgc25wX3NodXRkb3duKHZvaWQpCiB7CkBAIC01NjUsMTEgJiM0Mzs1ODMsMTQ3IEBAIHZvaWQgc25wX3NodXRkb3duKHZvaWQpCiAJaWYgKHN5c2NmZyAmYW1wOyBNU1JfQU1ENjRfU1lTQ0ZHX1NOUF9FTikKIAkJcmV0dXJuOwogCiYjNDM7CXJtcG9wdF9kaXNhYmxlKCk7CiYjNDM7CiAJY2xlYXJfcm1wKCk7CiAJb25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAgKFNucEVuIGlzIGNsZWFyKSwgc28gcmUtZW5hYmxlIENQVQomIzQzOwkgKiBob3RwbHVnLiAgQSBsZWdhY3kgU05QIHNodXRkb3duIHJldHVybnMgYWJvdmUgd2l0aCBTbnBFbiBzdGlsbCBzZXQgYW5kCiYjNDM7CSAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLgomIzQzOwkgKi8KJiM0MzsJY3B1X2hvdHBsdWdfZW5hYmxlKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgJiMzNDtjY3AmIzM0Oyk7CiAKJiM0MztzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZgomIzQzOyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LgomIzQzOyAqCiYjNDM7ICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSkKJiM0Mzt7CiYjNDM7CWVudW0gcm1wb3B0X29wX3R5cGUgb3AgPSBSTVBPUFRfT1BfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CiYjNDM7CS8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4JiM0MzsgKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7LmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmYyYjMzQ7CiYjNDM7CQkgICAgIDo6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcCkKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7LCAmIzM0O2NjJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBvbl9lYWNoX2NwdSgpIGNhbGxiYWNrOiBvcHRpbWl6ZSB0aGUgd2hvbGUgUk1QT1BUIHJhbmdlIG9uIHRoaXMgQ1BVLiAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zY2FuX3JhbmdlKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXU2NCBwYTsKJiM0MzsKJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlybXBvcHQocGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXYXJtIHVwIHRoZSBSTVBPUFQgY2FjaGUgb24gdGhpcyBwaW5uZWQgcGVyLUNQVSB3b3JrZXIgd2l0aCBpbnRlcnJ1cHRzCiYjNDM7CSAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuCiYjNDM7CSAqLwomIzQzOwlybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTsKJiM0MzsKJiM0MzsJb25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QCiYjNDM7ICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzCiYjNDM7ICogYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuIGFuZCBnaXZlcyBlYWNoIGd1ZXN0JiMzOTtzIHBhZ2VzIHRpbWUgdG8KJiM0MzsgKiBiZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUgc2hhcmVkLCBoeXBlcnZpc29yLW93bmVkIHN0YXRlLiAgVGhlIDEwIHNlY29uZCB2YWx1ZQomIzQzOyAqIGlzIGEgaGV1cmlzdGljIHRyYWRpbmcgcmUtb3B0aW1pemF0aW9uIGxhdGVuY3kgYWdhaW5zdCBzY2FubmluZyB0b28gZWFnZXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJKDEwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW4KJiM0MzsgKiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlciBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZAomIzQzOyAqIHRoaXMgZ3Vlc3QmIzM5O3MgcGFnZXMgYmFjayB0byBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UKJiM0MzsgKiBndWVzdCB3aG9zZSBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlcgomIzQzOyAqIHRlYXJkb3duJiMzOTtzIHNjYW4uCiYjNDM7ICovCiYjNDM7dm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXJtcG9wdF9jYXBhYmxlKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JtcG9wdF93cV9tdXRleCk7CiYjNDM7CiYjNDM7CWlmICghcm1wb3B0X3dxKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLAomIzQzOwkJCSBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCAmIzM0O2t2bS1hbWQmIzM0Oyk7CiYjNDM7CiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpCiYjNDM7ewomIzQzOwl1NjQgcm1wb3B0X2Jhc2U7CiYjNDM7CWludCBjcHU7CiYjNDM7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb24KJiM0MzsJICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvbgomIzQzOwkgKiBwYXNzIHJhdGhlciB0aGFuIHJlZG9pbmcgdGhlIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJtcG9wdF93cSkgewomIzQzOwkJcXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgJmFtcDtybXBvcHRfZGVsYXllZF93b3JrLCAwKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBkZWRpY2F0ZWQgcGVyLUNQVSB3b3JrcXVldWUgc28gdGhlIHBvdGVudGlhbGx5IGxlbmd0aHkgd2FybS11cAomIzQzOwkgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1BFUkNQVSwgMSk7CiYjNDM7CWlmICghcm1wb3B0X3dxKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgZG9fcm1wb3B0X3dvcmspOwomIzQzOwomIzQzOwlybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpOwomIzQzOwlybXBvcHRfYmFzZSA9IHJtcG9wdF9wYV9zdGFydCB8IE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUmIzM5O3MKJiM0MzsJICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuCiYjNDM7CSAqLwomIzQzOwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcHJpbWFyeV90aHJlYWRfbWFzaykKJiM0MzsJCXdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTsKJiM0MzsKJiM0MzsJcm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7CiYjNDM7CiYjNDM7CWlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgJmd0OyBTWl8yVCkKJiM0MzsJCXJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQ7CiYjNDM7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgJiMzNDtjY3AmIzM0Oyk7CiYjNDM7CiAvKgogICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhcwogICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlAKQEAgLTU3Nyw2ICYjNDM7NzMxLDggQEAgRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sICYjMzQ7Y2NwJiMzNDspOwogICovCiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiB7CiYjNDM7CXU2NCB2YWw7CiYjNDM7CiAJaWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpCiAJCXJldHVybiAtRU5PU1lTOwogCkBAIC01ODYsNiAmIzQzOzc0MiwxNSBAQCBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpCiAJaWYgKCFzZXR1cF9ybXB0YWJsZSgpKQogCQlyZXR1cm4gLUVOT1NZUzsKIAomIzQzOwkvKgomIzQzOwkgKiBPbiBhIGtleGVjIGJvb3QgU05QIG1heSBhbHJlYWR5IGJlIGVuYWJsZWQgKGxlZ2FjeSBmaXJtd2FyZSBsZWF2ZXMKJiM0MzsJICogU25wRW4gc2V0IGFjcm9zcyBzaHV0ZG93biksIGluIHdoaWNoIGNhc2Ugc25wX3ByZXBhcmUoKSBiYWlscyB3aXRob3V0CiYjNDM7CSAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmRtc3JxKE1TUl9BTUQ2NF9TWVNDRkcsIHZhbCk7CiYjNDM7CWlmICh2YWwgJmFtcDsgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pCiYjNDM7CQljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiYjNDM7CiAJLyoKIAkgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pYwogCSAqIG5vdGlmaWVyIGlzIGludm9rZWQgdG8gZG8gU05QIElPTU1VIHNodXRkb3duIGJlZm9yZSBrZHVtcC4KQEAgLTY4MywxMyAmIzQzOzg0OCwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKQogCiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpCiB7Ci0JaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpCiYjNDM7CWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKSB7CiAJCXJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7CiAKLQlpZiAocm1wX2NmZyAmYW1wOyBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKQotCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCi0JCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJCWlmIChybXBfY2ZnICZhbXA7IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpCiYjNDM7CQkJcmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VnbWVudGVkIFJNUCBpcyBlaXRoZXIgbm90IHN1cHBvcnRlZCBvbiB0aGUgcGxhdGZvcm0gb3IgaXMKJiM0MzsJICogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLiAgUk1QT1BUIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dAomIzQzOwkgKiBzZWdtZW50ZWQgUk1QLgomIzQzOwkgKi8KJiM0MzsJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwppbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKQEAgLTE2NjMsNiAmIzQzOzE2NjMsOCBAQCBzdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKQogCiAJc2V2X2VzX3Rtcl9zaXplID0gU05QX1RNUl9TSVpFOwogCiYjNDM7CXNucF9zZXR1cF9ybXBvcHQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCYjMzk7cyBicmVhayBpdCBkb3duIGFuZCBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzdGFuZGFyZCB0cmlhZ2UgdGFzaywganVzdCBhIGRldmVsb3BlciBRQSBhbmQgdHJpYWdlIG9mIGEgcGF0Y2ggc2VyaWVzLgoKRmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBSTVBPUFQgc3VwcG9ydCwgd2hpY2ggaXMgcmVsYXRlZCB0byBBTUQmIzM5O3Mgc2VjdXJlIG1lbW9yeSBlbmNyeXB0aW9uIHRlY2hub2xvZ3ksIFNFVi1TTlAuIEhlcmUmIzM5O3Mgd2hhdCBqdW1wcyBvdXQ6CgoqICAgKipIZWFkZXIgRmlsZXM6KiogV2UmIzM5O3JlIGludHJvZHVjaW5nIG5ldyBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBpbiBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGFuZCBgc2V2LmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBjb250cm9sbGVkLgoqICAgKipDUFUgRmVhdHVyZSBEZXRlY3Rpb246KiogQ2hhbmdlcyBpbiBgc2NhdHRlcmVkLmNgIGluZGljYXRlIHRoZSBhZGRpdGlvbiBvZiBhIENQVUlEIGJpdCBmb3IgUk1QT1BULiBUaGlzIGlzIGNsYXNzaWM7IHdlJiMzOTtyZSBjaGVja2luZyBmb3IgaGFyZHdhcmUgc3VwcG9ydC4KKiAgICoqS1ZNIEludGVncmF0aW9uOioqIFRoZSBga3ZtL3N2bS9zZXYuY2AgZmlsZXMgYXJlIHdoZXJlIHRoZSBhY3Rpb24gcmVhbGx5IHNlZW1zIHRvIGJlLiBXZSYjMzk7dmUgZ290IGBzZXZfdm1fZGVzdHJveSgpYCBjYWxsaW5nIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHdpdGhpbiBgc25wX3ByZXBhcmUoKWAgYW5kIGBzbnBfc2h1dGRvd24oKWAgaW52b2x2aW5nIGhvdHBsdWcgZGlzYWJsZS9lbmFibGUuIFRoZXJlJiMzOTtzIGEgbG90IG9mIGZ1bmN0aW9uIGFjdGl2aXR5IGhlcmU6IGBybXBvcHRfY2FwYWJsZSgpYCwgYHJtcG9wdCgpYCwgYHJtcG9wdF9zY2FuX3JhbmdlKClgLCBldGMuIFdlJiMzOTtyZSBjbGVhcmx5IHNldHRpbmcgdXAsIGVuYWJsaW5nLCBhbmQgbWFuYWdpbmcgdGhlIFJNUE9QVCBmZWF0dXJlIHdpdGhpbiB0aGUgS1ZNL1NFVi1TTlAgY29udGV4dC4gQWxzbyB3aXRoaW4gYHNucF9ybXB0YWJsZV9pbml0KClgIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGVuYWJsZSB2aWEgU1lTQ0ZHIGFuZCBjYWxscyB0byBgY3B1X2hvdHBsdWdfZGlzYWJsZSgpYC4gQW5kIGZpbmFsbHksIGluIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCB0aGUgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgd2lsbCBiZSBjbGVhcmVkIGlmIG5vdCBzZWdtZW50ZWQgUk1QLgoqICAgKipDcnlwdG8gRHJpdmVyIEludm9sdmVtZW50OioqIFRoZSBgY2NwL3Nldi1kZXYuY2AgZmlsZSBpcyBjYWxsaW5nIGBzbnBfc2V0dXBfcm1wb3B0KClgIHdpdGhpbiBpdHMgaW5pdGlhbGl6YXRpb24uIFRoaXMgc2hvd3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgY3J5cHRvIGxheWVyLCB3aGljaCBpcyByZWxldmFudCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIFNFVi1TTlAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgc2hvdWxkIGRvIHNvbWUgYGdyZXBgIHdvcmsgb3IgdXNlIGNvZGVzZWFyY2ggdG8gc2VlIHdoZXJlIENDUCwgU0VWLVNOUCwgYW5kIEtWTSBTRVYgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IGdldCBleGVjdXRlZCBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgZnV6emluZy4gRG9lcyB0aGlzIGludGVyYWN0IHdpdGggdXNlcnNwYWNlIGF0IGFsbD8gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEFyZSB0aGVyZSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZXhwb3NlZCBpbnRlcmZhY2VzPyBJZiBpdCYjMzk7cyBhbGwgaW50ZXJuYWwgS1ZNIHN0dWZmLCB0aGVuIGl0IG1pZ2h0IGJlIGhhcmRlciB0byBmdXp6IGVmZmVjdGl2ZWx5LiBJZiB0aGVyZSBhcmUgbmV3IGludGVyZmFjZXMgb3IgdXNlci1mYWNpbmcgcGFydHMsIGl0JiMzOTtzIHZlcnkgcHJvbWlzaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9ybXB0YWJsZV9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjUxOmludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY1Mi1pbnQgc25wX2xvb2t1cF9ybXBlbnRyeSh1NjQgcGZuLCBib29sICphc3NpZ25lZCwgaW50ICpsZXZlbCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY5PXN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjcwOnN0YXRpYyBpbmxpbmUgaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzI1PUVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzEtICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzI6aW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzMzLXtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDMyLVx0ICovXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQzMzpcdGlmIChzbnBfcm1wdGFibGVfaW5pdCgpKSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQzNC1cdFx0cHJfd2FybihcJiMzNDtTTlA6IFJNUCBpbml0aWFsaXphdGlvbiBmYWlsZWQsIFNOUCBjYW5ub3QgYmUgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNFVi1TTlAgSG9zdCBTdXBwb3J0IGluIFZpcnR1YWxpemVkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU0VWLVNOUCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBUaGF0IG1lYW5zIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFplbiAzJiM0Mzsgb3IgWmVuIDUvNiB3aXRoIHRoZSBSTVBPUFQgaW5zdHJ1Y3Rpb24sIEFNRCBJT01NVSwgQ0NQIGhhcmR3YXJlLi4uIGFuZCBwcm9iYWJseSBvdGhlciB0aGluZ3MuIEJ1dCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGNhbiBJICphY3R1YWxseSogdGVzdCB0aGlzIHN0dWZmIGluIGEgZnV6emluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuCgpGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzdHVmZiwgY29uc2lkZXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgSSYjMzk7bSB1c2luZy4gVGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoYXQgaWYgdGhlIGNvZGUmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJIHNob3VsZG4mIzM5O3QgYm90aGVyIGZ1enppbmcgaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhvc2Ugc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGNvbXBvbmVudHMg4oCTIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFRoaW5ncyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBlZmZlY3RpdmVseS4gQWxzbywgdGhvc2UgZXhlY3V0aW9uIHBhdGhzIHRoYXQgSSBjYW4mIzM5O3QgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIHNldHVwIC0gZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1Zywgb3IgY29kZSBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBmdXp6aW5nIHRhcmdldC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6ICppcyogQU1EIFNFViBob3N0IHN1cHBvcnQgcmVhY2hhYmxlIGluIFFFTVUgb3IgR0NFPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZmlyc3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEtWTSBTRVYgb3IgQ0NQIG9yIFNFViBndWVzdCB2cyBTRVYgaG9zdCBtYXR0ZXJzIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgIGFuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCB0cnVseSByZXF1aXJlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBjcml0ZXJpYSBhbmQgY2hlY2sgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgc2F5IGFib3V0IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NDX0FUVFJfSE9TVF9TRVZfU05QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2NvY28vY29yZS5jPTcwPXN0YXRpYyBib29sIG5vaW5zdHIgYW1kX2NjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cilcbi0tXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxMDQ6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVx0XHRyZXR1cm4gY2NfZmxhZ3MuaG9zdF9zZXZfc25wO1xuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jPTE3MD1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fY2xlYXIoZW51bSBjY19hdHRyIGF0dHIpXG4tLVxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVx0c3dpdGNoIChhdHRyKSB7XG5hcmNoL3g4Ni9jb2NvL2NvcmUuYzoxNzM6XHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxuYXJjaC94ODYvY29jby9jb3JlLmMtMTc0LVx0XHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jPTE5Mj1zdGF0aWMgdm9pZCBhbWRfY2NfcGxhdGZvcm1fc2V0KGVudW0gY2NfYXR0ciBhdHRyKVxuLS1cbmFyY2gveDg2L2NvY28vY29yZS5jLTE5NC1cdHN3aXRjaCAoYXR0cikge1xuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1Olx0Y2FzZSBDQ19BVFRSX0hPU1RfU0VWX1NOUDpcbmFyY2gveDg2L2NvY28vY29yZS5jLTE5Ni1cdFx0Y2NfZmxhZ3MuaG9zdF9zZXZfc25wID0gMTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzMtXHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjM3NDpcdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzc6XHRcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy0xMTEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYy0xMTMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTI4MC1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyODItXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEKSkge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTI1OT1zdGF0aWMgdm9pZCAqc2V2X2RiZ19jcnlwdF9zbG93X2FsbG9jKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIF9fdmEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjEyOTQ6XHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTI5NS1cdFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTMwMD1zdGF0aWMgdm9pZCBzZXZfZGJnX2NyeXB0X3Nsb3dfZnJlZSh2b2lkICpidWYpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMzAyOlx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE5MzpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTk0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk4Nz1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTkxLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTkyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTkzLVx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyMDU9dm9pZCBzZXZfZ21lbV9tYWtlX3NoYXJlZChrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjA4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjA5Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjEwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYz0xMDI9dm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfc2V0dXBfYXJjaCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0LmMtMTEwLVx0ICovXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYy0xMTItXHRcdHNucF9maXh1cF9lODIwX3RhYmxlcygpO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYy0zMS1cdFx0XHRcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmM6MzI6XHRcdFx0XHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE0OC17XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNDk6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNTAtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNTg9c3RhdGljIHZvaWQgc25wX2VuYWJsZSh2b2lkICphcmcpXG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYxLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTYyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTYzLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MjYwPXN0YXRpYyB2b2lkIGNsZWFyX3JtcCh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2NC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjI2NTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTI2Ni1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTYwMD1zdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYwMi1cdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo2MDM6XHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTYwNC19XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzMyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzY6XHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTczNy1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTQxPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05NDUtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NDY6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy05NDctXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwNjc9aW50IHBzbWFzaCh1NjQgcGZuKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEwNzEtXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDcyOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA3My1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE3Nj1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMTgwLVxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE4MTpcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExODItXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjk9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc0LVx0ICovXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMjc1Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc2LVx0XHR3YmludmQoKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTE1MDg9c3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjE1MTc6XHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MjA2Nz1zdGF0aWMgaW50IHNldl9nZXRfYXBpX3ZlcnNpb24odm9pZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXHQgKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjA3NzpcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzgtXHRcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFx1MDAyNmVycm9yKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yOTgyLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yOTg0LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMzk3LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4Olx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDQyOlx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM1Njc9c3RhdGljIGludCBfX2luaXQgaW9tbXVfZ29fdG9fc3RhdGUoZW51bSBpb21tdV9pbml0X3N0YXRlIHN0YXRlKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTg3LVx0ICovXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcdGlmIChyZXQgXHUwMDI2XHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cdCAgICAhV0FSTl9PTl9PTkNFKGFtZF9pb21tdV9zbnBfZW4pKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM1OTA6XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNTkxLVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNjk0PXZvaWQgX19pbml0IGFtZF9pb21tdV9kZXRlY3Qodm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzE0Olx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcdFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaD0yMj1lbnVtIGNjX2F0dHIge1xuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Mi1cdC8qKlxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlx0ICogQENDX0FUVFJfSE9TVF9TRVZfU05QOiBBTUQgU05QIGVuYWJsZWQgb24gdGhlIGhvc3QuXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTQtXHQgKlxuLS1cbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05Ny1cdCAqL1xuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjk4Olx0Q0NfQVRUUl9IT1NUX1NFVl9TTlAsXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFNOUCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJIHN1c3BlY3Qgc29tZXRoaW5nJiMzOTtzIHVwIHdpdGggaG93IHdlJiMzOTtyZSBoYW5kbGluZyBTTlBzLCBhbmQgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQU1EIGFyY2hpdGVjdHVyZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgYGJzcF9kZXRlcm1pbmVfc25wYCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGtleSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2YgYmVoYXZpb3IsIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgcmVzaWRlcyBpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBiZWNhdXNlIHRoYXQgQU1ELXNwZWNpZmljIGZpbGUgaXMgdGhlIHJpZ2h0IGxldmVsIG9mIGFic3RyYWN0aW9uIGZvciBpbnZlc3RpZ2F0aW5nIENQVS1zcGVjaWZpYyBpZGlvc3luY3JhY2llcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XG4gMzU2Olx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIDM1NzpcdHtcbiAzNTg6XHQjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMzU5Olx0XHRjY192ZW5kb3IgPSBDQ19WRU5ET1JfQU1EO1xuIDM2MDpcdFxuIDM2MTpcdFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcbiAzNjI6XHRcdFx0LypcbiAzNjM6XHRcdFx0ICogUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBub3QgYXJjaGl0ZWN0dXJhbCBhbmQgaXMgZGVmaW5lZCBieSB0aGVcbiAzNjQ6XHRcdFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXG4gMzY1Olx0XHRcdCAqIGZvciB3aGljaCB0aGUgUk1QIHRhYmxlIGVudHJ5IGZvcm1hdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBvciBmb3JcbiAzNjY6XHRcdFx0ICogcHJvY2Vzc29ycyB3aGljaCBzdXBwb3J0IHRoZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBSTVBSRUFEXG4gMzY3Olx0XHRcdCAqIGluc3RydWN0aW9uLlxuIDM2ODpcdFx0XHQgKi9cbiAzNjk6XHRcdFx0aWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIFx1MDAyNlx1MDAyNlxuIDM3MDpcdFx0XHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfWkVOMykgfHxcbiAzNzE6XHRcdFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XG4gMzcyOlx0XHRcdCAgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBSRUFEKSkgXHUwMDI2XHUwMDI2XG4gMzczOlx0XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG4gMzc0Olx0XHRcdFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiAzNzU6XHRcdFx0fSBlbHNlIHtcbiAzNzY6XHRcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xuIDM3NzpcdFx0XHRcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbiAzNzg6XHRcdFx0fVxuIDM3OTpcdFx0fVxuIDM4MDpcdCNlbmRpZlxuIDM4MTpcdH1cbiAzODI6XHRcbiAzODM6XHQjZGVmaW5lIFpFTl9NT0RFTF9TVEVQX1VDT0RFKGZhbSwgbW9kZWwsIHN0ZXAsIHVjb2RlKSBcXFxuIDM4NDpcdFx0WDg2X01BVENIX1ZGTV9TVEVQUyhWRk1fTUFLRShYODZfVkVORE9SX0FNRCwgZmFtLCBtb2RlbCksIFxcXG4gMzg1Olx0XHRcdFx0ICAgIHN0ZXAsIHN0ZXAsIHVjb2RlKVxuIDM4NjpcdFxuIDM4NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCBhbWRfdHNhX21pY3JvY29kZVtdID0ge1xuIDM4ODpcdFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgxLCAweDBhMDAxMWQ3KSxcbiAzODk6XHRcdFpFTl9NT0RFTF9TVEVQX1VDT0RFKDB4MTksIDB4MDEsIDB4MiwgMHgwYTAwMTIzYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFJNUE9QVCBDYXBhYmlsaXRpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGxpbmVzIDM2OS0zNzAgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBjaGVjayBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIC4uLilgISBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBmb3IgcnVubmluZyB1bmRlciBhIGh5cGVydmlzb3IgbGlrZSBRRU1VIG9yIEdDRS4gQmVjYXVzZSBpZiBhIGh5cGVydmlzb3IgaXMgcHJlc2VudCwgYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGB0cnVlYCwgYW5kICp0aGF0IG1lYW5zKiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHdpbGwgKm5ldmVyKiBiZSBzZXQuIFRoYXQmIzM5O3MgYSBodWdlIHByb2JsZW0uCgpUaGlzIHRlbGxzIG1lIHRoYXQgc2V0dGluZyB1cCB0aGUgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBhdHRyaWJ1dGUsIGFuZCBieSBleHRlbnNpb24gU0VWLVNOUCBzdXBwb3J0LCBpcyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gYmFyZS1tZXRhbCBBTUQgWmVuMyYjNDM7IC8gWmVuNSYjNDM7IGhhcmR3YXJlIHdpdGggU0VWLVNOUCBlbmFibGVkIGluIHRoZSBCSU9TL2hhcmR3YXJlLiBBbmQgUk1QT1BUIHNlZW1zIHRvIGJlIGEgbmV3IGluc3RydWN0aW9uLCB3aGljaCBpcyBmb3IgWmVuNiBvciBmdXR1cmUgQ1BVcy4KCkkgbmVlZCB0byBjaXJjbGUgYmFjayB0byB3aGF0IGBybXBvcHQoKWAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gT2theSwgaXQmIzM5O3MgdXNpbmcgYW4gaW5saW5lIGFzc2VtYmx5IGluc3RydWN0aW9uOiBgLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4KCk5vdywgY2hlY2tpbmcgYHJtcG9wdF9jYXBhYmxlKClgLiBJdCByZXF1aXJlcyAqYm90aCogYGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKWAgKmFuZCogYGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBJZiBgIXJtcG9wdF9jYXBhYmxlKClgLCB0aGVuIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgIGFuZCBgc25wX3NldHVwX3JtcG9wdCgpYCBpbW1lZGlhdGVseSByZXR1cm4uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBwdXQgdGhlIHBpZWNlcyB0b2dldGhlci4KCkFuZCBJIHNlZSB0aGF0IGBzbnBfcm1wdGFibGVfaW5pdCgpYCAqaW1tZWRpYXRlbHkqIHJldHVybnMgLUVOT1NZUyBpZiBgIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBUaGUgY29kZSB3b24mIzM5O3QgZXZlbiBjb250aW51ZS4gU2ltaWxhcmx5LCBgc25wX3ByZXBhcmUoKWAgaXMgb25seSBjYWxsZWQgYnkgdGhlIENDUCBkcml2ZXIgd2hlbiBhIFNOUCBob3N0IGlzIGluaXRpYWxpemluZyB2aWEgYF9fc2V2X3NucF9pbml0X2xvY2tlZCgpYCwgYW5kIHRoYXQgZnVuY3Rpb24gKmFsc28qIGNoZWNrcyBgaWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKWAsIHJldHVybmluZyAtRU5PREVWIGlmIGZhbHNlLiBBbmQgYHNucF9zaHV0ZG93bigpYCBpcyBzaW1pbGFybHkgb25seSBjYWxsZWQgdmlhIENDUCBkdXJpbmcgYW4gU05QIGhvc3Qgc2h1dGRvd24uCgpUaGlzIGlzIGFsbCBtYWtpbmcgaXQgY2xlYXIgLSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgb25seSBjYWxsZWQgZnJvbSBgYnNwX2RldGVybWluZV9zbnAoKWAuICpBbmQqIHRoYXQgb25seSBoYXBwZW5zIGF0IGJvb3QgdGltZSBvbiBBTUQgQlNQIHdoZW4gYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUClgICppcyogdHJ1ZSBhbmQgKmFsc28qIGAhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SKWAuIEdvdCBpdC4gTm93IEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBpcyBjYWxsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02NDU9c3RhdGljIGlubGluZSB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MDpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUxLWludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02Njc9dm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NjgtI2Vsc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MC1zdGF0aWMgaW5saW5lIGludCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTY9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMtMzcyLVx0XHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYzozNzM6XHRcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3NC1cdFx0XHRjY19wbGF0Zm9ybV9zZXQoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgwNT1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxuLS1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTg0OC1cbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjg0OTpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy04NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgc2V2X3ZtX2Rlc3Ryb3koKWAgYW5kIFNFVi1TTlAgR3Vlc3QgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgc2V2X3ZtX2Rlc3Ryb3koKWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBkZXN0cnVjdGlvbiBvZiBhIEtWTSBWTSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIFNFVi1TTlAgKFNlY3VyZSBOZXN0ZWQgUGFnaW5nKSBhc3BlY3RzLgoKTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiB0aGUgVk0gaXMgYW4gU0VWLVNOUCBndWVzdCAoY2hlY2tlZCBieSBgc2V2X3NucF9ndWVzdChrdm0pYCksIHRoZSBmdW5jdGlvbiB0YWtlcyBzcGVjaWZpYyBhY3Rpb25zLiBJdCBhcHBlYXJzIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgYHNldl9lc19pbml0X3ZtKClgIGNvdWxkIGZhaWwgYWZ0ZXIgYHNucF9pbml0X3ZtKClgLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBnZXRzIGRlY29tbWlzc2lvbmVkIHZpYSBhIGNhbGwgdG8gYHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pYC4gIElmIHRoYXQgY2FsbCBpcyBzdWNjZXNzZnVsLCB3ZSBiYWlsIG91dC4gT3RoZXJ3aXNlLCBpdCB0cmlnZ2VycyBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYC4KCklmIHRoZSBWTSAqaXNuJiMzOTt0KiBhbiBTRVYtU05QIGd1ZXN0LCB0aGUgYHNldl91bmJpbmRfYXNpZCgpYCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4KClRoaXMgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBDYW4gYSBndWVzdCBWTSAqZW11bGF0ZSogYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIHJ1biBhcyBpZiBpdCAqd2VyZSogYW4gU0VWLVNOUCBndWVzdCB1bmRlciBRRU1VICp3aXRob3V0KiBhY3R1YWwgcGh5c2ljYWwgQU1EIFNFVi1TTlAgaGFyZHdhcmU/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29uZGl0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgc2V2X3NucF9ndWVzdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjb25kaXRpb25hbCBsb2dpYy4gS25vd2luZyB0aGlzIHdpbGwgY2xhcmlmeSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBhIHB1cmVseSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB2ZXJzdXMgb25lIHdpdGggdHJ1ZSBoYXJkd2FyZSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfc25wX2d1ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MTQwPXN0YXRpYyBib29sIHNldl9lc19ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNDUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0NjpzdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ3LXtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ4LVx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3Nldl9sb2NrX2hlbGQoa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ5Olx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE1MC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMDk9c3RhdGljIGJvb2wgc25wX2lzX3NlY3VyZV90c2NfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTMtXHRyZXR1cm4gKHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNDpcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFzZXZfc25wX2d1ZXN0KGt2bSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjEzNj1pbnQgc2V2X3ZtX21vdmVfZW5jX2NvbnRleHRfZnJvbShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBzb3VyY2VfZmQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU3LVx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gc291cmNlX2t2bS1cdTAwM2VhcmNoLnZtX3R5cGUgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjE1ODpcdCAgICBzZXZfZ3Vlc3Qoa3ZtKSB8fCAhc2V2X2d1ZXN0KHNvdXJjZV9rdm0pIHx8IHNldl9zbnBfZ3Vlc3Qoc291cmNlX2t2bSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIyNzc9c3RhdGljIGludCBzbnBfbGF1bmNoX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI4My1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjI4NDpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjg1LVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI0MjE9c3RhdGljIGludCBzbnBfbGF1bmNoX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0MzA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSB8fCAhc2V2LVx1MDAzZXNucF9jb250ZXh0KVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDMxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1NjI9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NjktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1NzA6XHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU3MS1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2Mzkte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQwOlx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDEtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY0OD1pbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NzItXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY3MzpcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXHUwMDI2XHUwMDI2IHNldl9jbWQuaWQgXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY3NC1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4NTk9aW50IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjg4My1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyODg0Olx0aWYgKHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSB8fFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODg1LVx0ICAgIGlzX21pcnJvcmluZ19lbmNfY29udGV4dChzb3VyY2Vfa3ZtKSB8fCBrdm0tXHUwMDNlY3JlYXRlZF92Y3B1cykge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk3Nz12b2lkIHNldl92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjUtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwMjY6XHRpZiAoc2V2X3NucF9ndWVzdChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjctXHRcdHNucF9ndWVzdF9yZXFfY2xlYW51cChrdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMzNT12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0ODpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1NDc9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzU2MTpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjItXHRcdHU2NCBwZm4gPSBfX3BhKHN2bS1cdTAwM2VzZXZfZXMudm1zYSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjIwPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIyODpcdGlmICghaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMjktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI4OT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjk2Olx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjk3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTE9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzMC1cdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDMxOlx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzItXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0MS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0MjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTYtXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NTc6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1OC1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTA4PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0MS1cdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NDI6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0My1cdCAgICAhZ2hjYl9ncGFfaXNfcmVnaXN0ZXJlZChzdm0sIGNvbnRyb2wtXHUwMDNlZ2hjYl9ncGEpKSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTU4Olx0aWYgKGlzX3NucF9vbmx5X3ZtZ2V4aXQoY29udHJvbC1cdTAwM2VleGl0X2NvZGUpIFx1MDAyNlx1MDAyNiAhaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU5LVx0XHR2Y3B1X3VuaW1wbCh2Y3B1LCBcJiMzNDt2bWdleGl0OiBleGl0IGNvZGUgJSNsbHggaXMgU05QLW9ubHlcXG5cJiMzNDssXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODQ0PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg1Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg1NzpcdGlmIChpbml0X2V2ZW50IFx1MDAyNlx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVx0XHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg5MT12b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKmhvc3RzYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzEtXHQgICAgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVCVUdfU1dBUCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MzI6XHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTMzLVx0XHRob3N0c2EtXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTE1NT1pbnQgc2V2X2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTYyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MTYzOlx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxNjQtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTI2OD12b2lkIHNldl9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgwLVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyODE6XHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUyODItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMDM9aW50IHNldl9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTMwNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTMwODpcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzA5LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUzMTg9c3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzMzgtXHQvKiBDaGVjayBpZiB0aGUgU0VWIHBvbGljeSBhbGxvd3MgZGVidWdnaW5nICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzMzk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQwLVx0XHRpZiAoIShzZXYtXHUwMDNlcG9saWN5IFx1MDAyNiBTTlBfUE9MSUNZX01BU0tfREVCVUcpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Ni1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0NzpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXHRcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZGJnIGRiZyA9IHswfTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjE6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX0VOQ19NQVNLKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyMi1cdFx0ZXJyb3JfY29kZSB8PSBQRkVSUl9QUklWQVRFX0FDQ0VTUztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0NDAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDE6XHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFwmIzM0O1NFVi1TTlBcJiMzNDsgOlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVx0XHQgIGlzX3Nldl9lc19ndWVzdCh2Y3B1KSA/IFwmIzM0O1NFVi1FU1wmIzM0OyA6XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMwLXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDMxOlx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMyLX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQ0Mi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDQzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYF9fX19zZXZfc25wX2d1ZXN0KGt2bSlgIGFuZCBgS1ZNX1g4Nl9TTlBfVk1gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZ2VuZXNpcyBhbmQgbWVjaGFuaWNzIG9mIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYEtWTV9YODZfU05QX1ZNYCBzdHJ1Y3R1cmUuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBpcyByb2J1c3QsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzIGFsaWduIHBlcmZlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjcmVhdGlvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gLiBXaGVyZSBpcyBpdCBiZWluZyBpbnN0YW50aWF0ZWQ/IFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgcGFyYW1ldGVycyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgU0VWLVNOUCBndWVzdCB2aXJ0dWFsaXphdGlvbj8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvd2FyZCBidWlsZGluZyBhIHRydWUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MDY6XHR7XG4gNDA3Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiBzZXYtXHUwMDNlZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXHUwMDNlYWN0aXZlKTtcbiA0MTA6XHR9XG4gNDExOlx0XG4gNDEyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MTM6XHR7XG4gNDE0Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA0MTc6XHRcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xuIDQxODpcdH1cbiA0MTk6XHRcbiA0MjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDIzOlx0fVxuIDQyNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyNTpcdHtcbiA0MjY6XHRcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0Mjc6XHR9XG4gNDI4Olx0XG4gNDI5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzMDpcdHtcbiA0MzE6XHRcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDMyOlx0fVxuIDQzMzpcdCNlbHNlXG4gNDM0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDM1Olx0e1xuIDQzNjpcdFx0cmV0dXJuIGZhbHNlO1xuIDQzNzpcdH1cbiA0Mzg6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0Mzk6XHR7XG4gNDQwOlx0XHRyZXR1cm4gZmFsc2U7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0NDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgQU1EIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIFZNIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBLVk0gaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNldi0mZ3Q7dm1zYV9mZWF0dXJlc2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgaXQgc2V0cyB0aGluZ3MgdXAgZm9yIGFuIEFNRCBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwYXRoIGZvciB0aGlzLCBhcyBpdCYjMzk7cyBmb3VuZGF0aW9uYWwgdG8gdGhlIHNlY3VyaXR5IHBvc3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBBTUQgU0VWLVNOUCBhcmUgZW5hYmxlZCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpbnZvbHZlcyBwYXJzaW5nIHBsYXRmb3JtIGluZm9ybWF0aW9uIGFuZCB0aGVuIGNvbmZpZ3VyaW5nIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGFuZCBwaWVjZXMgd2l0aGluIHRoZSBWTVNBIHN0cnVjdHVyZXMuIFdoZXJlIGRvZXMgdGhlIGNvZGUgYWN0dWFsbHkgZGV0ZXJtaW5lIHdoYXQgU05QIGZlYXR1cmVzIGFyZSBhZHZlcnRpc2VkLCBhbmQgaG93IGRvZXMgaXQgZW5zdXJlIHRoZXkmIzM5O3JlIGNvcnJlY3RseSBzZXQgZHVyaW5nIHRoZSBWTSBsYXVuY2ggc2VxdWVuY2U/IEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIGNvbmZpcm0gdGhpcy4gSSBiZXQgaXQgaXMgYSBmdW5jdGlvbiBvZiB0aGUgSHlwZXJ2aXNvci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdHJhY2luZyB0aGUgY29kZSB3aGVyZSB0aGUgYHNldmAgc3RydWN0IGlzIGdldHRpbmcgYnVpbHQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBBTUQgU0VWLVNOUCBzcGVjaWZpYyBoYXJkd2FyZSBiaXRzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgYnV0IHRoZSBjb2RlIHRlbGxzIHRoZSB0cnV0aC4gSSYjMzk7bGwgbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZ2V0dGluZyBhbmQgc2V0dGluZyB0aG9zZSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGV4ZWN1dGlvbiwgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9MzA2PXN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtMzA3LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVCgwKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgtMzA5LSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVCgzKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNi1cdGlmIChzbnBfYWN0aXZlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1Mzc6XHRcdHNldi1cdTAwM2V2bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQxNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDE2Olx0cmV0dXJuIChzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyBcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTctXHQgICAgICAgIVdBUk5fT05fT05DRSghX19fX3Nldl9lc19ndWVzdChrdm0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxOTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFNFViBmcmFtZXdvcmssIGVzcGVjaWFsbHkgZm9yIEFNRCBwcm9jZXNzb3JzLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhleSYjMzk7cmUgc2V0dGluZyB0aGluZ3MgdXAgaW4gdGhlIGh5cGVydmlzb3IgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIFNFVi1FUyBvciBTRVYtU05QIGZ1bmN0aW9uYWxpdHkuIEkgc3VzcGVjdCB0aGVyZSYjMzk7bGwgYmUgc29tZSBjcnVjaWFsIGxvZ2ljIHJlZ2FyZGluZyBwYWdlIG1hcHBpbmcsIGtleSBkZXJpdmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbCBndWVzdCByZWdpc3RlciBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoYXQgYWZmZWN0IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggS1ZNJiMzOTtzIGV4aXN0aW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODU6XHRcdFx0X19mcmVlX3BhZ2UodmlydF90b19wYWdlKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKSk7XG4gNDg2Olx0XG4gNDg3Olx0XHRzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiA9IE5VTEw7XG4gNDg4Olx0XHRzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYgPSBOVUxMO1xuIDQ4OTpcdH1cbiA0OTA6XHRcbiA0OTE6XHRzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4gNDkyOlx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXG4gNDkzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbiA0OTQ6XHR7XG4gNDk1Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0OTY6XHRcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcbiA0OTc6XHRcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbiA0OTg6XHRcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG4gNDk5Olx0XHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4gNTAwOlx0XHRpbnQgcmV0O1xuIDUwMTpcdFxuIDUwMjpcdFx0aWYgKGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzKVxuIDUwMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDQ6XHRcbiA1MDU6XHRcdGlmIChkYXRhLVx1MDAzZWZsYWdzKVxuIDUwNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICghc25wX2FjdGl2ZSlcbiA1MDk6XHRcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbiA1MTA6XHRcbiA1MTE6XHRcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIDUxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTM6XHRcbiA1MTQ6XHRcdGlmIChkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2UgR0hDQl9WRVJTSU9OX01BWCB8fCAoIWVzX2FjdGl2ZSBcdTAwMjZcdTAwMjYgZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24pKVxuIDUxNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTY6XHRcbiA1MTc6XHRcdC8qXG4gNTE4Olx0XHQgKiBLVk0gc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgbWFuZGF0b3J5IGZlYXR1cmVzIGRlZmluZWQgYnkgdmVyc2lvblxuIDUxOTpcdFx0ICogMiBvZiB0aGUgR0hDQiBwcm90b2NvbCwgc28gZGVmYXVsdCB0byB0aGF0IGZvciBTRVYtRVMgZ3Vlc3RzIGNyZWF0ZWRcbiA1MjA6XHRcdCAqIHZpYSBLVk1fU0VWX0lOSVQyIChLVk1fU0VWX0lOSVQgZm9yY2VzIHZlcnNpb24gMSkuXG4gNTIxOlx0XHQgKi9cbiA1MjI6XHRcdGlmIChlc19hY3RpdmUgXHUwMDI2XHUwMDI2ICFkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbilcbiA1MjM6XHRcdFx0ZGF0YS1cdTAwM2VnaGNiX3ZlcnNpb24gPSAyO1xuIDUyNDpcdFxuIDUyNTpcdFx0aWYgKHNucF9hY3RpdmUgXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZ2hjYl92ZXJzaW9uIFx1MDAzYyAyKVxuIDUyNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1Mjc6XHRcbiA1Mjg6XHRcdGlmICh1bmxpa2VseShzZXYtXHUwMDNlYWN0aXZlKSlcbiA1Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTMwOlx0XG4gNTMxOlx0XHRzZXYtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiA1MzI6XHRcdHNldi1cdTAwM2Vlc19hY3RpdmUgPSBlc19hY3RpdmU7XG4gNTMzOlx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyA9IGRhdGEtXHUwMDNldm1zYV9mZWF0dXJlcztcbiA1MzQ6XHRcdHNldi1cdTAwM2VnaGNiX3ZlcnNpb24gPSBkYXRhLVx1MDAzZWdoY2JfdmVyc2lvbjtcbiA1MzU6XHRcbiA1MzY6XHRcdGlmIChzbnBfYWN0aXZlKVxuIDUzNzpcdFx0XHRzZXYtXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbiA1Mzg6XHRcbiA1Mzk6XHRcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuIDU0MDpcdFx0aWYgKHJldClcbiA1NDE6XHRcdFx0Z290byBlX25vX2FzaWQ7XG4gNTQyOlx0XG4gNTQzOlx0XHRpbml0X2FyZ3MucHJvYmUgPSBmYWxzZTtcbiA1NDQ6XHRcdHJldCA9IHNldl9wbGF0Zm9ybV9pbml0KFx1MDAyNmluaXRfYXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDU2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VWLVNOUCBJbml0aWFsaXphdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3RlcC1ieS1zdGVwLiBGaXJzdCwgYHNldl9wbGF0Zm9ybV9pbml0KCZhbXA7aW5pdF9hcmdzKWAgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIHRoZSBDQ1AgZHJpdmVyLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBwYXRoLiBUaGVuLCB0aGVyZSYjMzk7cyBgc2V2X3NucF9zdXBwb3J0ZWRgIHdpdGhpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNoZWNrIGlzOgoKYGBgYwpzZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCAmYW1wOyZhbXA7IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CmBgYAoKVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHZlcmlmeWluZyBib3RoIHRoYXQgU0VWLVNOUCBpcyBlbmFibGVkIGdlbmVyYWxseSwgYW5kIHRoYXQgdGhlIGhvc3QgcGxhdGZvcm0gYWN0dWFsbHkgc3VwcG9ydHMgaXQsIHVzaW5nIGBjY19wbGF0Zm9ybV9oYXMoKWAuIE5vIHN1cnByaXNlcyB0aGVyZS4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50LiBIb3cgaXMgYHNldl92bV9pbml0YCBvciwgbW9yZSBnZW5lcmFsbHksIGBrdm1fYXJjaF9pbml0X3ZtYCBzZXR0aW5nIHRoZSBga3ZtLSZndDthcmNoLnZtX3R5cGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSYjMzk7cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgVk0gdHlwZSBpcyBiZWluZyBjb25maWd1cmVkLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgU05QIGJlaGF2aW9yLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlIGBLVk1fWDg2X1NOUF9WTWAgZmxhZyBpcyBiZWluZyBzZXQgYW5kIHVzZWQgd2l0aGluIEtWTS4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgdGhlIHJlc3Qgb2YgdGhlIFNOUCBmdW5jdGlvbmFsaXR5IGdldHMgaG9va2VkIHVwLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoZXJlIGBLVk1fWDg2X1NOUF9WTWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfU05QX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NTEyPW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTctICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXHQzXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTUxODogICNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdDRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE5LSAgI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0NVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cdDNcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTc0OiNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzUtI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjU9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3NDpcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3NS1cdFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTE9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk3LVx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg6XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTItXHQgICAga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9FU19WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjEzOlx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxNC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2MC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NjE6XHRjYXNlIEtWTV9YODZfU05QX1ZNOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYyLVx0XHRrdm0tXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzUtXHR2bV90eXBlcyBcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDgtXHRcdHByX2luZm8oXCYjMzQ7U0VWLVNOUCAlcyAoQVNJRHMgJXUgLSAldSlcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XHRcdFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTAtXHRcdFx0bWluX3NucF9hc2lkLCBtYXhfc25wX2FzaWQpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzE0Nz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMzE2MS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzE2MjpcdHN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMTYzLVxuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cdDNcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTc0OiNkZWZpbmUgS1ZNX1g4Nl9TTlBfVk1cdFx0NFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzUtI2RlZmluZSBLVk1fWDg2X1REWF9WTVx0XHQ1XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTM1LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaDozNjpcdHJldHVybiB2bS1cdTAwM2V0eXBlID09IEtWTV9YODZfU05QX1ZNO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oLTM3LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc4PXN0YXRpYyBib29sIGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgwLSNpZmRlZiBfX3g4Nl82NF9fXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6NDgxOlx0cmV0dXJuIHNoYXBlLnR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgyLSNlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM9NzQ9dm9pZCBzbnBfdm1faW5pdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Nldi5jOjc4Olx0VEVTVF9BU1NFUlRfRVEodm0tXHUwMDNldHlwZSwgS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzktXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFx1MDAyNmluaXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04My1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6ODQ6XHRcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtODUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYz0xMTg9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTQ2Olx0aGF2ZV9zbnAgPSBrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNDctXHRURVNUX0FTU0VSVCghaGF2ZV9zbnAgfHwga3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCksXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNTUtXHRpZiAoaGF2ZV9zbnApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcdFx0dGVzdF9mbGFncyhLVk1fWDg2X1NOUF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2MS1cdGlmIChoYXZlX3NucClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6MTYyOlx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE2My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzE2PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taWdyYXRlX3JlamVjdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzIxOlx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjItXHRzbnBfdm1faW5pdChzcmNfdm0pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzI2Olx0ZHN0X3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zMjctXHRfX3ZtX3ZjcHVfYWRkKGRzdF92bSwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jPTMzOD1zdGF0aWMgdm9pZCB0ZXN0X3Nldl9zbnBfbWlycm9yX3JlamVjdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zNDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzQzOlx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYy0zNDQtXHRzbnBfdm1faW5pdChzcmNfdm0pO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yMjE9c3RhdGljIHZvaWQgdGVzdF9zZXZfc21va2Uodm9pZCAqZ3Vlc3QsIHUzMiB0eXBlLCB1NjQgcG9saWN5KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjI1Olx0aWYgKHR5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVx0XHR0ZXN0X3NldihndWVzdCwgdHlwZSwgcG9saWN5IHwgU05QX1BPTElDWV9EQkcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMzgtXHRcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM6MjM5Olx0XHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNDAtXHRcdFx0dGVzdF9zeW5jX3Ztc2EodHlwZSwgcG9saWN5IHwgU05QX1BPTElDWV9EQkcpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjYxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MjpcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MzpcdFx0dGVzdF9zZXZfc21va2UoZ3Vlc3Rfc25wX2NvZGUsIEtWTV9YODZfU05QX1ZNLCBzbnBfZGVmYXVsdF9wb2xpY3koKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwMgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgU0VWLVNOUCBDb21wYXRpYmlsaXR5KioKCkFscmlnaHQsIHNvIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYyByZWdhcmRpbmcgS1ZNIGFuZCBTRVYtU05QOiBDYW4gSSBzdWNjZXNzZnVsbHkgdXNlIGBLVk1fQ1JFQVRFX1ZNYCB3aXRoIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJiMzOTt0KiBzdXBwb3J0IFNFVi1TTlA/IEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGdyYWNlZnVsIGZhbGxiYWNrLCBvciBwZXJoYXBzIGFuIGVycm9yIGlzIGV4cGxpY2l0bHkgdGhyb3duLgoKVG8gZmlndXJlIHRoaXMgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBga3ZtX2FyY2hfaW5pdF92bWAgZnVuY3Rpb24sIHByb2JhYmx5IGZvdW5kIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gT3IgbWF5YmUgdGhlcmUmIzM5O3Mgc29tZSBzZXR1cCByZWxhdGVkIHRvIFNFViBoYXJkd2FyZSwgc29tZXRoaW5nIGNhbGxlZCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgdGhhdCBoYW5kbGVzIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdGhlIHJlcXVpcmVkIGNoZWNrcyBmb3IgU0VWLVNOUCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGBrdm1fYXJjaF9pbml0X3ZtYCBhbmQgZ28gZnJvbSB0aGVyZSwgYW5kIHNlZSB3aGVyZSBgc2V2X2hhcmR3YXJlX3NldHVwYCBmaXRzIGluIGlmIG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGtlcm5lbCBhdHRlbXB0cyB0byBkZXRlY3Qgb3IgZ3JhY2VmdWxseSBoYW5kbGUgdW5zdXBwb3J0ZWQgZmVhdHVyZXMuIExldCYjMzk7cyBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1g4Nl9TTlBfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY1PXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ny1cdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4Olx0Ym9vbCBzbnBfYWN0aXZlID0gdm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5LVx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjEyLVx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTYxOlx0Y2FzZSBLVk1fWDg2X1NOUF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2Mi1cdFx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMzLVx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjM0Olx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM1LVx0dm1fdHlwZXMgXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVx0XHRwcl9pbmZvKFwmIzM0O1NFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQ5Olx0XHRcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc25wX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUwLVx0XHRcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uIG9uIHg4NioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBhcmNoaXRlY3R1cmUgaW5pdGlhbGl6ZXMgb24geDg2LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSByZWNhbGwsIGlzIHByb2JhYmx5IHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uICprdm1fYXJjaF9pbml0X3ZtKiBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmaWxlIG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGlzIHdoZXJlIHRoZSBsb3ctbGV2ZWwsIHg4Ni1zcGVjaWZpYyBwYXJ0cyBvZiB2aXJ0dWFsIG1hY2hpbmUgc2V0dXAgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhbmQgZW50cnkgcG9pbnRzIGludm9sdmVkIGluIHRoZSBWTSYjMzk7cyBhcmNoaXRlY3R1cmFsIGluaXRpYWxpemF0aW9uLCBzbyBkaWdnaW5nIGludG8gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTM5Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2hhc19taXJyb3JlZF90ZHAoY29uc3Qgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6Mzk0Olx0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzk1LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NTctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTg6XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTU5LVx0XHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU4NS1cdCAgICAhKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihjcjJfb3JfZ3BhKSkpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NjA4PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxNy1cdH07XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc2MTg6XHRib29sIHphcF9hbGwgPSBrdm0tXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxOS1cdFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTk0LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTk1Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xOTYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNi1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNodGFibGUuaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY1OnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXHRcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTM6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk3Olx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg6XHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzOTpcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01ODYtXHR9O1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1ODc6XHR1bnNpZ25lZCBsb25nIHZtX3R5cGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4OC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTg5Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTAtXHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5MjpcdHZtX3R5cGUgPSAoYXJncC1cdTAwM2VpZCA9PSBLVk1fU0VWX0lOSVQgPyBLVk1fWDg2X1NFVl9WTSA6IEtWTV9YODZfU0VWX0VTX1ZNKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTk3LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5ODpcdGlmICh2bV90eXBlID09IEtWTV9YODZfU0VWX0VTX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTktXHRcdGRhdGEuZ2hjYl92ZXJzaW9uID0gR0hDQl9WRVJTSU9OX01JTjtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjEwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTE6XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjEyOlx0ICAgIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcdCAgICBrdm0tXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9OTY4PXN0YXRpYyBpbnQgc2V2X2VzX3N5bmNfdm1zYShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwMjctXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTAyODpcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEwMjktXHRcdHhzYXZlID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXJlZ3MueHNhdmU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMTM2PWludCBzZXZfdm1fbW92ZV9lbmNfY29udGV4dF9mcm9tKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IHNvdXJjZV9mZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNTYtXHQvKiBEbyBub3QgYWxsb3cgU05QIFZNIG1pZ3JhdGlvbiB1bnRpbCBhZGRpdGlvbmFsIHN0YXRlIHRyYW5zZmVyIGlzIGltcGxlbWVudGVkICAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMTU3Olx0aWYgKGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUgIT0gc291cmNlX2t2bS1cdTAwM2VhcmNoLnZtX3R5cGUgfHxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OC1cdCAgICBzZXZfZ3Vlc3Qoa3ZtKSB8fCAhc2V2X2d1ZXN0KHNvdXJjZV9rdm0pIHx8IHNldl9zbnBfZ3Vlc3Qoc291cmNlX2t2bSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NTU9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTYte1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTU3Olx0c3dpdGNoIChrdm0tXHUwMDNlYXJjaC52bV90eXBlKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzEtXHRkZWZhdWx0OlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTcyOlx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7VW5zdXBwb3J0ZWQgVk0gdHlwZSAldVwmIzM0Oywga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTQtXHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA5NTpcdHUzMiB2bV90eXBlcyA9IDA7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTYtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjI5LVx0aWYgKHNldl9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2IG1pbl9zZXZfYXNpZCBcdTAwM2M9IG1heF9zZXZfYXNpZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzMDpcdFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX1ZNKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMS1cdGlmIChzZXZfZXNfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNiBtaW5fc2V2X2VzX2FzaWQgXHUwMDNjPSBtYXhfc2V2X2VzX2FzaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzI6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NFVl9FU19WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XHRcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzU6XHR2bV90eXBlcyBcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzNi1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNzpcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSB2bV90eXBlcztcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzOC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDAtXHRcdHByX2luZm8oXCYjMzQ7U0VWICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0MTpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQyLVx0XHRcdG1pbl9zZXZfYXNpZCwgbWF4X3Nldl9hc2lkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDQtXHRcdHByX2luZm8oXCYjMzQ7U0VWLUVTICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NTpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X2VzX3N1cHBvcnRlZCwgdm1fdHlwZXMgXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9FU19WTSkpLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVx0XHRcdG1pbl9zZXZfZXNfYXNpZCwgbWF4X3Nldl9lc19hc2lkKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDgtXHRcdHByX2luZm8oXCYjMzQ7U0VWLVNOUCAlcyAoQVNJRHMgJXUgLSAldSlcXG5cJiMzNDssXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XHRcdFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTAtXHRcdFx0bWluX3NucF9hc2lkLCBtYXhfc25wX2FzaWQpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyNj1zdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQzMS1cdHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZTAxID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQzMjpcdGNoYXIgKnZtX3R5cGU7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MzMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQxOlx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0NS1cdHByX2VycihcJiMzNDslcyB2Q1BVJXUgVk1DQiAlcCwgbGFzdCBhdHRlbXB0ZWQgVk1SVU4gb24gQ1BVICVkXFxuXCYjMzQ7LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQ2Olx0ICAgICAgIHZtX3R5cGUsIHZjcHUtXHUwMDNldmNwdV9pZCwgc3ZtLVx1MDAzZWN1cnJlbnRfdm1jYi1cdTAwM2VwdHIsIHZjcHUtXHUwMDNlYXJjaC5sYXN0X3ZtZW50cnlfY3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Ny1cdHByX2VycihcJiMzNDtWTUNCIENvbnRyb2wgQXJlYTpcXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV90eXBlcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTYwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NjI6XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtNjMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwNzgtXHRcdFx0XHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwNzk6XHRcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA4MC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjE3MT1zdGF0aWMgaW50IGt2bV9pb2N0bF9nZXRfc3VwcG9ydGVkX2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoyMTkzOnN0YXRpYyBib29sIGt2bV9pc192bV90eXBlX3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nIHR5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5NC17XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5NTpcdHJldHVybiB0eXBlIFx1MDAzYyAzMiBcdTAwMjZcdTAwMjYgKGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyBcdTAwMjYgQklUKHR5cGUpKTtcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk2LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjIwMz1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0yNDA0LVx0Y2FzZSBLVk1fQ0FQX1ZNX1RZUEVTOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0MDU6XHRcdHIgPSBrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXM7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5OTk9aW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2Mi1cbmFyY2gveDg2L2t2bS94ODYuYzo3MDYzOlx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzID0gQklUKEtWTV9YODZfREVGQVVMVF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2NC1cdGt2bV9jYXBzLnN1cHBvcnRlZF9tY2VfY2FwID0gTUNHX0NUTF9QIHwgTUNHX1NFUl9QO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03MTI0LVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tWTV9TV19QUk9URUNURURfVk0pIFx1MDAyNlx1MDAyNiB0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzEyNTpcdFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzEyNi1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg0Ny1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODQ4Olx0aWYgKCFrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodHlwZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg0OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1MC1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODUxOlx0a3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9IHR5cGU7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1Mi1cdGt2bS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDI4CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDE1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGluIFN0YW5kYXJkIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgKnVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJiMzOTtyZSB0eXBpY2FsbHkgd29ya2luZyB3aXRoLCBsaWtlIFFFTVUgYW5kIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKS4gSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOgoKRmlyc3QsIHRoZSBjb2RlIHRvdWNoZXMgYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gIOKAkyB3aGljaCBpcyBrZXkgaGVyZSDigJMgaXMgY29udGluZ2VudCBvbiBgc2V2X3NucF9zdXBwb3J0ZWRgIGJlaW5nIHRydWUuIEFuZCBgc2V2X3NucF9zdXBwb3J0ZWRgIGlzIGRpcmVjdGx5IGxpbmtlZCB0byBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFRoaXMsIGluIHR1cm4sICpyZXF1aXJlcyogYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIHN1cHBvcnQsIGFuZCBleHBsaWNpdGx5ICpleGNsdWRlcyogdGhlIGh5cGVydmlzb3IgY2FzZSAoYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCkuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBgUk1QT1BUYCBzdHVmZiDigJMgYWxsIHRob3NlIGNoYW5nZXMgYXJvdW5kIGBYODZfRkVBVFVSRV9STVBPUFRgLCBgc25wX3NldHVwX3JtcG9wdGAsIGV0Yy4gVGhlc2UgYXJlICphbHNvKiB0aWdodGx5IGNvdXBsZWQgdG8gYmFyZS1tZXRhbCBoYXJkd2FyZSB3aXRoIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYW5kIHNwZWNpZmljIENQVSBmZWF0dXJlcyBsaWtlIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBTZWdtZW50ZWQgUk1QIHN1cHBvcnQgKHdoaWNoIGFwcGVhcnMgdG8gYmUgWmVuIDUvWmVuIDYgc3BlY2lmaWMpLiBFeGVjdXRpbmcgdGhlIGJpbnV0aWxzIFJNUE9QVCBvcGNvZGUgYW5kIGhhdmluZyBwaHlzaWNhbCBBTUQgSU9NTVUgLyBDQ1AgY28tcHJvY2Vzc29yIGhhcmR3YXJlIGlzIGFub3RoZXIgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgSSYjMzk7dmUgbG9va2VkIGF0OgoKMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYDogSnVzdCBkZWZpbml0aW9ucyBhbmQgaGVhZGVycy4gTm8gZXhlY3V0aW9uIHBhdGguCjIuICBgYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY2A6IENQVUlEIGRldGVjdGlvbiBjb2RlOyB0aGF0JiMzOTtzIGZpbmUsIGJ1dCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBDUFUgdG8gKmhhdmUqIFJNUE9QVCwgd2hpY2ggaW4gYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBpdCB3b24mIzM5O3QuCjMuICBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6IGBzZXZfdm1fZGVzdHJveWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gICpvbmx5KiBpZiBpdCYjMzk7cyBhbiBTTlAgZ3Vlc3QgVk0uIEFuIFNOUCBndWVzdCBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuCjQuICBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgOiBGdW5jdGlvbnMgbGlrZSBgc25wX3ByZXBhcmVgLCBgc25wX3NodXRkb3duYCwgYW5kIG90aGVycyBhcmUgZ3VhcmRlZCBieSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgKm9yKiBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgb3IgdGhleSBhcmUgY2FsbGVkIGZyb20gQU1EIElPTU1VIGluaXQsIHdoaWNoIGFsc28gY2hlY2tzIGAhY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBhbHNvIG5lZWRzIGEgcGh5c2ljYWwgQU1EIFplbjMmIzQzOyBDUFUuCjUuICBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2A6IGBfX3Nldl9zbnBfaW5pdF9sb2NrZWRgICppbW1lZGlhdGVseSogY2hlY2tzIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIGJhaWxzIG91dCBpZiBpdCYjMzk7cyBub3QgcHJlc2VudC4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgKm5vbmUqIG9mIHRoaXMgY29kZSBjYW4gZXhlY3V0ZSBiZWNhdXNlIHRoZSBjb3JlIHByZXJlcXVpc2l0ZXMgYXJlIGFic2VudCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBRRU1VIGFuZCBHQ0UgKmV4cGxpY2l0bHkqIGV4cG9zZSBgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmAsIHdoaWNoICpkaXNhYmxlcyogdGhlIG5lY2Vzc2FyeSBBTUQgU05QIGhvc3QgcGxhdGZvcm0gc3VwcG9ydC4KClRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgKipzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqKiBoYXJkd2FyZS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpTbywgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBmb3Igb3VyIHRvb2w6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYGZhbHNlYAoqICAgKipFbmFibGVDb25maWdzOioqIGBudWxsYCBvciBgW11gCiogICAqKkZvY3VzU3ltYm9sczoqKiBgbnVsbGAgb3IgYFtdYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtNb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBSTVBPUFQgYW5kIFNFVi1TTlAgaG9zdCBmdW5jdGlvbmFsaXR5IHJlcXVpcmUgYmFyZS1tZXRhbCBBTUQgcGh5c2ljYWwgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydC4gIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgZXhwbGljaXRseSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgYSBoeXBlcnZpc29yIChgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUmApLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTMuNjY5NTk2ODgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMTkyMzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCAoUk1QIG9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgU0VWLVNOUCBob3N0IGluaXRpYWxpemF0aW9uL3RlYXJkb3duIHBhdGhzLiBBbGwgbW9kaWZpZWQgY29kZSBwYXRocyByZXF1aXJlIEFNRCBTRVYtU05QIGhvc3Qgc3VwcG9ydCAoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBDUFUvZmlybXdhcmUgY2FwYWJpbGl0aWVzIChzdWNoIGFzIFg4Nl9GRUFUVVJFX1JNUE9QVCBhbmQgU2VnbWVudGVkIFJNUCkuIEluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgcHJlc2VudCB3aGljaCBwcmV2ZW50cyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBmcm9tIGJlaW5nIGVuYWJsZWQgKGluIGJzcF9kZXRlcm1pbmVfc25wKCkpLCBtYWtpbmcgYWxsIG1vZGlmaWVkIGxvZ2ljIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIGJhcmUtbWV0YWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBhbmQgUk1QT1BULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTMuNjY5NjAyMDkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU2ODI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjg0N2JhZjQ5YjhmMmI1YzA1NDY3MTBmZDZmNWUyN2ZmNDQxYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2I1YjMyZDMzOTFiNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC03Niw3ICs3Niw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcXHRcXHRcXHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONVxcdFxcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU42XFx0XFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xcbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyKyA3KSAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFxcdFxcdCggMyozMisgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1xcdCggMyozMisgOCkgLyogXFxcImNvbnN0YW50X3RzY1xcXCIgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xcbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFxcdCggMyozMisgOSkgKiBcXFwidXBcXFwiIFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFxcdFxcdFxcdCggMyozMisxMCkgLyogXFxcImFydFxcXCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IDNhOGU1MWEwYzllODguLjE2MzVlMmUxYzU3NmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC03NjEsNiArNzYxLDkgQEBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFxcdDBcXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcXG4gI2RlZmluZSBNU1JfQU1ENjRfUk1QX1NFR01FTlRfU0hJRlQoeClcXHQoKCh4KSBcXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXFx1MDAzZVxcdTAwM2UgOClcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcXHRcXHQweGMwMDEwMTM5XFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXFx0MFxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXFx0XFx0QklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpXFxuIFxcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVxcdFxcdFxcdDB4YzAwMWYwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXFxuIFxcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XFxuIH1cXG4gaW50IHNucF9wcmVwYXJlKHZvaWQpO1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbkBAIC02ODAsNiArNjgyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBucGFnZXMpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3ByZXBhcmUodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5kMTc5NWNlMjE5ZGFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX1BFUkZNT05fVjIsXFx0XFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXFx0XFx0Q1BVSURfRUFYLCAgMSwgMHg4MDAwMDAyMiwgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcXHRDUFVJRF9FQVgsICAyLCAweDgwMDAwMDIyLCAwIH0sXFxuK1xcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFxcdFxcdFxcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFxcdFxcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcXG4gXFx0eyAwLCAwLCAwLCAwLCAwIH1cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTMwMzIsNiArMzAzMiw4IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uYzE2ZjgyNjQyMzkwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC0xMjQsNiArMTI1LDE3IEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcXG4gXFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfb3BfdHlwZSB7XFxuK1xcdFJNUE9QVF9PUF9WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjUsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIE5vIENQVSBtYXkgY29tZSBvbmxpbmUgd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlOyBkaXNhYmxlXFxuK1xcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2MywxNyBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBybXBvcHRfZGlzYWJsZSh2b2lkKVxcbit7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChybXBvcHRfd3EpXFxuK1xcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4ge1xcbkBAIC01NjUsMTEgKzU4MywxNDcgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4gXFx0aWYgKHN5c2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRybXBvcHRfZGlzYWJsZSgpO1xcbitcXG4gXFx0Y2xlYXJfcm1wKCk7XFxuIFxcdG9uX2VhY2hfY3B1KG1mZF9yZWNvbmZpZ3VyZSwgTlVMTCwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUCAoU25wRW4gaXMgY2xlYXIpLCBzbyByZS1lbmFibGUgQ1BVXFxuK1xcdCAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmRcXG4rXFx0ICogbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXFxuK1xcdCAqL1xcbitcXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbiBcXG4rc3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMgcmFuZ2Ugb2ZcXG4rICogbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuXFxuKyAqXFxuKyAqIEBwYSBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzOyBSTVBPUFQgb3BlcmF0ZXMgb24gdGhlIGNvbnRhaW5pbmcgMUdCLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSlcXG4re1xcbitcXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXG4rXFx0LyogU3VwcG9ydGVkIGJ5IGJpbnV0aWxzIDIuNDgrICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1xcXCJcXG4rXFx0XFx0ICAgICA6OiBcXFwiYVxcXCIgKHBhX3N0YXJ0KSwgXFxcImNcXFwiIChvcClcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rfVxcbitcXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NjYW5fcmFuZ2Uodm9pZCAqYXJnKVxcbit7XFxuK1xcdHU2NCBwYTtcXG4rXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdHJtcG9wdChwYSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX3JtcG9wdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXYXJtIHVwIHRoZSBSTVBPUFQgY2FjaGUgb24gdGhpcyBwaW5uZWQgcGVyLUNQVSB3b3JrZXIgd2l0aCBpbnRlcnJ1cHRzXFxuK1xcdCAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuXFxuK1xcdCAqL1xcbitcXHRybXBvcHRfc2Nhbl9yYW5nZShOVUxMKTtcXG4rXFxuK1xcdG9uX2VhY2hfY3B1X21hc2soY3B1X3ByaW1hcnlfdGhyZWFkX21hc2ssIHJtcG9wdF9zY2FuX3JhbmdlLCBOVUxMLCB0cnVlKTtcXG4rfVxcbitcXG4rLypcXG4rICogRGVsYXksIGluIG1pbGxpc2Vjb25kcywgYmVmb3JlIHRoZSBSTVAgcmUtb3B0aW1pemF0aW9uIHBhc3MgcnVucyBhZnRlciBhbiBTTlBcXG4rICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzXFxuKyAqIGEgYnVyc3Qgb2YgdGVhcmRvd25zIGludG8gYSBzaW5nbGUgc2NhbiBhbmQgZ2l2ZXMgZWFjaCBndWVzdCdzIHBhZ2VzIHRpbWUgdG9cXG4rICogYmUgY29udmVydGVkIGJhY2sgdG8gdGhlIHNoYXJlZCwgaHlwZXJ2aXNvci1vd25lZCBzdGF0ZS4gIFRoZSAxMCBzZWNvbmQgdmFsdWVcXG4rICogaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0IHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxcbisgKi9cXG4rI2RlZmluZSBSTVBPUFRfV09SS19USU1FT1VUXFx0KDEwICogTVNFQ19QRVJfU0VDKVxcbitcXG4rLypcXG4rICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW5cXG4rICogaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXIgc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWRcXG4rICogdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG8gc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlXFxuKyAqIGd1ZXN0IHdob3NlIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXFxuKyAqIHRlYXJkb3duJ3Mgc2Nhbi5cXG4rICovXFxuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxcbit7XFxuK1xcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFybXBvcHRfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayxcXG4rXFx0XFx0XFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3JtcG9wdF9hbGxfcGh5c21lbSwgXFxcImt2bS1hbWRcXFwiKTtcXG4rXFxuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxcbit7XFxuK1xcdHU2NCBybXBvcHRfYmFzZTtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIG9uY2U6IHRoZSB3b3JrcXVldWUgYW5kIFJNUE9QVF9CQVNFIE1TUnMgYXJlIGxlZnQgaW4gcGxhY2Ugb25cXG4rXFx0ICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvblxcbitcXHQgKiBwYXNzIHJhdGhlciB0aGFuIHJlZG9pbmcgdGhlIHNldHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIGEgZGVkaWNhdGVkIHBlci1DUFUgd29ya3F1ZXVlIHNvIHRoZSBwb3RlbnRpYWxseSBsZW5ndGh5IHdhcm0tdXBcXG4rXFx0ICogc2NhbiBkb2VzIG5vdCB0aWUgdXAgYSBzaGFyZWQgd29ya3F1ZXVlIHdvcmtlci5cXG4rXFx0ICovXFxuK1xcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwicm1wb3B0X3dxXFxcIiwgV1FfUEVSQ1BVLCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIGRvX3JtcG9wdF93b3JrKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7XFxuK1xcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xcbitcXHQgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxcbitcXHRcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XFxuK1xcbitcXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcXG4rXFxuK1xcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXFx1MDAzZSBTWl8yVClcXG4rXFx0XFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCArIFNaXzJUO1xcbitcXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiUk1QT1BUIG9wdGltaXphdGlvbnMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcXFwiY2NwXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXFxuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXFxuQEAgLTU3Nyw2ICs3MzEsOCBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXFxcImNjcFxcXCIpO1xcbiAgKi9cXG4gaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIFxcbkBAIC01ODYsNiArNzQyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4gXFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xcbitcXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcXG4rXFx0ICogZGlzYWJsaW5nIENQVSBob3RwbHVnLCBzbyBkaXNhYmxlIGl0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbitcXHRcXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICd0cnVlJyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWNcXG4gXFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxcbkBAIC02ODMsMTMgKzg0OCwyMSBAQCBzdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxcbiBcXG4gYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxcbiB7XFxuLVxcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKVxcbitcXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xcbiBcXHRcXHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xcbiBcXG4tXFx0aWYgKHJtcF9jZmcgXFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxcbi1cXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XFxuK1xcdFxcdGlmIChybXBfY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcXG4rXFx0XFx0XFx0cmV0dXJuIHByb2JlX3NlZ21lbnRlZF9ybXB0YWJsZV9pbmZvKCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXFxuK1xcdCAqIGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS4gIFJNUE9QVCBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXRcXG4rXFx0ICogc2VnbWVudGVkIFJNUC5cXG4rXFx0ICovXFxuK1xcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfUk1QT1BUKTtcXG4rXFxuK1xcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5pbmRleCBmODMzY2I3ZTRkYTM2Li4yODdhODM0NTg1NGJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXFxuQEAgLTE2NjMsNiArMTY2Myw4IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuIFxcbiBcXHRzZXZfZXNfdG1yX3NpemUgPSBTTlBfVE1SX1NJWkU7XFxuIFxcbitcXHRzbnBfc2V0dXBfcm1wb3B0KCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTI6NTQuMTg1OTE3MTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MzUwMjg5NjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgKFJNUCBvcHRpbWl6YXRpb24pIGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIFNFVi1TTlAgaG9zdCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBwYXRocy4gQWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgcmVxdWlyZSBBTUQgU0VWLVNOUCBob3N0IHN1cHBvcnQgKENDX0FUVFJfSE9TVF9TRVZfU05QKSBhbmQgaGFyZHdhcmUtc3BlY2lmaWMgQ1BVL2Zpcm13YXJlIGNhcGFiaWxpdGllcyAoc3VjaCBhcyBYODZfRkVBVFVSRV9STVBPUFQgYW5kIFNlZ21lbnRlZCBSTVApLiBJbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBYODZfRkVBVFVSRV9IWVBFUlZJU09SIGlzIHByZXNlbnQgd2hpY2ggcHJldmVudHMgQ0NfQVRUUl9IT1NUX1NFVl9TTlAgZnJvbSBiZWluZyBlbmFibGVkIChpbiBic3BfZGV0ZXJtaW5lX3NucCgpKSwgbWFraW5nIGFsbCBtb2RpZmllZCBsb2dpYyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aG91dCBwaHlzaWNhbCBiYXJlLW1ldGFsIEFNRCBoYXJkd2FyZSBzdXBwb3J0aW5nIFNFVi1TTlAgYW5kIFJNUE9QVC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTI4NDdiYWY0OWI4ZjJiNWMwNTQ2NzEwZmQ2ZjVlMjdmZjQ0MWJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjUyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLjNiNWIzMmQzMzkxYjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyArNzYsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzhcdFx0XHQoIDMqMzIrIDQpIC8qIE9wdGVyb24sIEF0aGxvbjY0ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9aRU41XHRcdCggMyozMisgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyKyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuLS8qIEZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDMqMzIrIDcpICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyKyA3KSAvKiBTdXBwb3J0IGZvciBBTUQgUk1QT1BUIGluc3RydWN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcdCggMyozMisgOCkgLyogXCJjb25zdGFudF90c2NcIiBUU0MgdGlja3MgYXQgYSBjb25zdGFudCByYXRlICovXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcdCggMyozMisgOSkgKiBcInVwXCIgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcdFx0XHQoIDMqMzIrMTApIC8qIFwiYXJ0XCIgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAzYThlNTFhMGM5ZTg4Li4xNjM1ZTJlMWM1NzZhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtNzYxLDYgKzc2MSw5IEBAXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVFx0MFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFx0QklUX1VMTChNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEX0JJVClcbiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KVx0KCgoeCkgXHUwMDI2IEdFTk1BU0tfVUxMKDEzLCA4KSkgXHUwMDNlXHUwMDNlIDgpXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUXHQwXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVx0XHRCSVRfVUxMKE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVClcbiBcbiAjZGVmaW5lIE1TUl9TVlNNX0NBQVx0XHRcdDB4YzAwMWYwMDBcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA5ZTdhMDc3YzQ0NWRjLi4zMjM1ZTE3MTY0N2RkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNjYyLDYgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xuK3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKTtcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuQEAgLTY4MCw2ICs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkge31cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uZDE3OTVjZTIxOWRhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUk1QT1BULFx0XHRcdENQVUlEX0VEWCwgIDAsIDB4ODAwMDAwMjUsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcdFx0Q1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LFxuIFx0eyAwLCAwLCAwLCAwLCAwIH1cbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5kOGU2YjhhMDhiNzlmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTMwMzIsNiArMzAzMiw4IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbitcbitcdFx0c25wX3JtcG9wdF9hbGxfcGh5c21lbSgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LVx1MDAzZWhhbmRsZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uYzE2ZjgyNjQyMzkwMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYW1kLWlvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3NwZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgKzEyNSwxNyBAQCBzdGF0aWMgdm9pZCAqcm1wX2Jvb2trZWVwaW5nIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgdTY0IHByb2JlZF9ybXBfYmFzZSwgcHJvYmVkX3JtcF9zaXplO1xuIFxuK3N0YXRpYyB1NjQgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X29wX3R5cGUge1xuK1x0Uk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9PUF9SRVBPUlRfU1RBVFVTXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyNSw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1MzcsMTggQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogTm8gQ1BVIG1heSBjb21lIG9ubGluZSB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmU7IGRpc2FibGVcbitcdCAqIGhvdHBsdWcgaGVyZSBhbmQgcmUtZW5hYmxlIGl0IGluIHNucF9zaHV0ZG93bigpLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjMsMTcgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHJtcG9wdF9kaXNhYmxlKHZvaWQpXG4re1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJtcG9wdF93cSlcbitcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgKzU4MywxNDcgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRybXBvcHRfZGlzYWJsZSgpO1xuK1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QIChTbnBFbiBpcyBjbGVhciksIHNvIHJlLWVuYWJsZSBDUFVcbitcdCAqIGhvdHBsdWcuICBBIGxlZ2FjeSBTTlAgc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmRcbitcdCAqIGxlYXZlcyBob3RwbHVnIGRpc2FibGVkLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuIFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuK31cbitcbisvKlxuKyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpcyByYW5nZSBvZlxuKyAqIG1lbW9yeSBkb2VzIG5vdCBjb250YWluIGFueSBTTlAgZ3Vlc3QgbWVtb3J5LlxuKyAqXG4rICogQHBhIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3M7IFJNUE9QVCBvcGVyYXRlcyBvbiB0aGUgY29udGFpbmluZyAxR0IuXG4rICovXG4rc3RhdGljIHZvaWQgcm1wb3B0KHU2NCBwYSlcbit7XG4rXHRlbnVtIHJtcG9wdF9vcF90eXBlIG9wID0gUk1QT1BUX09QX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcbitcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcbitcbitcdC8qIFN1cHBvcnRlZCBieSBiaW51dGlscyAyLjQ4KyAqL1xuK1x0YXNtIHZvbGF0aWxlKFwiLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY1wiXG4rXHRcdCAgICAgOjogXCJhXCIgKHBhX3N0YXJ0KSwgXCJjXCIgKG9wKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcbit9XG4rXG4rLyogb25fZWFjaF9jcHUoKSBjYWxsYmFjazogb3B0aW1pemUgdGhlIHdob2xlIFJNUE9QVCByYW5nZSBvbiB0aGlzIENQVS4gKi9cbitzdGF0aWMgdm9pZCBybXBvcHRfc2Nhbl9yYW5nZSh2b2lkICphcmcpXG4re1xuK1x0dTY0IHBhO1xuK1xuK1x0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICs9IFNaXzFHKVxuK1x0XHRybXBvcHQocGEpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkb19ybXBvcHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0LypcbitcdCAqIFdhcm0gdXAgdGhlIFJNUE9QVCBjYWNoZSBvbiB0aGlzIHBpbm5lZCBwZXItQ1BVIHdvcmtlciB3aXRoIGludGVycnVwdHNcbitcdCAqIG9uLCBzbyB0aGUgSVJRLWRpc2FibGVkIGZhbi1vdXQgYmVsb3cgb25seSBpc3N1ZXMgY2FjaGUtaGl0IFJNUE9QVHMuXG4rXHQgKi9cbitcdHJtcG9wdF9zY2FuX3JhbmdlKE5VTEwpO1xuK1xuK1x0b25fZWFjaF9jcHVfbWFzayhjcHVfcHJpbWFyeV90aHJlYWRfbWFzaywgcm1wb3B0X3NjYW5fcmFuZ2UsIE5VTEwsIHRydWUpO1xuK31cbitcbisvKlxuKyAqIERlbGF5LCBpbiBtaWxsaXNlY29uZHMsIGJlZm9yZSB0aGUgUk1QIHJlLW9wdGltaXphdGlvbiBwYXNzIHJ1bnMgYWZ0ZXIgYW4gU05QXG4rICogZ3Vlc3QgaXMgdG9ybiBkb3duLCBwYXNzZWQgYXMgdGhlIGRlbGF5IHRvIG1vZF9kZWxheWVkX3dvcmsoKS4gIFRoaXMgY29hbGVzY2VzXG4rICogYSBidXJzdCBvZiB0ZWFyZG93bnMgaW50byBhIHNpbmdsZSBzY2FuIGFuZCBnaXZlcyBlYWNoIGd1ZXN0J3MgcGFnZXMgdGltZSB0b1xuKyAqIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZSBzaGFyZWQsIGh5cGVydmlzb3Itb3duZWQgc3RhdGUuICBUaGUgMTAgc2Vjb25kIHZhbHVlXG4rICogaXMgYSBoZXVyaXN0aWMgdHJhZGluZyByZS1vcHRpbWl6YXRpb24gbGF0ZW5jeSBhZ2FpbnN0IHNjYW5uaW5nIHRvbyBlYWdlcmx5LlxuKyAqL1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0KDEwICogTVNFQ19QRVJfU0VDKVxuK1xuKy8qXG4rICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmcgZ3Vlc3RzLiAgVGhlIHNjYW5cbisgKiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlciBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZFxuKyAqIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZVxuKyAqIGd1ZXN0IHdob3NlIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4rICogdGVhcmRvd24ncyBzY2FuLlxuKyAqL1xuK3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuK3tcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bW9kX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXG4rXHRcdFx0IG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFwia3ZtLWFtZFwiKTtcbitcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcbit7XG4rXHR1NjQgcm1wb3B0X2Jhc2U7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZXQgdXAgb25jZTogdGhlIHdvcmtxdWV1ZSBhbmQgUk1QT1BUX0JBU0UgTVNScyBhcmUgbGVmdCBpbiBwbGFjZSBvblxuK1x0ICogc2h1dGRvd24sIHNvIGEgbGF0ZXIgcmUtaW5pdGlhbGl6YXRpb24ganVzdCByZS1xdWV1ZXMgdGhlIG9wdGltaXphdGlvblxuK1x0ICogcGFzcyByYXRoZXIgdGhhbiByZWRvaW5nIHRoZSBzZXR1cC5cbitcdCAqL1xuK1x0aWYgKHJtcG9wdF93cSkge1xuK1x0XHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFVzZSBhIGRlZGljYXRlZCBwZXItQ1BVIHdvcmtxdWV1ZSBzbyB0aGUgcG90ZW50aWFsbHkgbGVuZ3RoeSB3YXJtLXVwXG4rXHQgKiBzY2FuIGRvZXMgbm90IHRpZSB1cCBhIHNoYXJlZCB3b3JrcXVldWUgd29ya2VyLlxuK1x0ICovXG4rXHRybXBvcHRfd3EgPSBhbGxvY193b3JrcXVldWUoXCJybXBvcHRfd3FcIiwgV1FfUEVSQ1BVLCAxKTtcbitcdGlmICghcm1wb3B0X3dxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCBkb19ybXBvcHRfd29yayk7XG4rXG4rXHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuK1x0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcbitcbitcdC8qXG4rXHQgKiBQZXItQ1BVIFJNUE9QVCB0YWJsZXMgY292ZXIgYXQgbW9zdCAyIFRCLiAgUHJvZ3JhbSBlYWNoIGNvcmUnc1xuK1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2NwdShjcHUsIGNwdV9wcmltYXJ5X3RocmVhZF9tYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4rXG4rXHRybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTtcbitcbitcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKVxuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcbitcbitcdHByX2luZm8oXCJSTVBPUFQgb3B0aW1pemF0aW9ucyBlbmFibGVkXFxuXCIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFwiY2NwXCIpO1xuK1xuIC8qXG4gICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhc1xuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXG5AQCAtNTc3LDYgKzczMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiAgKi9cbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4ge1xuK1x0dTY0IHZhbDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiArNzQyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiBcdGlmICghc2V0dXBfcm1wdGFibGUoKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG4rXHQvKlxuK1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4rXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbitcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuK1x0ICovXG4rXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcbitcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuK1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4rXG4gXHQvKlxuIFx0ICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAndHJ1ZScgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjgzLDEzICs4NDgsMjEgQEAgc3RhdGljIGJvb2wgcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8odm9pZClcbiBcbiBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG4ge1xuLVx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXG4rXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSkge1xuIFx0XHRyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpO1xuIFxuLVx0aWYgKHJtcF9jZmcgXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXG4tXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4rXHRcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuK1x0XHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFNlZ21lbnRlZCBSTVAgaXMgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtIG9yIGlzXG4rXHQgKiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuICBSTVBPUFQgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0XG4rXHQgKiBzZWdtZW50ZWQgUk1QLlxuK1x0ICovXG4rXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4rXG4rXHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGY4MzNjYjdlNGRhMzYuLjI4N2E4MzQ1ODU0YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTY2Myw2ICsxNjYzLDggQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcbiBcdHNldl9lc190bXJfc2l6ZSA9IFNOUF9UTVJfU0laRTtcbiBcbitcdHNucF9zZXR1cF9ybXBvcHQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUyOjU0LjE4NTkxODMyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNTgwMjYwMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3MgYnJlYWsgaXQgZG93biBhbmQgc2VlLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgc3RhbmRhcmQgdHJpYWdlIHRhc2ssIGp1c3QgYSBkZXZlbG9wZXIgUUEgYW5kIHRyaWFnZSBvZiBhIHBhdGNoIHNlcmllcy5cblxuRmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYWRkaXRpb24gb2YgUk1QT1BUIHN1cHBvcnQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gQU1EJ3Mgc2VjdXJlIG1lbW9yeSBlbmNyeXB0aW9uIHRlY2hub2xvZ3ksIFNFVi1TTlAuIEhlcmUncyB3aGF0IGp1bXBzIG91dDpcblxuKiAgICoqSGVhZGVyIEZpbGVzOioqIFdlJ3JlIGludHJvZHVjaW5nIG5ldyBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBpbiBgY3B1ZmVhdHVyZXMuaGAsIGBtc3ItaW5kZXguaGAsIGFuZCBgc2V2LmhgLiBUaGlzIHN1Z2dlc3RzIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBjb250cm9sbGVkLlxuKiAgICoqQ1BVIEZlYXR1cmUgRGV0ZWN0aW9uOioqIENoYW5nZXMgaW4gYHNjYXR0ZXJlZC5jYCBpbmRpY2F0ZSB0aGUgYWRkaXRpb24gb2YgYSBDUFVJRCBiaXQgZm9yIFJNUE9QVC4gVGhpcyBpcyBjbGFzc2ljOyB3ZSdyZSBjaGVja2luZyBmb3IgaGFyZHdhcmUgc3VwcG9ydC5cbiogICAqKktWTSBJbnRlZ3JhdGlvbjoqKiBUaGUgYGt2bS9zdm0vc2V2LmNgIGZpbGVzIGFyZSB3aGVyZSB0aGUgYWN0aW9uIHJlYWxseSBzZWVtcyB0byBiZS4gV2UndmUgZ290IGBzZXZfdm1fZGVzdHJveSgpYCBjYWxsaW5nIGBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKClgLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHdpdGhpbiBgc25wX3ByZXBhcmUoKWAgYW5kIGBzbnBfc2h1dGRvd24oKWAgaW52b2x2aW5nIGhvdHBsdWcgZGlzYWJsZS9lbmFibGUuIFRoZXJlJ3MgYSBsb3Qgb2YgZnVuY3Rpb24gYWN0aXZpdHkgaGVyZTogYHJtcG9wdF9jYXBhYmxlKClgLCBgcm1wb3B0KClgLCBgcm1wb3B0X3NjYW5fcmFuZ2UoKWAsIGV0Yy4gV2UncmUgY2xlYXJseSBzZXR0aW5nIHVwLCBlbmFibGluZywgYW5kIG1hbmFnaW5nIHRoZSBSTVBPUFQgZmVhdHVyZSB3aXRoaW4gdGhlIEtWTS9TRVYtU05QIGNvbnRleHQuIEFsc28gd2l0aGluIGBzbnBfcm1wdGFibGVfaW5pdCgpYCB0aGVyZSBhcmUgY2hhbmdlcyB0byBlbmFibGUgdmlhIFNZU0NGRyBhbmQgY2FsbHMgdG8gYGNwdV9ob3RwbHVnX2Rpc2FibGUoKWAuIEFuZCBmaW5hbGx5LCBpbiBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgdGhlIGBYODZfRkVBVFVSRV9STVBPUFRgIHdpbGwgYmUgY2xlYXJlZCBpZiBub3Qgc2VnbWVudGVkIFJNUC5cbiogICAqKkNyeXB0byBEcml2ZXIgSW52b2x2ZW1lbnQ6KiogVGhlIGBjY3Avc2V2LWRldi5jYCBmaWxlIGlzIGNhbGxpbmcgYHNucF9zZXR1cF9ybXBvcHQoKWAgd2l0aGluIGl0cyBpbml0aWFsaXphdGlvbi4gVGhpcyBzaG93cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjcnlwdG8gbGF5ZXIsIHdoaWNoIGlzIHJlbGV2YW50IGFzIG1lbW9yeSBlbmNyeXB0aW9uIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgU0VWLVNOUC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgc2hvdWxkIGRvIHNvbWUgYGdyZXBgIHdvcmsgb3IgdXNlIGNvZGVzZWFyY2ggdG8gc2VlIHdoZXJlIENDUCwgU0VWLVNOUCwgYW5kIEtWTSBTRVYgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IGdldCBleGVjdXRlZCBpbiByZWxhdGlvbiB0byB0aGVzZSBjaGFuZ2VzLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgZnV6emluZy4gRG9lcyB0aGlzIGludGVyYWN0IHdpdGggdXNlcnNwYWNlIGF0IGFsbD8gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEFyZSB0aGVyZSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZXhwb3NlZCBpbnRlcmZhY2VzPyBJZiBpdCdzIGFsbCBpbnRlcm5hbCBLVk0gc3R1ZmYsIHRoZW4gaXQgbWlnaHQgYmUgaGFyZGVyIHRvIGZ1enogZWZmZWN0aXZlbHkuIElmIHRoZXJlIGFyZSBuZXcgaW50ZXJmYWNlcyBvciB1c2VyLWZhY2luZyBwYXJ0cywgaXQncyB2ZXJ5IHByb21pc2luZyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjA3Ljc2NjE4MTc3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0MDI0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNucF9ybXB0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY1MD1ib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY1MTppbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjUyLWludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTY2OT1zdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NzA6c3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY3MS1zdGF0aWMgaW5saW5lIGludCBzbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIGJvb2wgKmFzc2lnbmVkLCBpbnQgKmxldmVsKSB7IHJldHVybiAtRU5PREVWOyB9XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz03MjU9RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2V0dXBfcm1wb3B0LCBcXFwiY2NwXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzEtICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6NzMyOmludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy03MzMte1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTMzOTU9c3RhdGljIF9faW5pdCB2b2lkIGlvbW11X3NucF9lbmFibGUodm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNDMyLVxcdCAqL1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNDMzOlxcdGlmIChzbnBfcm1wdGFibGVfaW5pdCgpKSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0MzQtXFx0XFx0cHJfd2FybihcXFwiU05QOiBSTVAgaW5pdGlhbGl6YXRpb24gZmFpbGVkLCBTTlAgY2Fubm90IGJlIHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzowOS43NzAyMTA4ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDEwMzUxOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgU0VWLVNOUCBIb3N0IFN1cHBvcnQgaW4gVmlydHVhbGl6ZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU0VWLVNOUCBob3N0IHN1cHBvcnQsIHJpZ2h0PyBUaGF0IG1lYW5zIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFplbiAzKyBvciBaZW4gNS82IHdpdGggdGhlIFJNUE9QVCBpbnN0cnVjdGlvbiwgQU1EIElPTU1VLCBDQ1AgaGFyZHdhcmUuLi4gYW5kIHByb2JhYmx5IG90aGVyIHRoaW5ncy4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIEkgKmFjdHVhbGx5KiB0ZXN0IHRoaXMgc3R1ZmYgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0U/IFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzdHVmZiwgY29uc2lkZXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgSSdtIHVzaW5nLiBUaGUgY29yZSBwcmluY2lwbGUgaXMgdGhhdCBpZiB0aGUgY29kZSdzIG5vdCByZWFjaGFibGUgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgSSBzaG91bGRuJ3QgYm90aGVyIGZ1enppbmcgaXQuIEknbSB0aGlua2luZyBhYm91dCB0aG9zZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgY29tcG9uZW50cyDigJMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMgdGhhdCByZWx5IG9uIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhpbmdzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgZWZmZWN0aXZlbHkuIEFsc28sIHRob3NlIGV4ZWN1dGlvbiBwYXRocyB0aGF0IEkgY2FuJ3QgdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIHNldHVwIC0gZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1Zywgb3IgY29kZSBzcGVjaWZpYyB0byBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIG5vdCByZWxldmFudCB0byBteSBmdXp6aW5nIHRhcmdldC5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogKmlzKiBBTUQgU0VWIGhvc3Qgc3VwcG9ydCByZWFjaGFibGUgaW4gUUVNVSBvciBHQ0U/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGZpcnN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBLVk0gU0VWIG9yIENDUCBvciBTRVYgZ3Vlc3QgdnMgU0VWIGhvc3QgbWF0dGVycyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYCBhbmQgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgdHJ1bHkgcmVxdWlyZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhvc2UgY3JpdGVyaWEgYW5kIGNoZWNrIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIHNheSBhYm91dCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzoxOC43ODA1NjQ1NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTgwNDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDQ19BVFRSX0hPU1RfU0VWX1NOUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9jb2NvL2NvcmUuYz03MD1zdGF0aWMgYm9vbCBub2luc3RyIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xMDMtXFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTA0OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTA1LVxcdFxcdHJldHVybiBjY19mbGFncy5ob3N0X3Nldl9zbnA7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYz0xNzA9c3RhdGljIHZvaWQgYW1kX2NjX3BsYXRmb3JtX2NsZWFyKGVudW0gY2NfYXR0ciBhdHRyKVxcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTcyLVxcdHN3aXRjaCAoYXR0cikge1xcbmFyY2gveDg2L2NvY28vY29yZS5jOjE3MzpcXHRjYXNlIENDX0FUVFJfSE9TVF9TRVZfU05QOlxcbmFyY2gveDg2L2NvY28vY29yZS5jLTE3NC1cXHRcXHRjY19mbGFncy5ob3N0X3Nldl9zbnAgPSAwO1xcbi0tXFxuYXJjaC94ODYvY29jby9jb3JlLmM9MTkyPXN0YXRpYyB2b2lkIGFtZF9jY19wbGF0Zm9ybV9zZXQoZW51bSBjY19hdHRyIGF0dHIpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL2NvcmUuYy0xOTQtXFx0c3dpdGNoIChhdHRyKSB7XFxuYXJjaC94ODYvY29jby9jb3JlLmM6MTk1OlxcdGNhc2UgQ0NfQVRUUl9IT1NUX1NFVl9TTlA6XFxuYXJjaC94ODYvY29jby9jb3JlLmMtMTk2LVxcdFxcdGNjX2ZsYWdzLmhvc3Rfc2V2X3NucCA9IDE7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTM1Nj1zdGF0aWMgdm9pZCBic3BfZGV0ZXJtaW5lX3NucChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3My1cXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc0OlxcdFxcdFxcdGNjX3BsYXRmb3JtX3NldChDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzUtXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3Ni1cXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6Mzc3OlxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTM3OC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jOjExMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jLTExMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMjU3PXN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgwLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyODE6XFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjgyLVxcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTEyNTk9c3RhdGljIHZvaWQgKnNldl9kYmdfY3J5cHRfc2xvd19hbGxvYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBfX3ZhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMjkzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTI5NDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyOTUtXFx0XFx0cmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xMzAwPXN0YXRpYyB2b2lkIHNldl9kYmdfY3J5cHRfc2xvd19mcmVlKHZvaWQgKmJ1ZilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDEte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTMwMjpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEzMDMtXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODg9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFx0c2V2X2VzX3N1cHBvcnRlZCA9IHRydWU7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMTkzOlxcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTk0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTg3PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5MS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5OTI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5My1cXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTIwNT12b2lkIHNldl9nbWVtX21ha2Vfc2hhcmVkKGt2bV9wZm5fdCBwZm4sIGt2bV9wZm5fdCBucl9wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIwOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUyMDk6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTIxMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jPTEwMj12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9zZXR1cF9hcmNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jOjExMTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdC5jLTExMi1cXHRcXHRzbnBfZml4dXBfZTgyMF90YWJsZXMoKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL2NtZGxpbmUuYz0xOT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nldl9jb25maWcoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jLTMxLVxcdFxcdFxcdFxcdHNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU0VWX1NOUCk7XFxuYXJjaC94ODYvdmlydC9zdm0vY21kbGluZS5jOjMyOlxcdFxcdFxcdFxcdGNjX3BsYXRmb3JtX2NsZWFyKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9jbWRsaW5lLmMtMzMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0xNDc9c3RhdGljIHZvaWQgbWZkX3JlY29uZmlndXJlKHZvaWQgKmFyZylcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xNDgte1xcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjE0OTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTE1OD1zdGF0aWMgdm9pZCBzbnBfZW5hYmxlKHZvaWQgKmFyZylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxNjI6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTE2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYz0yNjA9c3RhdGljIHZvaWQgY2xlYXJfcm1wKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjQtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MjY1OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NjAwPXN0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MDItXFx0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjYwMzpcXHQgICAgICAgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy02MDQtfVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9NzMyPWludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTczNS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo3MzY6XFx0aWYgKFdBUk5fT05fT05DRSghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtNzM3LVxcdFxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9OTQxPXN0YXRpYyBpbnQgX19zbnBfbG9va3VwX3JtcGVudHJ5KHU2NCBwZm4sIHN0cnVjdCBybXBlbnRyeSAqZSwgaW50ICpsZXZlbClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk0NS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzo5NDY6XFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTk0Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEwNjc9aW50IHBzbWFzaCh1NjQgcGZuKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTA3MS1cXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYzoxMDcyOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMDczLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM9MTE3Nj1zdGF0aWMgaW50IHJtcHVwZGF0ZSh1NjQgcGZuLCBzdHJ1Y3Qgcm1wX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTExODAtXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTE4MTpcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtMTE4Mi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTEyNjk9dm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZClcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jLTEyNzQtXFx0ICovXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmM6MTI3NTpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYy0xMjc2LVxcdFxcdHdiaW52ZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0xNTA4PXN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTYtXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNTE3OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE1MTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIwNjc9c3RhdGljIGludCBzZXZfZ2V0X2FwaV92ZXJzaW9uKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTIwNzYtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyMDc3OlxcdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSB7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yMDc4LVxcdFxcdHJldCA9IHNucF9nZXRfcGxhdGZvcm1fZGF0YShzZXYsIFxcdTAwMjZlcnJvcik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTI5Nzc9dTY0IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODItXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyOTgzOlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI5ODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzM5NT1zdGF0aWMgX19pbml0IHZvaWQgaW9tbXVfc25wX2VuYWJsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMzOTctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMzk4OlxcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzM5OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzQ0MS1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzQ0MjpcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM0NDMtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzU2Nz1zdGF0aWMgaW50IF9faW5pdCBpb21tdV9nb190b19zdGF0ZShlbnVtIGlvbW11X2luaXRfc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4Ny1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU4ODpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzU4OS1cXHQgICAgIVdBUk5fT05fT05DRShhbWRfaW9tbXVfc25wX2VuKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzU5MDpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM1OTEtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MzY5ND12b2lkIF9faW5pdCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzcxMy1kaXNhYmxlX3NucDpcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNDpcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzcxNTpcXHRcXHRjY19wbGF0Zm9ybV9jbGVhcihDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3MTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oPTIyPWVudW0gY2NfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTItXFx0LyoqXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oOjkzOlxcdCAqIEBDQ19BVFRSX0hPU1RfU0VWX1NOUDogQU1EIFNOUCBlbmFibGVkIG9uIHRoZSBob3N0LlxcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaC05NC1cXHQgKlxcbi0tXFxuaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oLTk3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvY2NfcGxhdGZvcm0uaDo5ODpcXHRDQ19BVFRSX0hPU1RfU0VWX1NOUCxcXG5pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgtOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjIwLjU1NjM3MzgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTQ5MTY4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgU05QIEJlaGF2aW9yKipcblxuT2theSwgc28gSSBzdXNwZWN0IHNvbWV0aGluZydzIHVwIHdpdGggaG93IHdlJ3JlIGhhbmRsaW5nIFNOUHMsIGFuZCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIEFNRCBhcmNoaXRlY3R1cmUuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgemVybyBpbiBvbiB0aGUgYGJzcF9kZXRlcm1pbmVfc25wYCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgYWx3YXlzIGEga2V5IHBvaW50IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBiZWhhdmlvciwgYW5kIHNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGl0IHJlc2lkZXMgaW4gdGhlIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgYmVjYXVzZSB0aGF0IEFNRC1zcGVjaWZpYyBmaWxlIGlzIHRoZSByaWdodCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBmb3IgaW52ZXN0aWdhdGluZyBDUFUtc3BlY2lmaWMgaWRpb3N5bmNyYWNpZXMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjI0LjMxMTI5NDAyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0I2lmZGVmIENPTkZJR19BUkNIX0hBU19DQ19QTEFURk9STVxcbiAzNTk6XFx0XFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0FNRDtcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0aWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU0VWX1NOUCkpIHtcXG4gMzYyOlxcdFxcdFxcdC8qXFxuIDM2MzpcXHRcXHRcXHQgKiBSTVAgdGFibGUgZW50cnkgZm9ybWF0IGlzIG5vdCBhcmNoaXRlY3R1cmFsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZVxcbiAzNjQ6XFx0XFx0XFx0ICogcGVyLXByb2Nlc3NvciBQUFIuIFJlc3RyaWN0IFNOUCBzdXBwb3J0IG9uIHRoZSBrbm93biBDUFUgbW9kZWxzXFxuIDM2NTpcXHRcXHRcXHQgKiBmb3Igd2hpY2ggdGhlIFJNUCB0YWJsZSBlbnRyeSBmb3JtYXQgaXMgY3VycmVudGx5IGRlZmluZWQgb3IgZm9yXFxuIDM2NjpcXHRcXHRcXHQgKiBwcm9jZXNzb3JzIHdoaWNoIHN1cHBvcnQgdGhlIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkIFJNUFJFQURcXG4gMzY3OlxcdFxcdFxcdCAqIGluc3RydWN0aW9uLlxcbiAzNjg6XFx0XFx0XFx0ICovXFxuIDM2OTpcXHRcXHRcXHRpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUikgXFx1MDAyNlxcdTAwMjZcXG4gMzcwOlxcdFxcdFxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9aRU4zKSB8fFxcbiAzNzE6XFx0XFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1pFTjQpIHx8XFxuIDM3MjpcXHRcXHRcXHQgICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QUkVBRCkpIFxcdTAwMjZcXHUwMDI2XFxuIDM3MzpcXHRcXHRcXHQgICAgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKSkge1xcbiAzNzQ6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4gMzc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDM3NjpcXHRcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1NFVl9TTlApO1xcbiAzNzc6XFx0XFx0XFx0XFx0Y2NfcGxhdGZvcm1fY2xlYXIoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xcbiAzNzg6XFx0XFx0XFx0fVxcbiAzNzk6XFx0XFx0fVxcbiAzODA6XFx0I2VuZGlmXFxuIDM4MTpcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdCNkZWZpbmUgWkVOX01PREVMX1NURVBfVUNPREUoZmFtLCBtb2RlbCwgc3RlcCwgdWNvZGUpIFxcXFxcXG4gMzg0OlxcdFxcdFg4Nl9NQVRDSF9WRk1fU1RFUFMoVkZNX01BS0UoWDg2X1ZFTkRPUl9BTUQsIGZhbSwgbW9kZWwpLCBcXFxcXFxuIDM4NTpcXHRcXHRcXHRcXHQgICAgc3RlcCwgc3RlcCwgdWNvZGUpXFxuIDM4NjpcXHRcXG4gMzg3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCBhbWRfdHNhX21pY3JvY29kZVtdID0ge1xcbiAzODg6XFx0XFx0WkVOX01PREVMX1NURVBfVUNPREUoMHgxOSwgMHgwMSwgMHgxLCAweDBhMDAxMWQ3KSxcXG4gMzg5OlxcdFxcdFpFTl9NT0RFTF9TVEVQX1VDT0RFKDB4MTksIDB4MDEsIDB4MiwgMHgwYTAwMTIzYiksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjI0LjMxMTM5MzA1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MDk2MzYyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gYW5kIFJNUE9QVCBDYXBhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGxpbmVzIDM2OS0zNzAgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBjaGVjayBgaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpIC4uLilgISBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBmb3IgcnVubmluZyB1bmRlciBhIGh5cGVydmlzb3IgbGlrZSBRRU1VIG9yIEdDRS4gQmVjYXVzZSBpZiBhIGh5cGVydmlzb3IgaXMgcHJlc2VudCwgYGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgIGlzIGdvaW5nIHRvIGV2YWx1YXRlIHRvIGB0cnVlYCwgYW5kICp0aGF0IG1lYW5zKiBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIHdpbGwgKm5ldmVyKiBiZSBzZXQuIFRoYXQncyBhIGh1Z2UgcHJvYmxlbS5cblxuVGhpcyB0ZWxscyBtZSB0aGF0IHNldHRpbmcgdXAgdGhlIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYXR0cmlidXRlLCBhbmQgYnkgZXh0ZW5zaW9uIFNFVi1TTlAgc3VwcG9ydCwgaXMgZnVuZGFtZW50YWxseSB0aWVkIHRvIGJhcmUtbWV0YWwgQU1EIFplbjMrIC8gWmVuNSsgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGVuYWJsZWQgaW4gdGhlIEJJT1MvaGFyZHdhcmUuIEFuZCBSTVBPUFQgc2VlbXMgdG8gYmUgYSBuZXcgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIGZvciBaZW42IG9yIGZ1dHVyZSBDUFVzLlxuXG5JIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gd2hhdCBgcm1wb3B0KClgIGlzIGFjdHVhbGx5ICpkb2luZyouIE9rYXksIGl0J3MgdXNpbmcgYW4gaW5saW5lIGFzc2VtYmx5IGluc3RydWN0aW9uOiBgLmJ5dGUgMHhmMiwgMHgwZiwgMHgwMSwgMHhmY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLlxuXG5Ob3csIGNoZWNraW5nIGBybXBvcHRfY2FwYWJsZSgpYC4gSXQgcmVxdWlyZXMgKmJvdGgqIGBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVClgICphbmQqIGBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApYC4gSWYgYCFybXBvcHRfY2FwYWJsZSgpYCwgdGhlbiBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYCBhbmQgYHNucF9zZXR1cF9ybXBvcHQoKWAgaW1tZWRpYXRlbHkgcmV0dXJuLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gcHV0IHRoZSBwaWVjZXMgdG9nZXRoZXIuXG5cbkFuZCBJIHNlZSB0aGF0IGBzbnBfcm1wdGFibGVfaW5pdCgpYCAqaW1tZWRpYXRlbHkqIHJldHVybnMgLUVOT1NZUyBpZiBgIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUClgLiBUaGUgY29kZSB3b24ndCBldmVuIGNvbnRpbnVlLiBTaW1pbGFybHksIGBzbnBfcHJlcGFyZSgpYCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgQ0NQIGRyaXZlciB3aGVuIGEgU05QIGhvc3QgaXMgaW5pdGlhbGl6aW5nIHZpYSBgX19zZXZfc25wX2luaXRfbG9ja2VkKClgLCBhbmQgdGhhdCBmdW5jdGlvbiAqYWxzbyogY2hlY2tzIGBpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpYCwgcmV0dXJuaW5nIC1FTk9ERVYgaWYgZmFsc2UuIEFuZCBgc25wX3NodXRkb3duKClgIGlzIHNpbWlsYXJseSBvbmx5IGNhbGxlZCB2aWEgQ0NQIGR1cmluZyBhbiBTTlAgaG9zdCBzaHV0ZG93bi5cblxuVGhpcyBpcyBhbGwgbWFraW5nIGl0IGNsZWFyIC0gYHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKClgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGJzcF9kZXRlcm1pbmVfc25wKClgLiAqQW5kKiB0aGF0IG9ubHkgaGFwcGVucyBhdCBib290IHRpbWUgb24gQU1EIEJTUCB3aGVuIGBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1NFVl9TTlApYCAqaXMqIHRydWUgYW5kICphbHNvKiBgIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUilgLiBHb3QgaXQuIE5vdyBJIHNob3VsZCBjaGVjayB3aGVyZSBgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1MzoyOS45MjEwMzE5NjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc0MjMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX3Byb2JlX3JtcHRhYmxlX2luZm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjQ1PXN0YXRpYyBpbmxpbmUgdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZykgeyByZXR1cm4gMDsgfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjQ5LSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo2NTA6Ym9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NTEtaW50IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg9NjY3PXZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTY2OC0jZWxzZVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjY2OTpzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC02NzAtc3RhdGljIGlubGluZSBpbnQgc25wX3JtcHRhYmxlX2luaXQodm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYz0zNTY9c3RhdGljIHZvaWQgYnNwX2RldGVybWluZV9zbnAoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzItXFx0XFx0ICAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUFJFQUQpKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MzczOlxcdFxcdCAgICBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpKSB7XFxuYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYy0zNzQtXFx0XFx0XFx0Y2NfcGxhdGZvcm1fc2V0KENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jPTgwNT1zdGF0aWMgYm9vbCBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODQ4LVxcbmFyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jOjg0OTpib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXFxuYXJjaC94ODYvdmlydC9zdm0vc2V2LmMtODUwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzEuNTI4NDYzMjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDkxNTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYHNldl92bV9kZXN0cm95KClgIGFuZCBTRVYtU05QIEd1ZXN0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBzZXZfdm1fZGVzdHJveSgpYCB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBLVk0gVk0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBTRVYtU05QIChTZWN1cmUgTmVzdGVkIFBhZ2luZykgYXNwZWN0cy5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpZiB0aGUgVk0gaXMgYW4gU0VWLVNOUCBndWVzdCAoY2hlY2tlZCBieSBgc2V2X3NucF9ndWVzdChrdm0pYCksIHRoZSBmdW5jdGlvbiB0YWtlcyBzcGVjaWZpYyBhY3Rpb25zLiBJdCBhcHBlYXJzIHRoZXJlIG1pZ2h0IGJlIGEgc2NlbmFyaW8gd2hlcmUgYHNldl9lc19pbml0X3ZtKClgIGNvdWxkIGZhaWwgYWZ0ZXIgYHNucF9pbml0X3ZtKClgLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBnZXRzIGRlY29tbWlzc2lvbmVkIHZpYSBhIGNhbGwgdG8gYHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pYC4gIElmIHRoYXQgY2FsbCBpcyBzdWNjZXNzZnVsLCB3ZSBiYWlsIG91dC4gT3RoZXJ3aXNlLCBpdCB0cmlnZ2VycyBgc25wX3JtcG9wdF9hbGxfcGh5c21lbSgpYC5cblxuSWYgdGhlIFZNICppc24ndCogYW4gU0VWLVNOUCBndWVzdCwgdGhlIGBzZXZfdW5iaW5kX2FzaWQoKWAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuXG5cblRoaXMgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiBDYW4gYSBndWVzdCBWTSAqZW11bGF0ZSogYHNldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIHJ1biBhcyBpZiBpdCAqd2VyZSogYW4gU0VWLVNOUCBndWVzdCB1bmRlciBRRU1VICp3aXRob3V0KiBhY3R1YWwgcGh5c2ljYWwgQU1EIFNFVi1TTlAgaGFyZHdhcmU/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGBzZXZfc25wX2d1ZXN0YCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljLiBLbm93aW5nIHRoaXMgd2lsbCBjbGFyaWZ5IGhvdyBpdCdzIGhhbmRsZWQgaW4gYSBwdXJlbHkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmVyc3VzIG9uZSB3aXRoIHRydWUgaGFyZHdhcmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzQuNzM3NjE1Mzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNjI5MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9zbnBfZ3Vlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0xNDA9c3RhdGljIGJvb2wgc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ2OnN0YXRpYyBib29sIHNldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ3LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0OC1cXHRrdm1fbG9ja2RlcF9hc3NlcnRfc2V2X2xvY2tfaGVsZChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTQ5OlxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTUwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjA5PXN0YXRpYyBib29sIHNucF9pc19zZWN1cmVfdHNjX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTMtXFx0cmV0dXJuIChzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNDpcXHQgICAgICAgIVdBUk5fT05fT05DRSghc2V2X3NucF9ndWVzdChrdm0pKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIxMzY9aW50IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU3LVxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBzb3VyY2Vfa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgfHxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIxNTg6XFx0ICAgIHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjE1OS1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yMjc3PXN0YXRpYyBpbnQgc25wX2xhdW5jaF9zdGFydChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjI4My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjIyODQ6XFx0aWYgKCFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMjg1LVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDIxPXN0YXRpYyBpbnQgc25wX2xhdW5jaF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI0MjktXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDMwOlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pIHx8ICFzZXYtXFx1MDAzZXNucF9jb250ZXh0KVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQzMS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjU2Mj1zdGF0aWMgaW50IHNucF9sYXVuY2hfZmluaXNoKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTY5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjU3MDpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI1NzEtXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mzg9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2Mzkte1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0MDpcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzIHx8ICFzZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ4PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjcyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY3MzpcXHRpZiAoc2V2X3NucF9ndWVzdChrdm0pIFxcdTAwMjZcXHUwMDI2IHNldl9jbWQuaWQgXFx1MDAzYyBLVk1fU0VWX1NOUF9MQVVOQ0hfU1RBUlQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjc0LVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI4NTk9aW50IHNldl92bV9jb3B5X2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODgzLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjg4NDpcXHRpZiAoc2V2X2d1ZXN0KGt2bSkgfHwgIXNldl9ndWVzdChzb3VyY2Vfa3ZtKSB8fCBzZXZfc25wX2d1ZXN0KHNvdXJjZV9rdm0pIHx8XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yODg1LVxcdCAgICBpc19taXJyb3JpbmdfZW5jX2NvbnRleHQoc291cmNlX2t2bSkgfHwga3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5Nzc9dm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMDI2OlxcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwMjctXFx0XFx0c25wX2d1ZXN0X3JlcV9jbGVhbnVwKGt2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMzMzU9dm9pZCBzZXZfZ3Vlc3RfbWVtb3J5X3JlY2xhaW1lZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzQ4OlxcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzU0Nz12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzU2MTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU2Mi1cXHRcXHR1NjQgcGZuID0gX19wYShzdm0tXFx1MDAzZXNldl9lcy52bXNhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjIwPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIyODpcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00Mjg5PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyOTY6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1MT1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzAtXFx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDMxOlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0MzItXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ0MjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1Ni1cXHRjYXNlIEdIQ0JfTVNSX1BTQ19SRVE6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDU3OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTgtXFx0XFx0XFx0Z290byBvdXRfdGVybWluYXRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTA4PWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQxLVxcdC8qIFNFVi1TTlAgZ3Vlc3QgcmVxdWlyZXMgdGhhdCB0aGUgR0hDQiBHUEEgbXVzdCBiZSByZWdpc3RlcmVkICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTQyOlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQzLVxcdCAgICAhZ2hjYl9ncGFfaXNfcmVnaXN0ZXJlZChzdm0sIGNvbnRyb2wtXFx1MDAzZWdoY2JfZ3BhKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU1ODpcXHRpZiAoaXNfc25wX29ubHlfdm1nZXhpdChjb250cm9sLVxcdTAwM2VleGl0X2NvZGUpIFxcdTAwMjZcXHUwMDI2ICFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU5LVxcdFxcdHZjcHVfdW5pbXBsKHZjcHUsIFxcXCJ2bWdleGl0OiBleGl0IGNvZGUgJSNsbHggaXMgU05QLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NDQ9dm9pZCBzZXZfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGluaXRfZXZlbnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODU3OlxcdGlmIChpbml0X2V2ZW50IFxcdTAwMjZcXHUwMDI2IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxcdFxcdHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4OTE9dm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVhICpob3N0c2EpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzEtXFx0ICAgIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQlVHX1NXQVApIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTMyOlxcdCAgICAgaXNfc2V2X3NucF9ndWVzdChcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzMtXFx0XFx0aG9zdHNhLVxcdTAwM2VkcjBfYWRkcl9tYXNrID0gYW1kX2dldF9kcl9hZGRyX21hc2soMCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUxNTU9aW50IHNldl9nbWVtX21ha2VfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwga3ZtX3Bmbl90IG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MTYyLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTE2MzpcXHRpZiAoIXNldl9zbnBfZ3Vlc3Qoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUxNjQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNjg9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTI4MTpcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMwMz1pbnQgc2V2X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzMDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzA4OlxcdGlmICghc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTMwOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTMxOD1zdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzM4LVxcdC8qIENoZWNrIGlmIHRoZSBTRVYgcG9saWN5IGFsbG93cyBkZWJ1Z2dpbmcgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzMzk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDAtXFx0XFx0aWYgKCEoc2V2LVxcdTAwM2Vwb2xpY3kgXFx1MDAyNiBTTlBfUE9MSUNZX01BU0tfREVCVUcpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQ2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0NzpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0OC1cXHRcXHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjE6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIyLVxcdFxcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDE6XFx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcXFwiU0VWLVNOUFxcXCIgOlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cXHRcXHQgIGlzX3Nldl9lc19ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtRVNcXFwiIDpcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDMxOlxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0NDM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6MzYuMzMxMjUwOTQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDQxNzI0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgX19fX3Nldl9zbnBfZ3Vlc3Qoa3ZtKWAgYW5kIGBLVk1fWDg2X1NOUF9WTWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZ2VuZXNpcyBhbmQgbWVjaGFuaWNzIG9mIGBfX19fc2V2X3NucF9ndWVzdChrdm0pYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYEtWTV9YODZfU05QX1ZNYCBzdHJ1Y3R1cmUuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBpcyByb2J1c3QsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNzIGFsaWduIHBlcmZlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjcmVhdGlvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gLiBXaGVyZSBpcyBpdCBiZWluZyBpbnN0YW50aWF0ZWQ/IFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgcGFyYW1ldGVycyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgU0VWLVNOUCBndWVzdCB2aXJ0dWFsaXphdGlvbj8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG93YXJkIGJ1aWxkaW5nIGEgdHJ1ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDIxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NDAuMTM1NDI1NjE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRyZXR1cm4gc2V2LVxcdTAwM2Vlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT05fT05DRSghc2V2LVxcdTAwM2VhY3RpdmUpO1xcbiA0MTA6XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19fX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdHJldHVybiAoc2V2LVxcdTAwM2V2bXNhX2ZlYXR1cmVzIFxcdTAwMjYgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuIDQxNzpcXHRcXHQgICAgICAgIVdBUk5fT05fT05DRSghX19fX3Nldl9lc19ndWVzdChrdm0pKTtcXG4gNDE4OlxcdH1cXG4gNDE5OlxcdFxcbiA0MjA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MjM6XFx0fVxcbiA0MjQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyNTpcXHR7XFxuIDQyNjpcXHRcXHRyZXR1cm4gX19fX3Nldl9lc19ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0Mjc6XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQzMDpcXHR7XFxuIDQzMTpcXHRcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDMyOlxcdH1cXG4gNDMzOlxcdCNlbHNlXFxuIDQzNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0Mzk6XFx0e1xcbiA0NDA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQ0NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjQwLjEzNTUyNDk0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODcwMzc1NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSdzIEFNRCBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSBWTSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IEtWTSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IGl0IHNldHMgdGhpbmdzIHVwIGZvciBhbiBBTUQgU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNOUCkgdmlydHVhbCBtYWNoaW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcGF0aCBmb3IgdGhpcywgYXMgaXQncyBmb3VuZGF0aW9uYWwgdG8gdGhlIHNlY3VyaXR5IHBvc3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIEFNRCBTRVYtU05QIGFyZSBlbmFibGVkLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgaW52b2x2ZXMgcGFyc2luZyBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhbmQgdGhlbiBjb25maWd1cmluZyB0aGUgYXBwcm9wcmlhdGUgYml0cyBhbmQgcGllY2VzIHdpdGhpbiB0aGUgVk1TQSBzdHJ1Y3R1cmVzLiBXaGVyZSBkb2VzIHRoZSBjb2RlIGFjdHVhbGx5IGRldGVybWluZSB3aGF0IFNOUCBmZWF0dXJlcyBhcmUgYWR2ZXJ0aXNlZCwgYW5kIGhvdyBkb2VzIGl0IGVuc3VyZSB0aGV5J3JlIGNvcnJlY3RseSBzZXQgZHVyaW5nIHRoZSBWTSBsYXVuY2ggc2VxdWVuY2U/IEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIGNvbmZpcm0gdGhpcy4gSSBiZXQgaXQgaXMgYSBmdW5jdGlvbiBvZiB0aGUgSHlwZXJ2aXNvci4gTGV0J3Mgc3RhcnQgd2l0aCB0cmFjaW5nIHRoZSBjb2RlIHdoZXJlIHRoZSBgc2V2YCBzdHJ1Y3QgaXMgZ2V0dGluZyBidWlsdC4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQU1EIFNFVi1TTlAgc3BlY2lmaWMgaGFyZHdhcmUgYml0cy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtWTSBnZXRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgYnV0IHRoZSBjb2RlIHRlbGxzIHRoZSB0cnV0aC4gSSdsbCBsb29rIGZvciBmdW5jdGlvbnMgcmVsYXRlZCB0byBnZXR0aW5nIGFuZCBzZXR0aW5nIHRob3NlIGZlYXR1cmVzLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiBleGVjdXRpb24sIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0My4wMDU5MDMzNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzg5NTE5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg9MzA2PXN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC0zMDctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmg6MzA4OiNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcXHRcXHRcXHRcXHRCSVQoMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaC0zMDktI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT05cXHRcXHRCSVQoMylcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM2LVxcdGlmIChzbnBfYWN0aXZlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM3OlxcdFxcdHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDEyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQxNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQxNjpcXHRyZXR1cm4gKHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDE3LVxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0NC41NDQ4NjAwMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMDU2NDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgX19zZXZfZ3Vlc3RfaW5pdGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0J3MgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBndWVzdCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgU0VWIGZyYW1ld29yaywgZXNwZWNpYWxseSBmb3IgQU1EIHByb2Nlc3NvcnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5J3JlIHNldHRpbmcgdGhpbmdzIHVwIGluIHRoZSBoeXBlcnZpc29yIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBTRVYtRVMgb3IgU0VWLVNOUCBmdW5jdGlvbmFsaXR5LiBJIHN1c3BlY3QgdGhlcmUnbGwgYmUgc29tZSBjcnVjaWFsIGxvZ2ljIHJlZ2FyZGluZyBwYWdlIG1hcHBpbmcsIGtleSBkZXJpdmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbCBndWVzdCByZWdpc3RlciBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgY2xvc2Ugc2NydXRpbnkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGF0IGFmZmVjdCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIEtWTSdzIGV4aXN0aW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxOTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0Ni44NTU0MjYyNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDg1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDg1OlxcdFxcdFxcdF9fZnJlZV9wYWdlKHZpcnRfdG9fcGFnZShzZXYtXFx1MDAzZWd1ZXN0X3JlcV9idWYpKTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0XFx0c2V2LVxcdTAwM2VndWVzdF9yZXFfYnVmID0gTlVMTDtcXG4gNDg4OlxcdFxcdHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYgPSBOVUxMO1xcbiA0ODk6XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuIDQ5MjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcXG4gNDkzOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuIDQ5NDpcXHR7XFxuIDQ5NTpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDk2OlxcdFxcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcXG4gNDk3OlxcdFxcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcXG4gNDk4OlxcdFxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuIDQ5OTpcXHRcXHR1NjQgdmFsaWRfdm1zYV9mZWF0dXJlcyA9IGVzX2FjdGl2ZSA/IHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyA6IDA7XFxuIDUwMDpcXHRcXHRpbnQgcmV0O1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VjcmVhdGVkX3ZjcHVzKVxcbiA1MDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdGlmIChkYXRhLVxcdTAwM2VmbGFncylcXG4gNTA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAoIXNucF9hY3RpdmUpXFxuIDUwOTpcXHRcXHRcXHR2YWxpZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcXG4gNTEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTM6XFx0XFxuIDUxNDpcXHRcXHRpZiAoZGF0YS1cXHUwMDNlZ2hjYl92ZXJzaW9uIFxcdTAwM2UgR0hDQl9WRVJTSU9OX01BWCB8fCAoIWVzX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VnaGNiX3ZlcnNpb24pKVxcbiA1MTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdC8qXFxuIDUxODpcXHRcXHQgKiBLVk0gc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgbWFuZGF0b3J5IGZlYXR1cmVzIGRlZmluZWQgYnkgdmVyc2lvblxcbiA1MTk6XFx0XFx0ICogMiBvZiB0aGUgR0hDQiBwcm90b2NvbCwgc28gZGVmYXVsdCB0byB0aGF0IGZvciBTRVYtRVMgZ3Vlc3RzIGNyZWF0ZWRcXG4gNTIwOlxcdFxcdCAqIHZpYSBLVk1fU0VWX0lOSVQyIChLVk1fU0VWX0lOSVQgZm9yY2VzIHZlcnNpb24gMSkuXFxuIDUyMTpcXHRcXHQgKi9cXG4gNTIyOlxcdFxcdGlmIChlc19hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIWRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbilcXG4gNTIzOlxcdFxcdFxcdGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiA9IDI7XFxuIDUyNDpcXHRcXG4gNTI1OlxcdFxcdGlmIChzbnBfYWN0aXZlIFxcdTAwMjZcXHUwMDI2IGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbiBcXHUwMDNjIDIpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0aWYgKHVubGlrZWx5KHNldi1cXHUwMDNlYWN0aXZlKSlcXG4gNTI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRzZXYtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuIDUzMjpcXHRcXHRzZXYtXFx1MDAzZWVzX2FjdGl2ZSA9IGVzX2FjdGl2ZTtcXG4gNTMzOlxcdFxcdHNldi1cXHUwMDNldm1zYV9mZWF0dXJlcyA9IGRhdGEtXFx1MDAzZXZtc2FfZmVhdHVyZXM7XFxuIDUzNDpcXHRcXHRzZXYtXFx1MDAzZWdoY2JfdmVyc2lvbiA9IGRhdGEtXFx1MDAzZWdoY2JfdmVyc2lvbjtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0aWYgKHNucF9hY3RpdmUpXFxuIDUzNzpcXHRcXHRcXHRzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdHJldCA9IHNldl9hc2lkX25ldyhzZXYsIHZtX3R5cGUpO1xcbiA1NDA6XFx0XFx0aWYgKHJldClcXG4gNTQxOlxcdFxcdFxcdGdvdG8gZV9ub19hc2lkO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRpbml0X2FyZ3MucHJvYmUgPSBmYWxzZTtcXG4gNTQ0OlxcdFxcdHJldCA9IHNldl9wbGF0Zm9ybV9pbml0KFxcdTAwMjZpbml0X2FyZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo0Ni44NTU3MjMwODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM5Mjc4ODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFVi1TTlAgSW5pdGlhbGl6YXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEZpcnN0LCBgc2V2X3BsYXRmb3JtX2luaXQoXHUwMDI2aW5pdF9hcmdzKWAgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxpbmcgdGhlIENDUCBkcml2ZXIuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGF0aC4gVGhlbiwgdGhlcmUncyBgc2V2X3NucF9zdXBwb3J0ZWRgIHdpdGhpbiBgc2V2X2hhcmR3YXJlX3NldHVwYCwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNoZWNrIGlzOlxuXG5gYGBjXG5zZXZfc25wX3N1cHBvcnRlZCA9IHNldl9zbnBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcbmBgYFxuXG5UaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHZlcmlmeWluZyBib3RoIHRoYXQgU0VWLVNOUCBpcyBlbmFibGVkIGdlbmVyYWxseSwgYW5kIHRoYXQgdGhlIGhvc3QgcGxhdGZvcm0gYWN0dWFsbHkgc3VwcG9ydHMgaXQsIHVzaW5nIGBjY19wbGF0Zm9ybV9oYXMoKWAuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIG1pc3Npbmcgc29tZXRoaW5nIGltcG9ydGFudC4gSG93IGlzIGBzZXZfdm1faW5pdGAgb3IsIG1vcmUgZ2VuZXJhbGx5LCBga3ZtX2FyY2hfaW5pdF92bWAgc2V0dGluZyB0aGUgYGt2bS1cdTAwM2VhcmNoLnZtX3R5cGVgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBWTSB0eXBlIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIFNOUCBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcgaXMgYmVpbmcgc2V0IGFuZCB1c2VkIHdpdGhpbiBLVk0uIFRoaXMgd2lsbCBkZXRlcm1pbmUgaG93IHRoZSByZXN0IG9mIHRoZSBTTlAgZnVuY3Rpb25hbGl0eSBnZXRzIGhvb2tlZCB1cC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGVyZSBgS1ZNX1g4Nl9TTlBfVk1gIGlzIGFjdHVhbGx5IHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ1NiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjUyLjI0ODUxNDEyOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMTQ4NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9OTUxMj1tZWFucyB0aGUgVk0gdHlwZSB3aXRoIHZhbHVlIEBuIGlzIHN1cHBvcnRlZC4gIFBvc3NpYmxlIHZhbHVlcyBvZiBAbiBhcmU6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTctICAjZGVmaW5lIEtWTV9YODZfU0VWX0VTX1ZNXFx0M1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTE4OiAgI2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdDRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUxOS0gICNkZWZpbmUgS1ZNX1g4Nl9URFhfVk1cXHQ1XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjU9c3RhdGljIGludCBzZXZfYXNpZF9uZXcoc3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2LCB1bnNpZ25lZCBsb25nIHZtX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI3NDpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NOUF9WTSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjc1LVxcdFxcdG1pbl9hc2lkID0gbWluX3NucF9hc2lkO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTE9c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTctXFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxMi1cXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI5NTU9dm9pZCBzZXZfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTYxOlxcdGNhc2UgS1ZNX1g4Nl9TTlBfVk06XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYyLVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5oYXNfcHJpdmF0ZV9tZW0gPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg4PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMzLVxcdGlmIChzZXZfc25wX3N1cHBvcnRlZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzQ6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzUtXFx0dm1fdHlwZXMgXFx1MDAyNj0gc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0OTpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUwLVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MzE0Nz1pbnQgc2V2X2Zpcm13YXJlX3N1cHBvcnRlZF92bV90eXBlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zMTYxLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MzE2MjpcXHRzdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU05QX1ZNKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTMxNjMtXFxuLS1cXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTczLSNkZWZpbmUgS1ZNX1g4Nl9TRVZfRVNfVk1cXHQzXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzQ6I2RlZmluZSBLVk1fWDg2X1NOUF9WTVxcdFxcdDRcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3NS0jZGVmaW5lIEtWTV9YODZfVERYX1ZNXFx0XFx0NVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oPTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zZXZfc25wX3ZtKHN0cnVjdCBrdm1fdm0gKnZtKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zZXYuaC0zNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3Nldi5oOjM2OlxcdHJldHVybiB2bS1cXHUwMDNldHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc2V2LmgtMzctfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3OD1zdGF0aWMgYm9vbCBpc19ndWVzdF9tZW1mZF9yZXF1aXJlZChzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgwLSNpZmRlZiBfX3g4Nl82NF9fXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjQ4MTpcXHRyZXR1cm4gc2hhcGUudHlwZSA9PSBLVk1fWDg2X1NOUF9WTTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNDgyLSNlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYz03ND12b2lkIHNucF92bV9pbml0KHN0cnVjdCBrdm1fdm0gKnZtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvc2V2LmM6Nzg6XFx0VEVTVF9BU1NFUlRfRVEodm0tXFx1MDAzZXR5cGUsIEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9zZXYuYy03OS1cXHR2bV9zZXZfaW9jdGwodm0sIEtWTV9TRVZfSU5JVDIsIFxcdTAwMjZpbml0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTgzLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg0OlxcdFxcdHRlc3RfaW5pdDIoS1ZNX1g4Nl9TTlBfVk0sIFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7fSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9MTE4PWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE0NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE0NjpcXHRoYXZlX3NucCA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTQ3LVxcdFRFU1RfQVNTRVJUKCFoYXZlX3NucCB8fCBrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTU1LVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE1NjpcXHRcXHR0ZXN0X2ZsYWdzKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTE1Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMtMTYxLVxcdGlmIChoYXZlX3NucClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjE2MjpcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy0xNjMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzE2PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taWdyYXRlX3JlamVjdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzIxOlxcdHNyY192bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NOUF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyMi1cXHRzbnBfdm1faW5pdChzcmNfdm0pO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM6MzI2OlxcdGRzdF92bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NOUF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfbWlncmF0ZV90ZXN0cy5jLTMyNy1cXHRfX3ZtX3ZjcHVfYWRkKGRzdF92bSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmM9MzM4PXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3NucF9taXJyb3JfcmVqZWN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzQyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X21pZ3JhdGVfdGVzdHMuYzozNDM6XFx0c3JjX3ZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU05QX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9taWdyYXRlX3Rlc3RzLmMtMzQ0LVxcdHNucF92bV9pbml0KHNyY192bSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmM9MjIxPXN0YXRpYyB2b2lkIHRlc3Rfc2V2X3Ntb2tlKHZvaWQgKmd1ZXN0LCB1MzIgdHlwZSwgdTY0IHBvbGljeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIyNTpcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjI2LVxcdFxcdHRlc3Rfc2V2KGd1ZXN0LCB0eXBlLCBwb2xpY3kgfCBTTlBfUE9MSUNZX0RCRyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjM4LVxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjIzOTpcXHRcXHRpZiAodHlwZSA9PSBLVk1fWDg2X1NOUF9WTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjQwLVxcdFxcdFxcdHRlc3Rfc3luY192bXNhKHR5cGUsIHBvbGljeSB8IFNOUF9QT0xJQ1lfREJHKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYz0yNDY9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X3Ntb2tlX3Rlc3QuYy0yNjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MjpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfc21va2VfdGVzdC5jOjI2MzpcXHRcXHR0ZXN0X3Nldl9zbW9rZShndWVzdF9zbnBfY29kZSwgS1ZNX1g4Nl9TTlBfVk0sIHNucF9kZWZhdWx0X3BvbGljeSgpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9zbW9rZV90ZXN0LmMtMjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo1NC4yODAwMDkyNzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyMDAyODkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBTRVYtU05QIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gd29uZGVyaW5nIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYyByZWdhcmRpbmcgS1ZNIGFuZCBTRVYtU05QOiBDYW4gSSBzdWNjZXNzZnVsbHkgdXNlIGBLVk1fQ1JFQVRFX1ZNYCB3aXRoIHRoZSBgS1ZNX1g4Nl9TTlBfVk1gIGZsYWcsIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKmRvZXNuJ3QqIHN1cHBvcnQgU0VWLVNOUD8gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgZ3JhY2VmdWwgZmFsbGJhY2ssIG9yIHBlcmhhcHMgYW4gZXJyb3IgaXMgZXhwbGljaXRseSB0aHJvd24uXG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYGt2bV9hcmNoX2luaXRfdm1gIGZ1bmN0aW9uLCBwcm9iYWJseSBmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIE9yIG1heWJlIHRoZXJlJ3Mgc29tZSBzZXR1cCByZWxhdGVkIHRvIFNFViBoYXJkd2FyZSwgc29tZXRoaW5nIGNhbGxlZCBgc2V2X2hhcmR3YXJlX3NldHVwYCwgdGhhdCBoYW5kbGVzIHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdGhlIHJlcXVpcmVkIGNoZWNrcyBmb3IgU0VWLVNOUCBzdXBwb3J0LiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBnbyBmcm9tIHRoZXJlLCBhbmQgc2VlIHdoZXJlIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGZpdHMgaW4gaWYgbmVlZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGRldGVjdCBvciBncmFjZWZ1bGx5IGhhbmRsZSB1bnN1cHBvcnRlZCBmZWF0dXJlcy4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NTYuODAwMDQxNjc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWDg2X1NOUF9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjY1PXN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNzQ6XFx0aWYgKHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk0pIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI3NS1cXHRcXHRtaW5fYXNpZCA9IG1pbl9zbnBfYXNpZDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDkxPXN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk3LVxcdGJvb2wgZXNfYWN0aXZlID0gdm1fdHlwZSAhPSBLVk1fWDg2X1NFVl9WTTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODpcXHRib29sIHNucF9hY3RpdmUgPSB2bV90eXBlID09IEtWTV9YODZfU05QX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5LVxcdHU2NCB2YWxpZF92bXNhX2ZlYXR1cmVzID0gZXNfYWN0aXZlID8gc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIDogMDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTItXFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU0VWX0VTX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTM6XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC52bV90eXBlICE9IEtWTV9YODZfU05QX1ZNKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yOTYwLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk2MTpcXHRjYXNlIEtWTV9YODZfU05QX1ZNOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk2Mi1cXHRcXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMy1cXHRpZiAoc2V2X3NucF9zdXBwb3J0ZWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjM0OlxcdFxcdHZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NOUF9WTSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM1LVxcdHZtX3R5cGVzIFxcdTAwMjY9IHNldl9maXJtd2FyZV9zdXBwb3J0ZWRfdm1fdHlwZXMoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cXHRcXHRwcl9pbmZvKFxcXCJTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MC1cXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjUzOjU2Ljg1NTk5NTcyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI4ODYzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIEluaXRpYWxpemF0aW9uIG9uIHg4NioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBpbml0aWFsaXplcyBvbiB4ODYuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBJIHJlY2FsbCwgaXMgcHJvYmFibHkgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIExldCdzIHNlZS4uLiAqa3ZtX2FyY2hfaW5pdF92bSogaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQgZmlsZSBtYWtlcyB0aGUgbW9zdCBzZW5zZS4gVGhpcyBpcyB3aGVyZSB0aGUgbG93LWxldmVsLCB4ODYtc3BlY2lmaWMgcGFydHMgb2YgdmlydHVhbCBtYWNoaW5lIHNldHVwIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGVudHJ5IHBvaW50cyBpbnZvbHZlZCBpbiB0aGUgVk0ncyBhcmNoaXRlY3R1cmFsIGluaXRpYWxpemF0aW9uLCBzbyBkaWdnaW5nIGludG8gdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjo1Mzo1OC40ODQ4NjE4MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjIyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzkyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS5oLTM5My17XFxuYXJjaC94ODYva3ZtL21tdS5oOjM5NDpcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgPT0gS1ZNX1g4Nl9URFhfVk07XFxuYXJjaC94ODYva3ZtL21tdS5oLTM5NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5NTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX21tdV9nZXRfdGRwX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5NTg6XFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk1OS1cXHRcXHRtYXhwYSA9IGNwdWlkX3F1ZXJ5X21heGd1ZXN0cGh5YWRkcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXFx0ICAgICEoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XFx0ICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVxcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKGNyMl9vcl9ncGEpKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzYwOD12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzYxNy1cXHR9O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzYxODpcXHRib29sIHphcF9hbGwgPSBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X0RFRkFVTFRfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc2MTktXFx0XFx0ICAgICAgIGt2bV9jaGVja19oYXNfcXVpcmsoa3ZtLCBLVk1fWDg2X1FVSVJLX1NMT1RfWkFQX0FMTCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xODk9c3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5NC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxOTU6XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfVERYX1ZNKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE5Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxNzojaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjExOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBzZXZfYWxsb2NfYXNpZCh1bnNpZ25lZCBpbnQgbWluX2FzaWQsIHVuc2lnbmVkIGludCBtYXhfYXNpZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY1OnN0YXRpYyBpbnQgc2V2X2FzaWRfbmV3KHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiwgdW5zaWduZWQgbG9uZyB2bV90eXBlKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjczLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjc0OlxcdGlmICh2bV90eXBlID09IEtWTV9YODZfU05QX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNzUtXFx0XFx0bWluX2FzaWQgPSBtaW5fc25wX2FzaWQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5MT1zdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTItXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc2V2X2luaXQgKmRhdGEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTM6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdm1fdHlwZSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Ni1cXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTc6XFx0Ym9vbCBlc19hY3RpdmUgPSB2bV90eXBlICE9IEtWTV9YODZfU0VWX1ZNO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4OlxcdGJvb2wgc25wX2FjdGl2ZSA9IHZtX3R5cGUgPT0gS1ZNX1g4Nl9TTlBfVk07XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTktXFx0dTY0IHZhbGlkX3Ztc2FfZmVhdHVyZXMgPSBlc19hY3RpdmUgPyBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgOiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1Mzk6XFx0cmV0ID0gc2V2X2FzaWRfbmV3KHNldiwgdm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01NDAtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4Ni1cXHR9O1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTg3OlxcdHVuc2lnbmVkIGxvbmcgdm1fdHlwZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU4OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU4OTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTkxLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTkyOlxcdHZtX3R5cGUgPSAoYXJncC1cXHUwMDNlaWQgPT0gS1ZNX1NFVl9JTklUID8gS1ZNX1g4Nl9TRVZfVk0gOiBLVk1fWDg2X1NFVl9FU19WTSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU5Ny1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjU5ODpcXHRpZiAodm1fdHlwZSA9PSBLVk1fWDg2X1NFVl9FU19WTSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTU5OS1cXHRcXHRkYXRhLmdoY2JfdmVyc2lvbiA9IEdIQ0JfVkVSU0lPTl9NSU47XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwgdm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz02MDQ9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxMC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMTpcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMjpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TRVZfRVNfVk0gXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxMzpcXHQgICAga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9TTlBfVk0pXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTYxOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYxOTpcXHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFxcdTAwMjZkYXRhLCBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz05Njg9c3RhdGljIGludCBzZXZfZXNfc3luY192bXNhKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDI3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MTAyODpcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgIT0gS1ZNX1g4Nl9ERUZBVUxUX1ZNKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xMDI5LVxcdFxcdHhzYXZlID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXFx1MDAzZXJlZ3MueHNhdmU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTIxMzY9aW50IHNldl92bV9tb3ZlX2VuY19jb250ZXh0X2Zyb20oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgc291cmNlX2ZkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yMTU2LVxcdC8qIERvIG5vdCBhbGxvdyBTTlAgVk0gbWlncmF0aW9uIHVudGlsIGFkZGl0aW9uYWwgc3RhdGUgdHJhbnNmZXIgaXMgaW1wbGVtZW50ZWQgICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyMTU3OlxcdGlmIChrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSAhPSBzb3VyY2Vfa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUgfHxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTIxNTgtXFx0ICAgIHNldl9ndWVzdChrdm0pIHx8ICFzZXZfZ3Vlc3Qoc291cmNlX2t2bSkgfHwgc2V2X3NucF9ndWVzdChzb3VyY2Vfa3ZtKSkge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yOTU1PXZvaWQgc2V2X3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk1Ni17XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyOTU3OlxcdHN3aXRjaCAoa3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXFx0Y2FzZSBLVk1fWDg2X0RFRkFVTFRfVk06XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NzEtXFx0ZGVmYXVsdDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NzI6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJVbnN1cHBvcnRlZCBWTSB0eXBlICV1XFxcIiwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk3My1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4OD12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA5NC1cXHRib29sIHNldl9zdXBwb3J0ZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTU6XFx0dTMyIHZtX3R5cGVzID0gMDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMjktXFx0aWYgKHNldl9zdXBwb3J0ZWQgXFx1MDAyNlxcdTAwMjYgbWluX3Nldl9hc2lkIFxcdTAwM2M9IG1heF9zZXZfYXNpZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzA6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzEtXFx0aWYgKHNldl9lc19zdXBwb3J0ZWQgXFx1MDAyNlxcdTAwMjYgbWluX3Nldl9lc19hc2lkIFxcdTAwM2M9IG1heF9zZXZfZXNfYXNpZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzI6XFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX0VTX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzMtXFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNDpcXHRcXHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNTpcXHR2bV90eXBlcyBcXHUwMDI2PSBzZXZfZmlybXdhcmVfc3VwcG9ydGVkX3ZtX3R5cGVzKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM2LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIzNzpcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gdm1fdHlwZXM7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjM4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQwLVxcdFxcdHByX2luZm8oXFxcIlNFViAlcyAoQVNJRHMgJXUgLSAldSlcXFxcblxcXCIsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjQxOlxcdFxcdFxcdHNldl9zdHJfZmVhdHVyZV9zdGF0ZShzZXZfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NFVl9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0Mi1cXHRcXHRcXHRtaW5fc2V2X2FzaWQsIG1heF9zZXZfYXNpZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNDQtXFx0XFx0cHJfaW5mbyhcXFwiU0VWLUVTICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDU6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9lc19zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU0VWX0VTX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVxcdFxcdFxcdG1pbl9zZXZfZXNfYXNpZCwgbWF4X3Nldl9lc19hc2lkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cXHRcXHRwcl9pbmZvKFxcXCJTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyNDk6XFx0XFx0XFx0c2V2X3N0cl9mZWF0dXJlX3N0YXRlKHNldl9zbnBfc3VwcG9ydGVkLCB2bV90eXBlcyBcXHUwMDI2IEJJVChLVk1fWDg2X1NOUF9WTSkpLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MC1cXHRcXHRcXHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM0MjY9c3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQzMS1cXHRzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUwMSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDMyOlxcdGNoYXIgKnZtX3R5cGU7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQ0MTpcXHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtU05QXFxcIiA6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVxcdFxcdCAgaXNfc2V2X2VzX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1FU1xcXCIgOlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQ1LVxcdHByX2VycihcXFwiJXMgdkNQVSV1IFZNQ0IgJXAsIGxhc3QgYXR0ZW1wdGVkIFZNUlVOIG9uIENQVSAlZFxcXFxuXFxcIixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0NDY6XFx0ICAgICAgIHZtX3R5cGUsIHZjcHUtXFx1MDAzZXZjcHVfaWQsIHN2bS1cXHUwMDNlY3VycmVudF92bWNiLVxcdTAwM2VwdHIsIHZjcHUtXFx1MDAzZWFyY2gubGFzdF92bWVudHJ5X2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQ3LVxcdHByX2VycihcXFwiVk1DQiBDb250cm9sIEFyZWE6XFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxODojaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9NjA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYxLXtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjYyOlxcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1REWF9WTTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTYzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTEwNTg9c3RhdGljIGludCBfX2luaXQgdnRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTA3OC1cXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyhzdHJ1Y3QgdmNwdV90ZHgpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDc5OlxcdFxcdGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9URFhfVk0pO1xcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwODAtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTIxNzE9c3RhdGljIGludCBrdm1faW9jdGxfZ2V0X3N1cHBvcnRlZF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjE5Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5MzpzdGF0aWMgYm9vbCBrdm1faXNfdm1fdHlwZV9zdXBwb3J0ZWQodW5zaWduZWQgbG9uZyB0eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk0LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjE5NTpcXHRyZXR1cm4gdHlwZSBcXHUwMDNjIDMyIFxcdTAwMjZcXHUwMDI2IChrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMTk2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0yMjAzPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNC1cXHRjYXNlIEtWTV9DQVBfVk1fVFlQRVM6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0MDU6XFx0XFx0ciA9IGt2bV9jYXBzLnN1cHBvcnRlZF92bV90eXBlcztcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQwNi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzA2MzpcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgPSBCSVQoS1ZNX1g4Nl9ERUZBVUxUX1ZNKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzA2NC1cXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfbWNlX2NhcCA9IE1DR19DVExfUCB8IE1DR19TRVJfUDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MTI0LVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fU1dfUFJPVEVDVEVEX1ZNKSBcXHUwMDI2XFx1MDAyNiB0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcxMjU6XFx0XFx0a3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzIHw9IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjYtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODQ3LVxcbmFyY2gveDg2L2t2bS94ODYuYzo5ODQ4OlxcdGlmICgha3ZtX2lzX3ZtX3R5cGVfc3VwcG9ydGVkKHR5cGUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODQ5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODUwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo5ODUxOlxcdGt2bS1cXHUwMDNlYXJjaC52bV90eXBlID0gdHlwZTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1Mi1cXHRrdm0tXFx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTM6NTguNTUwNDkwMzU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMzgyNTcyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUmVhY2hhYmlsaXR5IGluIFN0YW5kYXJkIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNvZGUgdGhhdCdzIGZ1bmRhbWVudGFsbHkgKnVucmVhY2hhYmxlKiBpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJ3JlIHR5cGljYWxseSB3b3JraW5nIHdpdGgsIGxpa2UgUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLiBIZXJlJ3MgdGhlIHJlYXNvbmluZzpcblxuRmlyc3QsIHRoZSBjb2RlIHRvdWNoZXMgYGt2bV9hcmNoX2luaXRfdm1gIGFuZCBga3ZtX2NhcHMuc3VwcG9ydGVkX3ZtX3R5cGVzYC4gVGhlIGluY2x1c2lvbiBvZiBgS1ZNX1g4Nl9TTlBfVk1gIOKAkyB3aGljaCBpcyBrZXkgaGVyZSDigJMgaXMgY29udGluZ2VudCBvbiBgc2V2X3NucF9zdXBwb3J0ZWRgIGJlaW5nIHRydWUuIEFuZCBgc2V2X3NucF9zdXBwb3J0ZWRgIGlzIGRpcmVjdGx5IGxpbmtlZCB0byBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIFRoaXMsIGluIHR1cm4sICpyZXF1aXJlcyogYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIHN1cHBvcnQsIGFuZCBleHBsaWNpdGx5ICpleGNsdWRlcyogdGhlIGh5cGVydmlzb3IgY2FzZSAoYCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpYCkuXG5cblRoZW4gdGhlcmUncyB0aGUgYFJNUE9QVGAgc3R1ZmYg4oCTIGFsbCB0aG9zZSBjaGFuZ2VzIGFyb3VuZCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgYHNucF9zZXR1cF9ybXBvcHRgLCBldGMuIFRoZXNlIGFyZSAqYWxzbyogdGlnaHRseSBjb3VwbGVkIHRvIGJhcmUtbWV0YWwgaGFyZHdhcmUgd2l0aCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFuZCBzcGVjaWZpYyBDUFUgZmVhdHVyZXMgbGlrZSBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgU2VnbWVudGVkIFJNUCBzdXBwb3J0ICh3aGljaCBhcHBlYXJzIHRvIGJlIFplbiA1L1plbiA2IHNwZWNpZmljKS4gRXhlY3V0aW5nIHRoZSBiaW51dGlscyBSTVBPUFQgb3Bjb2RlIGFuZCBoYXZpbmcgcGh5c2ljYWwgQU1EIElPTU1VIC8gQ0NQIGNvLXByb2Nlc3NvciBoYXJkd2FyZSBpcyBhbm90aGVyIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIHdhbGsgdGhyb3VnaCB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ3ZlIGxvb2tlZCBhdDpcblxuMS4gIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oYCwgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oYDogSnVzdCBkZWZpbml0aW9ucyBhbmQgaGVhZGVycy4gTm8gZXhlY3V0aW9uIHBhdGguXG4yLiAgYGFyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNgOiBDUFVJRCBkZXRlY3Rpb24gY29kZTsgdGhhdCdzIGZpbmUsIGJ1dCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBDUFUgdG8gKmhhdmUqIFJNUE9QVCwgd2hpY2ggaW4gYSBoeXBlcnZpc29yIGVudmlyb25tZW50LCBpdCB3b24ndC5cbjMuICBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2A6IGBzZXZfdm1fZGVzdHJveWAgY2FsbHMgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gICpvbmx5KiBpZiBpdCdzIGFuIFNOUCBndWVzdCBWTS4gQW4gU05QIGd1ZXN0IGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC5cbjQuICBgYXJjaC94ODYvdmlydC9zdm0vc2V2LmNgOiBGdW5jdGlvbnMgbGlrZSBgc25wX3ByZXBhcmVgLCBgc25wX3NodXRkb3duYCwgYW5kIG90aGVycyBhcmUgZ3VhcmRlZCBieSBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgKm9yKiBgWDg2X0ZFQVRVUkVfUk1QT1BUYCwgb3IgdGhleSBhcmUgY2FsbGVkIGZyb20gQU1EIElPTU1VIGluaXQsIHdoaWNoIGFsc28gY2hlY2tzIGAhY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAuIGBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbygpYCBhbHNvIG5lZWRzIGEgcGh5c2ljYWwgQU1EIFplbjMrIENQVS5cbjUuICBgZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY2A6IGBfX3Nldl9zbnBfaW5pdF9sb2NrZWRgICppbW1lZGlhdGVseSogY2hlY2tzIGZvciBgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKWAgYW5kIGJhaWxzIG91dCBpZiBpdCdzIG5vdCBwcmVzZW50LlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0ICpub25lKiBvZiB0aGlzIGNvZGUgY2FuIGV4ZWN1dGUgYmVjYXVzZSB0aGUgY29yZSBwcmVyZXF1aXNpdGVzIGFyZSBhYnNlbnQgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gUUVNVSBhbmQgR0NFICpleHBsaWNpdGx5KiBleHBvc2UgYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgLCB3aGljaCAqZGlzYWJsZXMqIHRoZSBuZWNlc3NhcnkgQU1EIFNOUCBob3N0IHBsYXRmb3JtIHN1cHBvcnQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGd1aWRlbGluZXMsIHRoaXMgaXMgKipzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqKiBoYXJkd2FyZS4gSXQgcmVxdWlyZXMgc3BlY2lmaWMsIHBoeXNpY2FsIEFNRCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblNvLCBzZXR0aW5nIHRoZSBwYXJhbWV0ZXJzIGZvciBvdXIgdG9vbDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIGBmYWxzZWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYG51bGxgIG9yIGBbXWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgbnVsbGAgb3IgYFtdYFxuKiAgICoqUmVhc29uaW5nOioqIFwiTW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gUk1QT1BUIGFuZCBTRVYtU05QIGhvc3QgZnVuY3Rpb25hbGl0eSByZXF1aXJlIGJhcmUtbWV0YWwgQU1EIHBoeXNpY2FsIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQuICBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgd2hlbiBydW5uaW5nIHVuZGVyIGEgaHlwZXJ2aXNvciAoYFg4Nl9GRUFUVVJFX0hZUEVSVklTT1JgKS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQyOCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjU0OjA3LjY4ODc1MzQ0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIChSTVAgb3B0aW1pemF0aW9uKSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyBTRVYtU05QIGhvc3QgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gcGF0aHMuIEFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIHJlcXVpcmUgQU1EIFNFVi1TTlAgaG9zdCBzdXBwb3J0IChDQ19BVFRSX0hPU1RfU0VWX1NOUCkgYW5kIGhhcmR3YXJlLXNwZWNpZmljIENQVS9maXJtd2FyZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgWDg2X0ZFQVRVUkVfUk1QT1BUIGFuZCBTZWdtZW50ZWQgUk1QKS4gSW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUiBpcyBwcmVzZW50IHdoaWNoIHByZXZlbnRzIENDX0FUVFJfSE9TVF9TRVZfU05QIGZyb20gYmVpbmcgZW5hYmxlZCAoaW4gYnNwX2RldGVybWluZV9zbnAoKSksIG1ha2luZyBhbGwgbW9kaWZpZWQgbG9naWMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgcGh5c2ljYWwgYmFyZS1tZXRhbCBBTUQgaGFyZHdhcmUgc3VwcG9ydGluZyBTRVYtU05QIGFuZCBSTVBPUFQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCAoUk1QIG9wdGltaXphdGlvbikgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgU0VWLVNOUCBob3N0IGluaXRpYWxpemF0aW9uL3RlYXJkb3duIHBhdGhzLiBBbGwgbW9kaWZpZWQgY29kZSBwYXRocyByZXF1aXJlIEFNRCBTRVYtU05QIGhvc3Qgc3VwcG9ydCAoQ0NfQVRUUl9IT1NUX1NFVl9TTlApIGFuZCBoYXJkd2FyZS1zcGVjaWZpYyBDUFUvZmlybXdhcmUgY2FwYWJpbGl0aWVzIChzdWNoIGFzIFg4Nl9GRUFUVVJFX1JNUE9QVCBhbmQgU2VnbWVudGVkIFJNUCkuIEluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgaXMgcHJlc2VudCB3aGljaCBwcmV2ZW50cyBDQ19BVFRSX0hPU1RfU0VWX1NOUCBmcm9tIGJlaW5nIGVuYWJsZWQgKGluIGJzcF9kZXRlcm1pbmVfc25wKCkpLCBtYWtpbmcgYWxsIG1vZGlmaWVkIGxvZ2ljIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IHBoeXNpY2FsIGJhcmUtbWV0YWwgQU1EIGhhcmR3YXJlIHN1cHBvcnRpbmcgU0VWLVNOUCBhbmQgUk1QT1BULlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6NTQ6MDcuNjg4ODE2OTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcd5n2[1] Phase: Running StartedAt: 2026-09-10 22:54:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcd5n2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 22:54:18 +0000 UTC FinishedAt: 2026-09-10 22:54:24 +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,}