Name: series-workflow8frd9 Phase: Failed StartedAt: 2026-07-08 03:54:19 +0000 UTC FinishedAt: 2026-07-08 04:03:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8frd9[0] Phase: Succeeded StartedAt: 2026-07-08 03:54:19 +0000 UTC FinishedAt: 2026-07-08 04:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8frd9[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 03:54:19 +0000 UTC FinishedAt: 2026-07-08 04:03:00 +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+CgkJCTx0ZD4yMDI2LzA3LzA4IDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDQ6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNDowMjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTE3MzAwZGQ1ODljNGYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0xMjQ5LDYgJiM0MzsxMjQ5LDMxIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxuIFx0XHRcdFtIV10gTWF4aW11bSBjb25maWd1cmFibGUgZmFuIHNwZWVkLlxuIFxuJiM0MztcdGRldmxpbmtfZXN3aXRjaF9tb2RlPVxuJiM0MztcdFx0XHRbTkVUXVxuJiM0MztcdFx0XHRGb3JtYXQ6XG4mIzQzO1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlPVx1MDAzY21vZGVcdTAwM2VcbiYjNDM7XG4mIzQzO1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlOlxuJiM0MztcdFx0XHQqIHwgXHUwMDNjaGFuZGxlXHUwMDNlWyxcdTAwM2NoYW5kbGVcdTAwM2UuLi5dXG4mIzQzO1xuJiM0MztcdFx0XHRcdTAwM2NoYW5kbGVcdTAwM2U6XG4mIzQzO1x0XHRcdFx1MDAzY2J1cy1uYW1lXHUwMDNlL1x1MDAzY2Rldi1uYW1lXHUwMDNlXG4mIzQzO1xuJiM0MztcdFx0XHRDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmdcbiYjNDM7XHRcdFx0ZGV2bGluayBpbnN0YW5jZXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5cbiYjNDM7XG4mIzQzO1x0XHRcdFx1MDAzY21vZGVcdTAwM2U6XG4mIzQzO1x0XHRcdGxlZ2FjeSB8IHN3aXRjaGRldiB8IHN3aXRjaGRldl9pbmFjdGl2ZVxuJiM0MztcbiYjNDM7XHRcdFx0RXhhbXBsZXM6XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcbiYjNDM7XG4mIzQzO1x0XHRcdFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxuJiM0MztcdFx0XHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxuJiM0MztcbiBcdGRmbHRjYz1cdFx0W0hXLFMzOTBdXG4gXHRcdFx0Rm9ybWF0OiB7IG9uIHwgb2ZmIHwgZGVmX29ubHkgfCBpbmZfb25seSB8IGFsd2F5cyB9XG4gXHRcdFx0b246ICAgICAgIHMzOTAgemxpYiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBvblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3Rcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzgwYzllOTkyMTBlMzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0XG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGVcbiYjNDM7a2VybmVsIGNvbW1hbmQgbGluZSBhbmQgYXBwbGllZCB0byBtYXRjaGluZyBkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlXG4mIzQzO2luaXRpYWxpemF0aW9uLlxuJiM0MztcbiYjNDM7VGhlIGRldmxpbmsgZGV2aWNlIGlzIHNlbGVjdGVkIGJ5IGl0cyBkZXZsaW5rIGhhbmRsZS4gRm9yIFBDSSBkZXZpY2VzIHRoaXMgaXNcbiYjNDM7dGhlIHNhbWUgaGFuZGxlIHNob3duIGJ5IGBgZGV2bGluayBkZXYgc2hvd2BgLCBmb3IgZXhhbXBsZVxuJiM0MztgYHBjaS8wMDAwOjA4OjAwLjBgYC5cbiYjNDM7XG4mIzQzO0tlcm5lbCBjb21tYW5kIGxpbmUgc3ludGF4XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztEZWZhdWx0cyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgZGV2bGlua19lc3dpdGNoX21vZGU9YGAga2VybmVsIGNvbW1hbmQgbGluZVxuJiM0MztwYXJhbWV0ZXIuXG4mIzQzO1xuJiM0MztUaGUgZ2VuZXJhbCBzeW50YXggaXM6OlxuJiM0MztcbiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cdTAwM2NzZWxlY3Rvclx1MDAzZT1cdTAwM2Ntb2RlXHUwMDNlXG4mIzQzO1xuJiM0MztgYFx1MDAzY3NlbGVjdG9yXHUwMDNlYGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6XG4mIzQzO1xuJiM0MzsgICogfCBcdTAwM2NidXMtbmFtZVx1MDAzZS9cdTAwM2NkZXYtbmFtZVx1MDAzZVssXHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2UuLi5dXG4mIzQzO1xuJiM0MztgYCpgYCBhcHBsaWVzIHRoZSBtb2RlIHRvIGV2ZXJ5IGRldmxpbmsgaW5zdGFuY2UuIEFsbCBoYW5kbGVzIGluIHRoZSBzYW1lXG4mIzQzO3NlbGVjdG9yIHJlY2VpdmUgdGhlIHNhbWUgZXN3aXRjaCBtb2RlLlxuJiM0MztcbiYjNDM7YGBcdTAwM2Ntb2RlXHUwMDNlYGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC5cbiYjNDM7XG4mIzQzO1N5bnRheCBydWxlc1xuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxuJiM0MztcbiYjNDM7KiBTcGVjaWZ5IHRoZSBkZWZhdWx0IGluIG9uZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlci4gUmVwZWF0ZWRcbiYjNDM7ICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cbiYjNDM7KiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXG4mIzQzOyAgc2l6ZS5cbiYjNDM7KiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuJiM0MzsqIGBgXHUwMDNjc2VsZWN0b3JcdTAwM2VgYCBtdXN0IGJlIGVpdGhlciBgYCpgYCBvciBhIGhhbmRsZSBsaXN0LiBgYCpgYCBjYW5ub3QgYmVcbiYjNDM7ICBjb21iaW5lZCB3aXRoIGV4cGxpY2l0IGhhbmRsZXMuXG4mIzQzOyogYGBcdTAwM2NidXMtbmFtZVx1MDAzZWBgIGFuZCBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXG4mIzQzOyogYGBcdTAwM2NkZXYtbmFtZVx1MDAzZWBgIG1heSBjb250YWluIGBgOmBgLiBUaGlzIGFsbG93cyBQQ0kgbmFtZXMgc3VjaCBhc1xuJiM0MzsgIGBgMDAwMDowODowMC4wYGAuXG4mIzQzOyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLlxuJiM0MzsqIEEgY29tbWEgc2VwYXJhdGVzIGhhbmRsZXMuXG4mIzQzOyogQ29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpc1xuJiM0MzsgIGlnbm9yZWQuXG4mIzQzO1xuJiM0MztUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGluayBkZXYgZXN3aXRjaCBzZXQgXHUwMDNjaGFuZGxlXHUwMDNlIG1vZGUgXHUwMDNjdmFsdWVcdTAwM2VcbiYjNDM7XG4mIzQzO1xuJiM0MztFeGFtcGxlc1xuJiM0Mzs9PT09PT09PVxuJiM0MztcbiYjNDM7U2V0IGFsbCBkZXZsaW5rIGluc3RhbmNlcyB0byBzd2l0Y2hkZXYgbW9kZTo6XG4mIzQzO1xuJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XG4mIzQzO1xuJiM0MztTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXZcbiYjNDM7XG4mIzQzO1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxuJiM0MztcbiYjNDM7VGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGJlY2F1c2UgY29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdFxuJiM0MztzdXBwb3J0ZWQ6OlxuJiM0MztcbiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldixwY2kvMDAwMDowOTowMC4wPXN3aXRjaGRldl9pbmFjdGl2ZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjEzNGQyZjMxOTkyMmMyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBnZW5lcmFsLlxuICAgIDptYXhkZXB0aDogMVxuIFxuICAgIGRldmxpbmstZHBpcGVcbiYjNDM7ICAgZGV2bGluay1kZWZhdWx0c1xuICAgIGRldmxpbmstZXN3aXRjaC1hdHRyXG4gICAgZGV2bGluay1mbGFzaFxuICAgIGRldmxpbmstaGVhbHRoXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuY1xuaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXG5AQCAtMjM4LDI0ICYjNDM7MjM4LDMwIEBAIHN0YXRpYyB2b2lkIG1seDVfZndfcmVzZXRfY29tcGxldGVfcmVsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfZndfcmVzZXQgKmZ3X3Jlc2V0ID0gZGV2LVx1MDAzZXByaXYuZndfcmVzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXG4gXHRpZiAodGVzdF9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19QRU5ESU5HX0NPTVAsIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsXG4mIzQzO1x0XHRcdCAgXHUwMDI2ZndfcmVzZXQtXHUwMDNlcmVzZXRfZmxhZ3MpO1xuIFx0XHRjb21wbGV0ZShcdTAwMjZmd19yZXNldC1cdTAwM2Vkb25lKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcbi1cdFx0aWYgKG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldikpXG4tXHRcdFx0bWx4NV9jb3JlX2VycihkZXYsIFwmIzM0O3Jlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcblwmIzM0Oyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRtbHg1X2xvYWRfb25lKGRldiwgdHJ1ZSk7XG4tXHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbi1cdFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXG4tXHRcdFx0XHRcdFx0XHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpIHxcbi1cdFx0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRldfQUNUSVZBVEUpKTtcbi1cdFx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0bWx4NV9zeW5jX3Jlc2V0X3VubG9hZF9mbG93KGRldiwgZmFsc2UpO1xuJiM0MztcdGVyciA9IG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldik7XG4mIzQzO1xuJiM0MztcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdGNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLCBcdTAwMjZmd19yZXNldC1cdTAwM2VyZXNldF9mbGFncyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIoZGV2LCBcJiMzNDtyZXNldCByZWxvYWQgZmxvdyBhYm9ydGVkLCBQQ0kgcmVhZHMgc3RpbGwgbm90IHdvcmtpbmdcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXG4mIzQzO1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuJiM0MztcdFx0XHRcdFx0XHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XG4mIzQzO1x0ZGV2bF91bmxvY2soZGV2bGluayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVfc3RvcF9zeW5jX3Jlc2V0X3BvbGwoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuQEAgLTEzOTIsNiAmIzQzOzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG1seDVfZnJlZV9iZnJlZyhkZXYsIFx1MDAyNmRldi1cdTAwM2Vwcml2LmJmcmVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIU1MWDVfRVNXSVRDSF9NQU5BR0VSKGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XHRkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4gXHRib29sIGxpZ2h0X3Byb2JlID0gbWx4NV9kZXZfaXNfbGlnaHR3ZWlnaHQoZGV2KTtcbkBAIC0xNDcxLDYgJiM0MzsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGVyciA9IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoZGV2KTtcbiBcdGlmIChlcnIpXG4gXHRcdGRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtbHg1X2RldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXYpO1xuIHVubG9jazpcbiBcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kZXZsaW5rLmggYi9pbmNsdWRlL25ldC9kZXZsaW5rLmhcbmluZGV4IGZmZTFhZDVmYjcwYmI4Li45MGRhMDNjMDExMmNiYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXG5AQCAtMTY2MSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsXG4gXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiYjNDM7dm9pZCBkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bGlua19yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9NYWtlZmlsZSBiL25ldC9kZXZsaW5rL01ha2VmaWxlXG5pbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcbkBAIC0xLDQgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4tb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbiYjNDM7b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIGRlZmF1bHQubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4gXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xuaW5kZXggYzUzYTQyZTE3YTU4OWQuLjlkOWNjNDA2MjZmYzMzIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9jb3JlLmNcbkBAIC0zMTcsNiAmIzQzOzMxNyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdHJ5bG9jayk7XG4gXG4gdm9pZCBkZXZsX3VubG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiB7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoZGV2bGluayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF91bmxvY2spO1xuQEAgLTQyOSw2ICYjNDM7NDMwLDcgQEAgdm9pZCBkZXZsX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4gXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xuIFx0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuIFxuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0ZGV2bGlua19ub3RpZnlfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiBcdHhhX2NsZWFyX21hcmsoXHUwMDI2ZGV2bGlua3MsIGRldmxpbmstXHUwMDNlaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XG4gXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XG5AQCAtNDkwLDYgJiM0Mzs0OTIsNyBAQCBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2bGluay1cdTAwM2V0cmFwX2dyb3VwX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2bGluay1cdTAwM2V0cmFwX3BvbGljZXJfbGlzdCk7XG4gXHRJTklUX1JDVV9XT1JLKFx1MDAyNmRldmxpbmstXHUwMDNlcndvcmssIGRldmxpbmtfcmVsZWFzZSk7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7XG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jaywgXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrX2tleSk7XG5AQCAtNTM3LDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiBcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdFdBUk5fT04oZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBOVUxMLCBOVUxMKSk7XG4gXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoZGV2bGluayk7XG4mIzQzO1xuIFx0ZGV2bGlua19yZWxfcHV0KGRldmxpbmspO1xuIFxuIFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZkZXZsaW5rLVx1MDAzZXRyYXBfcG9saWNlcl9saXN0KSk7XG5AQCAtNTk4LDYgJiM0Mzs2MDQsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGV2bGlua19pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdCgpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC02MTMsNyAmIzQzOzYyMywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcbiBvdXRfdW5yZWdfcGVybmV0X3N1YnN5czpcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZkZXZsaW5rX3Blcm5ldF9vcHMpO1xuIG91dDpcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTtcbiBcdFdBUk5fT04oZXJyKTtcbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZWZhdWx0LmMgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWEzN2Q3NjczMWUxZDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuY1xuQEAgLTAsMCAmIzQzOzEsMzY0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OIFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RldmxfaW50ZXJuYWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbTtcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbDtcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQ7XG4mIzQzO3N0YXRpYyBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZTtcbiYjNDM7c3RhdGljIExJU1RfSEVBRChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdGNoYXIgKmJ1c19uYW1lO1xuJiM0MztcdGNoYXIgKmRldl9uYW1lO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKGNvbnN0IGNoYXIgKnN0cixcbiYjNDM7XHRcdFx0XHQgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgKm1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN0cmNtcChzdHIsIFwmIzM0O2xlZ2FjeVwmIzM0OykpIHtcbiYjNDM7XHRcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc3RyY21wKHN0ciwgXCYjMzQ7c3dpdGNoZGV2XCYjMzQ7KSkge1xuJiM0MztcdFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDtzd2l0Y2hkZXZfaW5hY3RpdmVcJiMzNDspKSB7XG4mIzQzO1x0XHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0XG4mIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoY2hhciAqaGFuZGxlLCBjaGFyICoqYnVzX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgY2hhciAqKmRldl9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqc2xhc2g7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEqaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGZvciAocCA9IGhhbmRsZTsgKnA7IHAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTsqJiMzOTsgfHwgKnAgPT0gJiMzOTs9JiMzOTspXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2xhc2ggPSBzdHJjaHIoaGFuZGxlLCAmIzM5Oy8mIzM5Oyk7XG4mIzQzO1x0aWYgKCFzbGFzaCB8fCBzbGFzaCA9PSBoYW5kbGUgfHwgIXNsYXNoWzFdKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHN0cmNocihzbGFzaCAmIzQzOyAxLCAmIzM5Oy8mIzM5OykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0KnNsYXNoID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0KmJ1c19uYW1lID0gaGFuZGxlO1xuJiM0MztcdCpkZXZfbmFtZSA9IHNsYXNoICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKlxuJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGNvbnN0IGNoYXIgKmJ1c19uYW1lLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmICghc3RyY21wKG5vZGUtXHUwMDNlYnVzX25hbWUsIGJ1c19uYW1lKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5vZGUtXHUwMDNlZGV2X25hbWUsIGRldl9uYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIG5vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfYWRkKGNvbnN0IGNoYXIgKmJ1c19uYW1lLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZpbmQoYnVzX25hbWUsIGRldl9uYW1lKSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiYjNDM7XHRub2RlID0ga3phbGxvY19vYmooKm5vZGUpO1xuJiM0MztcdGlmICghbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdG5vZGUtXHUwMDNlYnVzX25hbWUgPSBrc3RyZHVwKGJ1c19uYW1lLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRub2RlLVx1MDAzZWRldl9uYW1lID0ga3N0cmR1cChkZXZfbmFtZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFub2RlLVx1MDAzZWJ1c19uYW1lIHx8ICFub2RlLVx1MDAzZWRldl9uYW1lKSB7XG4mIzQzO1x0XHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbiYjNDM7XHRcdGtmcmVlKG5vZGUtXHUwMDNlZGV2X25hbWUpO1xuJiM0MztcdFx0a2ZyZWUobm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShjaGFyICpoYW5kbGVzKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqaGFuZGxlO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc3RyY21wKGhhbmRsZXMsIFwmIzM0OypcJiMzNDspKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChoYW5kbGUgPSBzdHJzZXAoXHUwMDI2aGFuZGxlcywgXCYjMzQ7LFwmIzM0OykpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGNoYXIgKmJ1c19uYW1lO1xuJiM0MztcdFx0Y2hhciAqZGV2X25hbWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZV9wYXJzZShoYW5kbGUsIFx1MDAyNmJ1c19uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfbmFtZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZnJlZShzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbiYjNDM7XHRrZnJlZShub2RlLVx1MDAzZWRldl9uYW1lKTtcbiYjNDM7XHRrZnJlZShub2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlX3RtcDtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBub2RlX3RtcCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzLCBsaXN0KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZnJlZShub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwgPSBmYWxzZTtcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTtcbiYjNDM7XHRjaGFyICpzZXBhcmF0b3I7XG4mIzQzO1x0Y2hhciAqaGFuZGxlcztcbiYjNDM7XHRjaGFyICptb2RlO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKnN0cilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzZXBhcmF0b3IgPSBzdHJyY2hyKHN0ciwgJiMzOTs9JiMzOTspO1xuJiM0MztcdGlmICghc2VwYXJhdG9yIHx8IHNlcGFyYXRvciA9PSBzdHIgfHwgIXNlcGFyYXRvclsxXSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQqc2VwYXJhdG9yID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRoYW5kbGVzID0gc3RyO1xuJiM0MztcdG1vZGUgPSBzZXBhcmF0b3IgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsIFx1MDAyNmVzd19tb2RlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZSA9IGVzd19tb2RlO1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqYnVzX25hbWUgPSBkZXZsaW5rX2J1c19uYW1lKGRldmxpbmspO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRldl9uYW1lID0gZGV2bGlua19kZXZfbmFtZShkZXZsaW5rKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSk7XG4mIzQzO1x0cmV0dXJuICEhbm9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVx1MDAzZW9wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKGRldmxpbmspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KSB7XG4mIzQzO1x0XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpXG4mIzQzO1x0XHRcdGRldmxfd2FybihkZXZsaW5rLFxuJiM0MztcdFx0XHRcdCAgXCYjMzQ7ZGV2bGlua19lc3dpdGNoX21vZGU9IHNlbGVjdGVkIHRoaXMgZGV2aWNlIGJ1dCBlc3dpdGNoIG1vZGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGUsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZsX3dhcm4oZGV2bGluayxcbiYjNDM7XHRcdFx0ICBcJiMzNDtDb3VsZG4mIzM5O3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBlcnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyB8fFxuJiM0MztcdCAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFkZXZsaW5rX3RyeV9nZXQoZGV2bGluaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFxdWV1ZV93b3JrKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSxcbiYjNDM7XHRcdFx0XHUwMDI2ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxuJiM0MztcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZsaW5rLFxuJiM0MztcdFx0XHQgICAgICAgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bF9sb2NrKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZykge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XHRcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjNDM7XHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayxcbiYjNDM7XHRcdCAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xuJiM0MztcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSAtIEFwcGx5IGRldmxpbmsgZXN3aXRjaCBtb2RlIGJvb3QgZGVmYXVsdFxuJiM0MzsgKiBAZGV2bGluazogZGV2bGlua1xuJiM0MzsgKlxuJiM0MzsgKiBBcHBseSB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgc2VsZWN0ZWQgYnkgdGhlIGRldmxpbmtfZXN3aXRjaF9tb2RlPVxuJiM0MzsgKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciwgaWYgYW55IG1hdGNoZXMgQGRldmxpbmsuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBkZXZsaW5rIGluc3RhbmNlIGxvY2suXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7XG4mIzQzO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxuJiM0MztcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7X19zZXR1cChcJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cJiMzNDssIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cCk7XG4mIzQzO1xuJiM0MztpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkZWY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJzZShkZWYpO1xuJiM0MztcdGtmcmVlKGRlZik7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUVYSVNUKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkdXBsaWNhdGUgZXN3aXRjaCBtb2RlIGhhbmRsZXMgaWdub3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKGVyciA9PSAtRUlOVkFMKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBpbnZhbGlkIGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pIHtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O2Rldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSBpZiAoZXJyKSB7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAwKTtcbiYjNDM7XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSkge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpO1xuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggYmNmMDAxNTU0ZTg0MDIuLjYxMWJiNmJmZDQ5MmJmIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtNDc4LDYgJiM0Mzs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXHUwMDI2IEJJVChhY3Rpb24pKSk7XG4mIzQzO1x0aWYgKCphY3Rpb25zX3BlcmZvcm1lZCBcdTAwMjYgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBDYXRjaCBkcml2ZXIgb24gdXBkYXRpbmcgdGhlIHJlbW90ZSBhY3Rpb24gd2l0aGluIGRldmxpbmsgcmVsb2FkICovXG4gXHRXQVJOX09OKG1lbWNtcChyZW1vdGVfcmVsb2FkX3N0YXRzLCBkZXZsaW5rLVx1MDAzZXN0YXRzLnJlbW90ZV9yZWxvYWRfc3RhdHMsXG4gXHRcdCAgICAgICBzaXplb2YocmVtb3RlX3JlbG9hZF9zdGF0cykpKTtcbkBAIC03MDIsNiAmIzQzOzcwNywyNSBAQCBpbnQgZGV2bGlua19ubF9lc3dpdGNoX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIG1vZGUsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVx1MDAzZW9wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4mIzQzO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgZGV2bGlua19yYXRlX2lzX25vZGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBleHRhY2spO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVx1MDAzZWRldmxpbms7XG5AQCAtNzEyLDE0ICYjNDM7NzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0dTE2IG1vZGU7XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSkge1xuLVx0XHRpZiAoIW9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KVxuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdFx0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0XHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7XG4tXHRcdGVyciA9IG9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmggYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmhcbmluZGV4IGNkZjg5NGJhNWE5ZDdlLi5jMmJlZTVhYWJkNDliNCAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXG5AQCAtNTgsOCAmIzQzOzU4LDEwIEBAIHN0cnVjdCBkZXZsaW5rIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xuIFx0dTggcmVsb2FkX2ZhaWxlZDoxO1xuJiM0MztcdHU4IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZzoxO1xuIFx0cmVmY291bnRfdCByZWZjb3VudDtcbiBcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrO1xuIFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWw7XG4gXHRzdHJ1Y3QgeGFycmF5IG5lc3RlZF9yZWxzO1xuIFx0Y2hhciBwcml2W10gX19hbGlnbmVkKE5FVERFVl9BTElHTik7XG5AQCAtNzEsNiAmIzQzOzczLDEzIEBAIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZGV2bGlua19ubF9mYW1pbHk7XG4gc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRldl9kcml2ZXIpO1xuJiM0MztpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIFxuICNkZWZpbmUgZGV2bF93YXJuKGRldmxpbmssIGZvcm1hdCwgYXJncy4uLilcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtMzQ4LDYgJiM0MzszNTcsOSBAQCBib29sIGRldmxpbmtfcmF0ZV9pc19ub2RlKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKmRldmxpbmtfcmF0ZSk7XG4gaW50IGRldmxpbmtfcmF0ZXNfY2hlY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdFx0Ym9vbCAoKnJhdGVfZmlsdGVyKShjb25zdCBzdHJ1Y3QgZGV2bGlua19yYXRlICopLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gLyogTGluZWNhcmRzICovXG4gdW5zaWduZWQgaW50IGRldmxpbmtfbGluZWNhcmRfaW5kZXgoc3RydWN0IGRldmxpbmtfbGluZWNhcmQgKmxpbmVjYXJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJvb3QtdGltZSBrZXJuZWwgcGFyYW1ldGVyIGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gIHRvIHNldCB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gVGhlIHBhcnNpbmcgbG9naWMgaXMgbWFya2VkIGFzIGBfX2luaXRgIGFuZCBvbmx5IHJ1bnMgZHVyaW5nIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgcnVudGltZSBmdXp6aW5nLiBUaGUgcnVudGltZSBsb2dpYyBpcyBnYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBib290IHBhcmFtZXRlciwgd2hpY2ggc3l6a2FsbGVyIHdpbGwgbm90IHByb3ZpZGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtbHg1IGRyaXZlciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwNDowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjExNzMwMGRkNTg5YzRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTI0OSw2ICYjNDM7MTI0OSwzMSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCWRlbGxfc21tX2h3bW9uLmZhbl9tYXg9CiAJCQlbSFddIE1heGltdW0gY29uZmlndXJhYmxlIGZhbiBzcGVlZC4KIAomIzQzOwlkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0KJiM0MzsJCQlbTkVUXQomIzQzOwkJCUZvcm1hdDoKJiM0MzsJCQkmbHQ7c2VsZWN0b3ImZ3Q7PSZsdDttb2RlJmd0OwomIzQzOwomIzQzOwkJCSZsdDtzZWxlY3RvciZndDs6CiYjNDM7CQkJKiB8ICZsdDtoYW5kbGUmZ3Q7WywmbHQ7aGFuZGxlJmd0Oy4uLl0KJiM0MzsKJiM0MzsJCQkmbHQ7aGFuZGxlJmd0OzoKJiM0MzsJCQkmbHQ7YnVzLW5hbWUmZ3Q7LyZsdDtkZXYtbmFtZSZndDsKJiM0MzsKJiM0MzsJCQlDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmcKJiM0MzsJCQlkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLgomIzQzOwomIzQzOwkJCSZsdDttb2RlJmd0OzoKJiM0MzsJCQlsZWdhY3kgfCBzd2l0Y2hkZXYgfCBzd2l0Y2hkZXZfaW5hY3RpdmUKJiM0MzsKJiM0MzsJCQlFeGFtcGxlczoKJiM0MzsJCQlkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0qPXN3aXRjaGRldgomIzQzOwkJCWRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2CiYjNDM7CQkJZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZQomIzQzOwomIzQzOwkJCVNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdAomIzQzOwkJCWZvciB0aGUgZnVsbCBzeW50YXguCiYjNDM7CiAJZGZsdGNjPQkJW0hXLFMzOTBdCiAJCQlGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH0KIAkJCW9uOiAgICAgICBzMzkwIHpsaWIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY29tcHJlc3Npb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4MGM5ZTk5MjEwZTM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGUKJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2UKJiM0Mztpbml0aWFsaXphdGlvbi4KJiM0MzsKJiM0MztUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpcwomIzQzO3RoZSBzYW1lIGhhbmRsZSBzaG93biBieSBgYGRldmxpbmsgZGV2IHNob3dgYCwgZm9yIGV4YW1wbGUKJiM0MztgYHBjaS8wMDAwOjA4OjAwLjBgYC4KJiM0MzsKJiM0MztLZXJuZWwgY29tbWFuZCBsaW5lIHN5bnRheAomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RGVmYXVsdHMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIGtlcm5lbCBjb21tYW5kIGxpbmUKJiM0MztwYXJhbWV0ZXIuCiYjNDM7CiYjNDM7VGhlIGdlbmVyYWwgc3ludGF4IGlzOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSZsdDtzZWxlY3RvciZndDs9Jmx0O21vZGUmZ3Q7CiYjNDM7CiYjNDM7YGAmbHQ7c2VsZWN0b3ImZ3Q7YGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6CiYjNDM7CiYjNDM7ICAqIHwgJmx0O2J1cy1uYW1lJmd0Oy8mbHQ7ZGV2LW5hbWUmZ3Q7WywmbHQ7YnVzLW5hbWUmZ3Q7LyZsdDtkZXYtbmFtZSZndDsuLi5dCiYjNDM7CiYjNDM7YGAqYGAgYXBwbGllcyB0aGUgbW9kZSB0byBldmVyeSBkZXZsaW5rIGluc3RhbmNlLiBBbGwgaGFuZGxlcyBpbiB0aGUgc2FtZQomIzQzO3NlbGVjdG9yIHJlY2VpdmUgdGhlIHNhbWUgZXN3aXRjaCBtb2RlLgomIzQzOwomIzQzO2BgJmx0O21vZGUmZ3Q7YGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC4KJiM0MzsKJiM0MztTeW50YXggcnVsZXMKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztUaGUgZm9sbG93aW5nIHN5bnRheCBydWxlcyBhcHBseToKJiM0MzsKJiM0MzsqIFNwZWNpZnkgdGhlIGRlZmF1bHQgaW4gb25lIGBgZGV2bGlua19lc3dpdGNoX21vZGU9YGAgcGFyYW1ldGVyLiBSZXBlYXRlZAomIzQzOyAgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBwYXJhbWV0ZXJzIGFyZSBub3QgYWNjdW11bGF0ZWQuCiYjNDM7KiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCiYjNDM7ICBzaXplLgomIzQzOyogV2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCB3aXRoaW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4KJiM0MzsqIGBgJmx0O3NlbGVjdG9yJmd0O2BgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZQomIzQzOyAgY29tYmluZWQgd2l0aCBleHBsaWNpdCBoYW5kbGVzLgomIzQzOyogYGAmbHQ7YnVzLW5hbWUmZ3Q7YGAgYW5kIGBgJmx0O2Rldi1uYW1lJmd0O2BgIG11c3Qgbm90IGJlIGVtcHR5LgomIzQzOyogYGAmbHQ7ZGV2LW5hbWUmZ3Q7YGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzCiYjNDM7ICBgYDAwMDA6MDg6MDAuMGBgLgomIzQzOyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLgomIzQzOyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy4KJiM0MzsqIENvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgomIzQzOyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpcwomIzQzOyAgaWdub3JlZC4KJiM0MzsKJiM0MztUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjoKJiM0MzsKJiM0MzsgIGRldmxpbmsgZGV2IGVzd2l0Y2ggc2V0ICZsdDtoYW5kbGUmZ3Q7IG1vZGUgJmx0O3ZhbHVlJmd0OwomIzQzOwomIzQzOwomIzQzO0V4YW1wbGVzCiYjNDM7PT09PT09PT0KJiM0MzsKJiM0MztTZXQgYWxsIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBtb2RlOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2CiYjNDM7CiYjNDM7U2V0IG9uZSBQQ0kgZGV2bGluayBpbnN0YW5jZSB0byBzd2l0Y2hkZXYgbW9kZTo6CiYjNDM7CiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldgomIzQzOwomIzQzO1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmUKJiM0MzsKJiM0MztUaGUgZm9sbG93aW5nIGlzIGludmFsaWQgYmVjYXVzZSBjb21tYS1zZXBhcmF0ZWQgZGVmYXVsdCBhc3NpZ25tZW50cyBhcmUgbm90CiYjNDM7c3VwcG9ydGVkOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2LHBjaS8wMDAwOjA5OjAwLjA9c3dpdGNoZGV2X2luYWN0aXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjEzNGQyZjMxOTkyMmMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CkBAIC01Niw2ICYjNDM7NTYsNyBAQCBnZW5lcmFsLgogICAgOm1heGRlcHRoOiAxCiAKICAgIGRldmxpbmstZHBpcGUKJiM0MzsgICBkZXZsaW5rLWRlZmF1bHRzCiAgICBkZXZsaW5rLWVzd2l0Y2gtYXR0cgogICAgZGV2bGluay1mbGFzaAogICAgZGV2bGluay1oZWFsdGgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmMKaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYwpAQCAtMjM4LDI0ICYjNDM7MjM4LDMwIEBAIHN0YXRpYyB2b2lkIG1seDVfZndfcmVzZXRfY29tcGxldGVfcmVsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1seDVfZndfcmVzZXQgKmZ3X3Jlc2V0ID0gZGV2LSZndDtwcml2LmZ3X3Jlc2V0OwogCXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7CiYjNDM7CWludCBlcnI7CiAKIAkvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovCiAJaWYgKHRlc3RfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUEVORElOR19DT01QLCAmYW1wO2Z3X3Jlc2V0LSZndDtyZXNldF9mbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLAomIzQzOwkJCSAgJmFtcDtmd19yZXNldC0mZ3Q7cmVzZXRfZmxhZ3MpOwogCQljb21wbGV0ZSgmYW1wO2Z3X3Jlc2V0LSZndDtkb25lKTsKLQl9IGVsc2UgewotCQltbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7Ci0JCWlmIChtbHg1X2hlYWx0aF93YWl0X3BjaV91cChkZXYpKQotCQkJbWx4NV9jb3JlX2VycihkZXYsICYjMzQ7cmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCW1seDVfbG9hZF9vbmUoZGV2LCB0cnVlKTsKLQkJZGV2bF9sb2NrKGRldmxpbmspOwotCQlkZXZsaW5rX3JlbW90ZV9yZWxvYWRfYWN0aW9uc19wZXJmb3JtZWQoZGV2bGluaywgMCwKLQkJCQkJCQlCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpIHwKLQkJCQkJCQlCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7Ci0JCWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwkJcmV0dXJuOwogCX0KIAomIzQzOwltbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7CiYjNDM7CWVyciA9IG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldik7CiYjNDM7CiYjNDM7CWRldmxfbG9jayhkZXZsaW5rKTsKIAljbGVhcl9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19SRVNFVF9JTl9QUk9HUkVTUywgJmFtcDtmd19yZXNldC0mZ3Q7cmVzZXRfZmxhZ3MpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbWx4NV9jb3JlX2VycihkZXYsICYjMzQ7cmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCW1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsCiYjNDM7CQkJCQkJQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSB8CiYjNDM7CQkJCQkJQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9GV19BQ1RJVkFURSkpOwomIzQzOwlkZXZsX3VubG9jayhkZXZsaW5rKTsKIH0KIAogc3RhdGljIHZvaWQgbWx4NV9zdG9wX3N5bmNfcmVzZXRfcG9sbChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKQEAgLTEzOTIsNiAmIzQzOzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAltbHg1X2ZyZWVfYmZyZWcoZGV2LCAmYW1wO2Rldi0mZ3Q7cHJpdi5iZnJlZyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2RldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7CiYjNDM7CWRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXZsaW5rKTsKJiM0Mzt9CiYjNDM7CiBpbnQgbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogewogCWJvb2wgbGlnaHRfcHJvYmUgPSBtbHg1X2Rldl9pc19saWdodHdlaWdodChkZXYpOwpAQCAtMTQ3MSw2ICYjNDM7MTQ4Miw4IEBAIGludCBtbHg1X2luaXRfb25lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJZXJyID0gbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChkZXYpOwogCWlmIChlcnIpCiAJCWRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTsKJiM0MzsJZWxzZQomIzQzOwkJbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTsKIHVubG9jazoKIAlkZXZsX3VubG9jayhkZXZsaW5rKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oCmluZGV4IGZmZTFhZDVmYjcwYmI4Li45MGRhMDNjMDExMmNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZGV2bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaApAQCAtMTY2MSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsCiAKIGludCBkZXZsX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7CiB2b2lkIGRldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwogdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwogdm9pZCBkZXZsaW5rX2ZyZWUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwpkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvTWFrZWZpbGUgYi9uZXQvZGV2bGluay9NYWtlZmlsZQppbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAotb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXAomIzQzO29iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBkZWZhdWx0Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcCiAJIHJlc291cmNlLm8gcGFyYW0ubyByZWdpb24ubyBoZWFsdGgubyB0cmFwLm8gcmF0ZS5vIGxpbmVjYXJkLm8gc2hfZGV2Lm8KZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuYwppbmRleCBjNTNhNDJlMTdhNTg5ZC4uOWQ5Y2M0MDYyNmZjMzMgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9jb3JlLmMKQEAgLTMxNyw2ICYjNDM7MzE3LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTsKIAogdm9pZCBkZXZsX3VubG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKIHsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoZGV2bGluayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2bGluay0mZ3Q7bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZsX3VubG9jayk7CkBAIC00MjksNiAmIzQzOzQzMCw3IEBAIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQogCUFTU0VSVF9ERVZMSU5LX1JFR0lTVEVSRUQoZGV2bGluayk7CiAJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwogCiYjNDM7CWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspOwogCWRldmxpbmtfbm90aWZ5X3VucmVnaXN0ZXIoZGV2bGluayk7CiAJeGFfY2xlYXJfbWFyaygmYW1wO2RldmxpbmtzLCBkZXZsaW5rLSZndDtpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTsKIAlkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7CkBAIC00OTAsNiAmIzQzOzQ5Miw3IEBAIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsIHNpemVfdCBwcml2X3NpemUsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZsaW5rLSZndDt0cmFwX2dyb3VwX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2bGluay0mZ3Q7dHJhcF9wb2xpY2VyX2xpc3QpOwogCUlOSVRfUkNVX1dPUksoJmFtcDtkZXZsaW5rLSZndDtyd29yaywgZGV2bGlua19yZWxlYXNlKTsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7CiAJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoJmFtcDtkZXZsaW5rLSZndDtsb2NrX2tleSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2RldmxpbmstJmd0O2xvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZhbXA7ZGV2bGluay0mZ3Q7bG9jaywgJmFtcDtkZXZsaW5rLSZndDtsb2NrX2tleSk7CkBAIC01MzcsNiAmIzQzOzU0MCw5IEBAIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQogCWRldmxfbG9jayhkZXZsaW5rKTsKIAlXQVJOX09OKGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgTlVMTCwgTlVMTCkpOwogCWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfY2xlYW51cChkZXZsaW5rKTsKJiM0MzsKIAlkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7CiAKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZhbXA7ZGV2bGluay0mZ3Q7dHJhcF9wb2xpY2VyX2xpc3QpKTsKQEAgLTU5OCw2ICYjNDM7NjA0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQoKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtkZXZsaW5rX3Blcm5ldF9vcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtNjEzLDcgJiM0Mzs2MjMsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGV2bGlua19pbml0KHZvaWQpCiBvdXRfdW5yZWdfcGVybmV0X3N1YnN5czoKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtkZXZsaW5rX3Blcm5ldF9vcHMpOwogb3V0OgomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTsKIAlXQVJOX09OKGVycik7CiYjNDM7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGVmYXVsdC5jIGIvbmV0L2RldmxpbmsvZGVmYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuYwpAQCAtMCwwICYjNDM7MSwzNjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OICZhbXA7IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2RldmxfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbTsKJiM0MztzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsOwomIzQzO3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkOwomIzQzO3N0YXRpYyBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3E7CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwljaGFyICpidXNfbmFtZTsKJiM0MzsJY2hhciAqZGV2X25hbWU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdAomIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV90b192YWx1ZShjb25zdCBjaGFyICpzdHIsCiYjNDM7CQkJCSAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSAqbW9kZSkKJiM0Mzt7CiYjNDM7CWlmICghc3RyY21wKHN0ciwgJiMzNDtsZWdhY3kmIzM0OykpIHsKJiM0MzsJCSptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJaWYgKCFzdHJjbXAoc3RyLCAmIzM0O3N3aXRjaGRldiYjMzQ7KSkgewomIzQzOwkJKm1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlpZiAoIXN0cmNtcChzdHIsICYjMzQ7c3dpdGNoZGV2X2luYWN0aXZlJiMzNDspKSB7CiYjNDM7CQkqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdAomIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoY2hhciAqaGFuZGxlLCBjaGFyICoqYnVzX25hbWUsCiYjNDM7CQkJCSAgICAgIGNoYXIgKipkZXZfbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKnNsYXNoOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlpZiAoISpoYW5kbGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChwID0gaGFuZGxlOyAqcDsgcCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgqcCA9PSAmIzM5OyomIzM5OyB8fCAqcCA9PSAmIzM5Oz0mIzM5OykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbGFzaCA9IHN0cmNocihoYW5kbGUsICYjMzk7LyYjMzk7KTsKJiM0MzsJaWYgKCFzbGFzaCB8fCBzbGFzaCA9PSBoYW5kbGUgfHwgIXNsYXNoWzFdKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzdHJjaHIoc2xhc2ggJiM0MzsgMSwgJiMzOTsvJiMzOTspKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpzbGFzaCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJKmJ1c19uYW1lID0gaGFuZGxlOwomIzQzOwkqZGV2X25hbWUgPSBzbGFzaCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqCiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHsKJiM0MzsJCWlmICghc3RyY21wKG5vZGUtJmd0O2J1c19uYW1lLCBidXNfbmFtZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzdHJjbXAobm9kZS0mZ3Q7ZGV2X25hbWUsIGRldl9uYW1lKSkKJiM0MzsJCQlyZXR1cm4gbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQKJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlOwomIzQzOwomIzQzOwlpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CW5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO25vZGUtJmd0O2xpc3QpOwomIzQzOwlub2RlLSZndDtidXNfbmFtZSA9IGtzdHJkdXAoYnVzX25hbWUsIEdGUF9LRVJORUwpOwomIzQzOwlub2RlLSZndDtkZXZfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW5vZGUtJmd0O2J1c19uYW1lIHx8ICFub2RlLSZndDtkZXZfbmFtZSkgewomIzQzOwkJa2ZyZWUobm9kZS0mZ3Q7YnVzX25hbWUpOwomIzQzOwkJa2ZyZWUobm9kZS0mZ3Q7ZGV2X25hbWUpOwomIzQzOwkJa2ZyZWUobm9kZSk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7bm9kZS0mZ3Q7bGlzdCwgJmFtcDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoY2hhciAqaGFuZGxlcykKJiM0Mzt7CiYjNDM7CWNoYXIgKmhhbmRsZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAoaGFuZGxlcywgJiMzNDsqJiMzNDspKSB7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdoaWxlICgoaGFuZGxlID0gc3Ryc2VwKCZhbXA7aGFuZGxlcywgJiMzNDssJiMzNDspKSAhPSBOVUxMKSB7CiYjNDM7CQljaGFyICpidXNfbmFtZTsKJiM0MzsJCWNoYXIgKmRldl9uYW1lOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZV9wYXJzZShoYW5kbGUsICZhbXA7YnVzX25hbWUsCiYjNDM7CQkJCQkJCSAgICAmYW1wO2Rldl9uYW1lKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCWVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQKJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CWtmcmVlKG5vZGUtJmd0O2J1c19uYW1lKTsKJiM0MzsJa2ZyZWUobm9kZS0mZ3Q7ZGV2X25hbWUpOwomIzQzOwlrZnJlZShub2RlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlX3RtcDsKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbm9kZV90bXAsCiYjNDM7CQkJCSAmYW1wO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlcywgbGlzdCkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtsaXN0KTsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZyZWUobm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IGZhbHNlOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTsKJiM0MzsJY2hhciAqc2VwYXJhdG9yOwomIzQzOwljaGFyICpoYW5kbGVzOwomIzQzOwljaGFyICptb2RlOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoISpzdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc2VwYXJhdG9yID0gc3RycmNocihzdHIsICYjMzk7PSYjMzk7KTsKJiM0MzsJaWYgKCFzZXBhcmF0b3IgfHwgc2VwYXJhdG9yID09IHN0ciB8fCAhc2VwYXJhdG9yWzFdKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpzZXBhcmF0b3IgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWhhbmRsZXMgPSBzdHI7CiYjNDM7CW1vZGUgPSBzZXBhcmF0b3IgJiM0MzsgMTsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsICZhbXA7ZXN3X21vZGUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqYnVzX25hbWUgPSBkZXZsaW5rX2J1c19uYW1lKGRldmxpbmspOwomIzQzOwljb25zdCBjaGFyICpkZXZfbmFtZSA9IGRldmxpbmtfZGV2X25hbWUoZGV2bGluayk7CiYjNDM7CXN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJaWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJbm9kZSA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZpbmQoYnVzX25hbWUsIGRldl9uYW1lKTsKJiM0MzsJcmV0dXJuICEhbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLSZndDtvcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2goZGV2bGluaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KSB7CiYjNDM7CQlpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpCiYjNDM7CQkJZGV2bF93YXJuKGRldmxpbmssCiYjNDM7CQkJCSAgJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0gc2VsZWN0ZWQgdGhpcyBkZXZpY2UgYnV0IGVzd2l0Y2ggbW9kZSBzZXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlLCBOVUxMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWRldmxfd2FybihkZXZsaW5rLAomIzQzOwkJCSAgJiMzNDtDb3VsZG4mIzM5O3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJICBlcnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwomIzQzOwomIzQzOwlpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nIHx8CiYjNDM7CSAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghZGV2bGlua190cnlfZ2V0KGRldmxpbmspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLAomIzQzOwkJCSZhbXA7ZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSkKJiM0MzsJCWRldmxpbmtfcHV0KGRldmxpbmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsKJiM0MzsJZGV2bGluayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2bGluaywKJiM0MzsJCQkgICAgICAgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKTsKJiM0MzsKJiM0MzsJZGV2bF9sb2NrKGRldmxpbmspOwomIzQzOwomIzQzOwlpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspICZhbXA7JmFtcDsKJiM0MzsJICAgIGRldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZykgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsJCWRldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwlkZXZsaW5rX3B1dChkZXZsaW5rKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CUlOSVRfV09SSygmYW1wO2RldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yaywKJiM0MzsJCSAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspOwomIzQzOwlkZXZsaW5rLSZndDtkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwomIzQzOwomIzQzOwlkZXZsaW5rLSZndDtkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0CiYjNDM7ICogQGRldmxpbms6IGRldmxpbmsKJiM0MzsgKgomIzQzOyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9CiYjNDM7ICoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGlmIGFueSBtYXRjaGVzIEBkZXZsaW5rLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay4KJiM0MzsgKi8KJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CWRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsKJiM0MzsJZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfY2xlYW51cChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CWlmIChjYW5jZWxfd29ya19zeW5jKCZhbXA7ZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSkKJiM0MzsJCWRldmxpbmtfcHV0KGRldmxpbmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gc3RyOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7X19zZXR1cCgmIzM0O2RldmxpbmtfZXN3aXRjaF9tb2RlPSYjMzQ7LCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXApOwomIzQzOwomIzQzO2ludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgKmRlZjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZikgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDsKJiM0MzsJCXByX3dhcm4oJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcnNlKGRlZik7CiYjNDM7CWtmcmVlKGRlZik7CiYjNDM7CWlmIChlcnIgPT0gLUVFWElTVCkgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDsKJiM0MzsJCXByX3dhcm4oJiMzNDtkZXZsaW5rOiBkdXBsaWNhdGUgZXN3aXRjaCBtb2RlIGhhbmRsZXMgaWdub3JlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogaW52YWxpZCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgaWYgKGVycikgewomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGUmIzM0OywKJiM0MzsJCQkJCQkgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sCiYjNDM7CQkJCQkJICAgICAgMCk7CiYjNDM7CWlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKSB7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMOwomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpCiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jCmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDQKLS0tIGEvbmV0L2RldmxpbmsvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2LmMKQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIGludCBkZXZsaW5rX3JlbG9hZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IG5ldCAqZGVzdF9uZXQsCiAJCXJldHVybiBlcnI7CiAKIAlXQVJOX09OKCEoKmFjdGlvbnNfcGVyZm9ybWVkICZhbXA7IEJJVChhY3Rpb24pKSk7CiYjNDM7CWlmICgqYWN0aW9uc19wZXJmb3JtZWQgJmFtcDsgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspOwomIzQzOwl9CiYjNDM7CiAJLyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqLwogCVdBUk5fT04obWVtY21wKHJlbW90ZV9yZWxvYWRfc3RhdHMsIGRldmxpbmstJmd0O3N0YXRzLnJlbW90ZV9yZWxvYWRfc3RhdHMsCiAJCSAgICAgICBzaXplb2YocmVtb3RlX3JlbG9hZF9zdGF0cykpKTsKQEAgLTcwMiw2ICYjNDM7NzA3LDI1IEBAIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogfQogCiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKJiM0MzsJCQkgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay0mZ3Q7b3BzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7CiYjNDM7CiYjNDM7CWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwllcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIG9wcy0mZ3Q7ZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBleHRhY2spOwomIzQzO30KJiM0MzsKIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLSZndDtkZXZsaW5rOwpAQCAtNzEyLDE0ICYjNDM7NzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXUxNiBtb2RlOwogCiAJaWYgKGluZm8tJmd0O2F0dHJzW0RFVkxJTktfQVRUUl9FU1dJVENIX01PREVdKSB7Ci0JCWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQllcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLAotCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7CiAJCW1vZGUgPSBubGFfZ2V0X3UxNihpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7Ci0JCWVyciA9IG9wcy0mZ3Q7ZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBpbmZvLSZndDtleHRhY2spOwomIzQzOwkJZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tJmd0O2V4dGFjayk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaCBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaAppbmRleCBjZGY4OTRiYTVhOWQ3ZS4uYzJiZWU1YWFiZDQ5YjQgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmgKQEAgLTU4LDggJiM0Mzs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5OwogCXU4IHJlbG9hZF9mYWlsZWQ6MTsKJiM0MzsJdTggZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nOjE7CiAJcmVmY291bnRfdCByZWZjb3VudDsKIAlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcms7CiAJc3RydWN0IGRldmxpbmtfcmVsICpyZWw7CiAJc3RydWN0IHhhcnJheSBuZXN0ZWRfcmVsczsKIAljaGFyIHByaXZbXSBfX2FsaWduZWQoTkVUREVWX0FMSUdOKTsKQEAgLTcxLDYgJiM0Mzs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5Owogc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSwKIAkJCQlzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2X2RyaXZlcik7CiYjNDM7aW50IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpOwomIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKIAogI2RlZmluZSBkZXZsX3dhcm4oZGV2bGluaywgZm9ybWF0LCBhcmdzLi4uKQkJCQlcCiAJZG8gewkJCQkJCQkJXApAQCAtMzQ4LDYgJiM0MzszNTcsOSBAQCBib29sIGRldmxpbmtfcmF0ZV9pc19ub2RlKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKmRldmxpbmtfcmF0ZSk7CiBpbnQgZGV2bGlua19yYXRlc19jaGVjayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAkJCWJvb2wgKCpyYXRlX2ZpbHRlcikoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqKSwKIAkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKJiM0MzsJCQkgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAKIC8qIExpbmVjYXJkcyAqLwogdW5zaWduZWQgaW50IGRldmxpbmtfbGluZWNhcmRfaW5kZXgoc3RydWN0IGRldmxpbmtfbGluZWNhcmQgKmxpbmVjYXJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5ODEKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0mIzM0OyBLZXJuZWwgUGFyYW1ldGVyIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIEl0IGludHJvZHVjZXMgYSBuZXcga2VybmVsIHBhcmFtZXRlciwgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAsIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IHVudG91Y2hhYmxlIHZpYSBmdXp6aW5nLgoKVGhlIGNvcmUgb2YgdGhpcyBmZWF0dXJlIGxpZXMgaW4gYG5ldC9kZXZsaW5rL2RlZmF1bHQuY2AsIHdpdGggZnVuY3Rpb25zIGxpa2UgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cGAsIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdGAsIGFuZCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXBgIGlzIGFuIGBfX3NldHVwYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgaGFwcGVucyBvbmNlIGFuZCBvbmx5IG9uY2UgYXQgYm9vdC4gVGhpcyByZW5kZXJzIGl0IGluYWNjZXNzaWJsZSB0byBkeW5hbWljIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHdoaWNoIHByaW1hcmlseSBvcGVyYXRlcyBwb3N0LWJvb3QuIFRoZSBgX19pbml0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBhcmUgYWxzbyBvbmx5IGV4ZWN1dGVkIG9uY2UgYXQgYm9vdC4KCkV2ZW4gaWYgc3l6a2FsbGVyIHdlcmUgY29uZmlndXJlZCB0byBzZXQgdGhpcyBrZXJuZWwgcGFyYW1ldGVyLCB0aGUgZnVuY3Rpb25hbGl0eSBwcmltYXJpbHkgYmVjb21lcyBhIGJvb3QtdGltZSBjb25maWd1cmF0aW9uLiBUaGUgcnVudGltZSBjb2RlIGlzIGd1YXJkZWQgYnkgYSBjaGVjayBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWRgLiBJZiB0aGUgcGFyYW1ldGVyIGlzbiYjMzk7dCBzZXQsIHRoZW4gbW9zdCBvZiB0aGUgcnVudGltZSBjb2RlIGlzIG5ldmVyIHJ1bi4gSWYgc2V0LCB0aGlzIGNvZGUgcGF0aCBjYWxscyBgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0YC4gVGhpcyBmdW5jdGlvbiBtYXkgYWxyZWFkeSBiZSBmdXp6ZWQgYXMgYSByZXN1bHQgb2YgdGhlIE5ldGxpbmsgZGV2bGluayBpbnRlcmZhY2UuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIHRoZXJlIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZGAgYW5kIGBtbHg1X2luaXRfb25lYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIFRoZXNlIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIE1lbGxhbm94IGhhcmR3YXJlLiBUeXBpY2FsbHksIG15IGZ1enppbmcgc2V0dXAgZG9lc24mIzM5O3QgaW52b2x2ZSBNZWxsYW5veCBoYXJkd2FyZSBhbmQgSSBoYXZlIHRvIGFzc3VtZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHN1Y2ggaGFyZHdhcmUuIEV2ZW4gaWYgSSBkaWQsIE1lbGxhbm94IGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBhbmQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZS4KCkZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYGRldmxpbmtfcmVsb2FkYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYCBhbHNvIGhhcyBhIGNvbmRpdGlvbmFsIGNhbGwgdG8gYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBIb3dldmVyLCBpdCYjMzk7cyBnYXRlZCBieSB0aGUgYERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUYCBmbGFnIGFuZCBhZ2FpbiwgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBpZiB0aGUgYm9vdC10aW1lIHBhcmFtZXRlciB3YXNuJiMzOTt0IHNldC4KCkZpbmFsbHksIHRoZSBgZGV2bGlua19ubF9lc3dpdGNoX3NldF9kb2l0YCBjb2RlIGlzIHJlZmFjdG9yZWQgYnkgbW92aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGludG8gYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgY3JlYXRlIGFueSBuZXcgY29kZSBwYXRocyBvciBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBwYXJhbWV0ZXIgaXMgb25seSBzZXQgdmlhIE5ldGxpbmsgaW4gdGhpcyBjYXNlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBuZXcgcGFyYW1ldGVyIGlzIG9ubHkgcGFyc2VkIGFuZCBhY3RpdmF0ZWQgYXQgYm9vdC10aW1lIGFuZCB0aGUgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbWFsIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IGZ1enplZC4gVGhlIGV4aXN0aW5nIE5ldGxpbmsgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgdG8gc2V0IHRoZSBgZXN3aXRjaF9tb2RlYCBpcyBsaWtlbHkgYWxyZWFkeSBmdXp6YWJsZS4gVGhlIE1lbGxhbm94IGNvZGUgaXMgdW5yZWFjaGFibGUuCkkmIzM5O2xsIG1hcmsgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjoyMy44NDU2MTIwNzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTczODY0MTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBib290LXRpbWUga2VybmVsIHBhcmFtZXRlciBgZGV2bGlua19lc3dpdGNoX21vZGU9YCB0byBzZXQgdGhlIGRlZmF1bHQgZGV2bGluayBlc3dpdGNoIG1vZGUuIFRoZSBwYXJzaW5nIGxvZ2ljIGlzIG1hcmtlZCBhcyBgX19pbml0YCBhbmQgb25seSBydW5zIGR1cmluZyBib290LCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIHJ1bnRpbWUgZnV6emluZy4gVGhlIHJ1bnRpbWUgbG9naWMgaXMgZ2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHRoaXMgYm9vdCBwYXJhbWV0ZXIsIHdoaWNoIHN5emthbGxlciB3aWxsIG5vdCBwcm92aWRlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWx4NSBkcml2ZXIgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBNZWxsYW5veCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDQ6MDI6MjMuODQ1NjIwMTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU4MTg4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDQ6MDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi4xMTczMDBkZDU4OWM0ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTEyNDksNiArMTI0OSwzMSBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxcbiBcXHRcXHRcXHRbSFddIE1heGltdW0gY29uZmlndXJhYmxlIGZhbiBzcGVlZC5cXG4gXFxuK1xcdGRldmxpbmtfZXN3aXRjaF9tb2RlPVxcbitcXHRcXHRcXHRbTkVUXVxcbitcXHRcXHRcXHRGb3JtYXQ6XFxuK1xcdFxcdFxcdFxcdTAwM2NzZWxlY3RvclxcdTAwM2U9XFx1MDAzY21vZGVcXHUwMDNlXFxuK1xcbitcXHRcXHRcXHRcXHUwMDNjc2VsZWN0b3JcXHUwMDNlOlxcbitcXHRcXHRcXHQqIHwgXFx1MDAzY2hhbmRsZVxcdTAwM2VbLFxcdTAwM2NoYW5kbGVcXHUwMDNlLi4uXVxcbitcXG4rXFx0XFx0XFx0XFx1MDAzY2hhbmRsZVxcdTAwM2U6XFxuK1xcdFxcdFxcdFxcdTAwM2NidXMtbmFtZVxcdTAwM2UvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZVxcbitcXG4rXFx0XFx0XFx0Q29uZmlndXJlIGRlZmF1bHQgZGV2bGluayBlc3dpdGNoIG1vZGUgZm9yIG1hdGNoaW5nXFxuK1xcdFxcdFxcdGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXFxuK1xcbitcXHRcXHRcXHRcXHUwMDNjbW9kZVxcdTAwM2U6XFxuK1xcdFxcdFxcdGxlZ2FjeSB8IHN3aXRjaGRldiB8IHN3aXRjaGRldl9pbmFjdGl2ZVxcbitcXG4rXFx0XFx0XFx0RXhhbXBsZXM6XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcXG4rXFxuK1xcdFxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxcbitcXHRcXHRcXHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxcbitcXG4gXFx0ZGZsdGNjPVxcdFxcdFtIVyxTMzkwXVxcbiBcXHRcXHRcXHRGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH1cXG4gXFx0XFx0XFx0b246ICAgICAgIHMzOTAgemxpYiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBvblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzgwYzllOTkyMTBlMzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcXG5AQCAtMCwwICsxLDc4IEBAXFxuKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rRGV2bGluayBFc3dpdGNoIE1vZGUgRGVmYXVsdHNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitEZXZsaW5rIGVzd2l0Y2ggbW9kZSBkZWZhdWx0cyBhbGxvdyB0aGUgZXN3aXRjaCBtb2RlIHRvIGJlIHByb3ZpZGVkIG9uIHRoZVxcbitrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2VcXG4raW5pdGlhbGl6YXRpb24uXFxuK1xcbitUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpc1xcbit0aGUgc2FtZSBoYW5kbGUgc2hvd24gYnkgYGBkZXZsaW5rIGRldiBzaG93YGAsIGZvciBleGFtcGxlXFxuK2BgcGNpLzAwMDA6MDg6MDAuMGBgLlxcbitcXG4rS2VybmVsIGNvbW1hbmQgbGluZSBzeW50YXhcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0RlZmF1bHRzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBrZXJuZWwgY29tbWFuZCBsaW5lXFxuK3BhcmFtZXRlci5cXG4rXFxuK1RoZSBnZW5lcmFsIHN5bnRheCBpczo6XFxuK1xcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPVxcdTAwM2NzZWxlY3RvclxcdTAwM2U9XFx1MDAzY21vZGVcXHUwMDNlXFxuK1xcbitgYFxcdTAwM2NzZWxlY3RvclxcdTAwM2VgYCBpcyBlaXRoZXIgYGAqYGAgb3Igb25lIG9yIG1vcmUgZGV2bGluayBoYW5kbGVzOjpcXG4rXFxuKyAgKiB8IFxcdTAwM2NidXMtbmFtZVxcdTAwM2UvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZVssXFx1MDAzY2J1cy1uYW1lXFx1MDAzZS9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlLi4uXVxcbitcXG4rYGAqYGAgYXBwbGllcyB0aGUgbW9kZSB0byBldmVyeSBkZXZsaW5rIGluc3RhbmNlLiBBbGwgaGFuZGxlcyBpbiB0aGUgc2FtZVxcbitzZWxlY3RvciByZWNlaXZlIHRoZSBzYW1lIGVzd2l0Y2ggbW9kZS5cXG4rXFxuK2BgXFx1MDAzY21vZGVcXHUwMDNlYGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC5cXG4rXFxuK1N5bnRheCBydWxlc1xcbistLS0tLS0tLS0tLS1cXG4rXFxuK1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxcbitcXG4rKiBTcGVjaWZ5IHRoZSBkZWZhdWx0IGluIG9uZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlci4gUmVwZWF0ZWRcXG4rICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cXG4rKiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuKyAgc2l6ZS5cXG4rKiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxcbisqIGBgXFx1MDAzY3NlbGVjdG9yXFx1MDAzZWBgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZVxcbisgIGNvbWJpbmVkIHdpdGggZXhwbGljaXQgaGFuZGxlcy5cXG4rKiBgYFxcdTAwM2NidXMtbmFtZVxcdTAwM2VgYCBhbmQgYGBcXHUwMDNjZGV2LW5hbWVcXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXFxuKyogYGBcXHUwMDNjZGV2LW5hbWVcXHUwMDNlYGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzXFxuKyAgYGAwMDAwOjA4OjAwLjBgYC5cXG4rKiBIYW5kbGVzIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZSwgYGAqYGAsIGBgPWBgIG9yIG1vcmUgdGhhbiBvbmUgYGAvYGAuXFxuKyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy5cXG4rKiBDb21tYS1zZXBhcmF0ZWQgZGVmYXVsdCBhc3NpZ25tZW50cyBhcmUgbm90IHN1cHBvcnRlZC5cXG4rKiBEdXBsaWNhdGUgaGFuZGxlcyBhcmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBkZWZhdWx0IGlzXFxuKyAgaWdub3JlZC5cXG4rXFxuK1RoZSBlc3dpdGNoIG1vZGUgZGVmYXVsdCBjb3JyZXNwb25kcyB0byB0aGUgdXNlcnNwYWNlIGNvbW1hbmQ6OlxcbitcXG4rICBkZXZsaW5rIGRldiBlc3dpdGNoIHNldCBcXHUwMDNjaGFuZGxlXFx1MDAzZSBtb2RlIFxcdTAwM2N2YWx1ZVxcdTAwM2VcXG4rXFxuK1xcbitFeGFtcGxlc1xcbis9PT09PT09PVxcbitcXG4rU2V0IGFsbCBkZXZsaW5rIGluc3RhbmNlcyB0byBzd2l0Y2hkZXYgbW9kZTo6XFxuK1xcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XFxuK1xcbitTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcXG4rXFxuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXZcXG4rXFxuK1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjpcXG4rXFxuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxcbitcXG4rVGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGJlY2F1c2UgY29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdFxcbitzdXBwb3J0ZWQ6OlxcbitcXG4rICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldixwY2kvMDAwMDowOTowMC4wPXN3aXRjaGRldl9pbmFjdGl2ZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcXG5pbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMTM0ZDJmMzE5OTIyYzIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuQEAgLTU2LDYgKzU2LDcgQEAgZ2VuZXJhbC5cXG4gICAgOm1heGRlcHRoOiAxXFxuIFxcbiAgICBkZXZsaW5rLWRwaXBlXFxuKyAgIGRldmxpbmstZGVmYXVsdHNcXG4gICAgZGV2bGluay1lc3dpdGNoLWF0dHJcXG4gICAgZGV2bGluay1mbGFzaFxcbiAgICBkZXZsaW5rLWhlYWx0aFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXFxuaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcXG5AQCAtMjM4LDI0ICsyMzgsMzAgQEAgc3RhdGljIHZvaWQgbWx4NV9md19yZXNldF9jb21wbGV0ZV9yZWxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV9md19yZXNldCAqZndfcmVzZXQgPSBkZXYtXFx1MDAzZXByaXYuZndfcmVzZXQ7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXFxuIFxcdGlmICh0ZXN0X2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1BFTkRJTkdfQ09NUCwgXFx1MDAyNmZ3X3Jlc2V0LVxcdTAwM2VyZXNldF9mbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmZ3X3Jlc2V0LVxcdTAwM2VyZXNldF9mbGFncyk7XFxuIFxcdFxcdGNvbXBsZXRlKFxcdTAwMjZmd19yZXNldC1cXHUwMDNlZG9uZSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcXG4tXFx0XFx0aWYgKG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldikpXFxuLVxcdFxcdFxcdG1seDVfY29yZV9lcnIoZGV2LCBcXFwicmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRtbHg1X2xvYWRfb25lKGRldiwgdHJ1ZSk7XFxuLVxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4tXFx0XFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XFxuLVxcdFxcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcXG4rXFx0ZXJyID0gbWx4NV9oZWFsdGhfd2FpdF9wY2lfdXAoZGV2KTtcXG4rXFxuK1xcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4gXFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsIFxcdTAwMjZmd19yZXNldC1cXHUwMDNlcmVzZXRfZmxhZ3MpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRtbHg1X2NvcmVfZXJyKGRldiwgXFxcInJlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWx4NV9sb2FkX29uZV9kZXZsX2xvY2tlZChkZXYsIHRydWUpO1xcbitcXG4rXFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XFxuK1xcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtbHg1X3N0b3Bfc3luY19yZXNldF9wb2xsKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuQEAgLTEzOTIsNiArMTM5MiwxNyBAQCBzdGF0aWMgdm9pZCBtbHg1X3VubG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRtbHg1X2ZyZWVfYmZyZWcoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LmJmcmVnKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xcbitcXG4rXFx0aWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcdGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXZsaW5rKTtcXG4rfVxcbitcXG4gaW50IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbiBcXHRib29sIGxpZ2h0X3Byb2JlID0gbWx4NV9kZXZfaXNfbGlnaHR3ZWlnaHQoZGV2KTtcXG5AQCAtMTQ3MSw2ICsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0ZXJyID0gbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChkZXYpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRkZXZsX3VucmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTtcXG4gdW5sb2NrOlxcbiBcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXFxuaW5kZXggZmZlMWFkNWZiNzBiYjguLjkwZGEwM2MwMTEyY2JhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxcbkBAIC0xNjYxLDYgKzE2NjEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLFxcbiBcXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiB2b2lkIGRldmxfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuK3ZvaWQgZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4gdm9pZCBkZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4gdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL01ha2VmaWxlIGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcXG5pbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0XFxuLS0tIGEvbmV0L2RldmxpbmsvTWFrZWZpbGVcXG4rKysgYi9uZXQvZGV2bGluay9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbi1vYmoteSA6PSBjb3JlLm8gbmV0bGluay5vIG5ldGxpbmtfZ2VuLm8gZGV2Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuK29iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBkZWZhdWx0Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuIFxcdCByZXNvdXJjZS5vIHBhcmFtLm8gcmVnaW9uLm8gaGVhbHRoLm8gdHJhcC5vIHJhdGUubyBsaW5lY2FyZC5vIHNoX2Rldi5vXFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xcbmluZGV4IGM1M2E0MmUxN2E1ODlkLi45ZDljYzQwNjI2ZmMzMyAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9jb3JlLmNcXG4rKysgYi9uZXQvZGV2bGluay9jb3JlLmNcXG5AQCAtMzE3LDYgKzMxNyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdHJ5bG9jayk7XFxuIFxcbiB2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbiB7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKGRldmxpbmspO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcXG5AQCAtNDI5LDYgKzQzMCw3IEBAIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbiBcXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xcbiBcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuIFxcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihkZXZsaW5rKTtcXG4gXFx0ZGV2bGlua19ub3RpZnlfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4gXFx0eGFfY2xlYXJfbWFyayhcXHUwMDI2ZGV2bGlua3MsIGRldmxpbmstXFx1MDAzZWluZGV4LCBERVZMSU5LX1JFR0lTVEVSRUQpO1xcbiBcXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XFxuQEAgLTQ5MCw2ICs0OTIsNyBAQCBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2bGluay1cXHUwMDNldHJhcF9ncm91cF9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldmxpbmstXFx1MDAzZXRyYXBfcG9saWNlcl9saXN0KTtcXG4gXFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2ZGV2bGluay1cXHUwMDNlcndvcmssIGRldmxpbmtfcmVsZWFzZSk7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KGRldmxpbmspO1xcbiBcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9ja19rZXkpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bG9ja2RlcF9zZXRfY2xhc3MoXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2ssIFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrX2tleSk7XFxuQEAgLTUzNyw2ICs1NDAsOSBAQCB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4gXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbiBcXHRXQVJOX09OKGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgTlVMTCwgTlVMTCkpO1xcbiBcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKGRldmxpbmspO1xcbitcXG4gXFx0ZGV2bGlua19yZWxfcHV0KGRldmxpbmspO1xcbiBcXG4gXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2ZGV2bGluay1cXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpKTtcXG5AQCAtNTk4LDYgKzYwNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQoKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZkZXZsaW5rX3Blcm5ldF9vcHMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNjEzLDcgKzYyMywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcXG4gb3V0X3VucmVnX3Blcm5ldF9zdWJzeXM6XFxuIFxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2ZGV2bGlua19wZXJuZXRfb3BzKTtcXG4gb3V0OlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfY2xlYW51cCgpO1xcbiBcXHRXQVJOX09OKGVycik7XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZWZhdWx0LmMgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcXG5AQCAtMCwwICsxLDM2NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYsIE5WSURJQSBDT1JQT1JBVElPTiBcXHUwMDI2IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJkZXZsX2ludGVybmFsLmhcXFwiXFxuK1xcbitzdGF0aWMgY2hhciAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtO1xcbitzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsO1xcbitzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZDtcXG4rc3RhdGljIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlO1xcbitzdGF0aWMgTElTVF9IRUFEKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxO1xcbitcXG4rc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRjaGFyICpidXNfbmFtZTtcXG4rXFx0Y2hhciAqZGV2X25hbWU7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfdG9fdmFsdWUoY29uc3QgY2hhciAqc3RyLFxcbitcXHRcXHRcXHRcXHQgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgKm1vZGUpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAoc3RyLCBcXFwibGVnYWN5XFxcIikpIHtcXG4rXFx0XFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9MRUdBQ1k7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGlmICghc3RyY21wKHN0ciwgXFxcInN3aXRjaGRldlxcXCIpKSB7XFxuK1xcdFxcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfU1dJVENIREVWO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCJzd2l0Y2hkZXZfaW5hY3RpdmVcXFwiKSkge1xcbitcXHRcXHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGNoYXIgKmhhbmRsZSwgY2hhciAqKmJ1c19uYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICBjaGFyICoqZGV2X25hbWUpXFxuK3tcXG4rXFx0Y2hhciAqc2xhc2g7XFxuK1xcdGNoYXIgKnA7XFxuK1xcbitcXHRpZiAoISpoYW5kbGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChwID0gaGFuZGxlOyAqcDsgcCsrKSB7XFxuK1xcdFxcdGlmICgqcCA9PSAnKicgfHwgKnAgPT0gJz0nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c2xhc2ggPSBzdHJjaHIoaGFuZGxlLCAnLycpO1xcbitcXHRpZiAoIXNsYXNoIHx8IHNsYXNoID09IGhhbmRsZSB8fCAhc2xhc2hbMV0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3RyY2hyKHNsYXNoICsgMSwgJy8nKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqc2xhc2ggPSAnXFxcXDAnO1xcbitcXG4rXFx0KmJ1c19uYW1lID0gaGFuZGxlO1xcbitcXHQqZGV2X25hbWUgPSBzbGFzaCArIDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpcXG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcXHUwMDI2ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzLCBsaXN0KSB7XFxuK1xcdFxcdGlmICghc3RyY21wKG5vZGUtXFx1MDAzZWJ1c19uYW1lLCBidXNfbmFtZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdHJjbXAobm9kZS1cXHUwMDNlZGV2X25hbWUsIGRldl9uYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIG5vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXG4rXFx0bm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZub2RlLVxcdTAwM2VsaXN0KTtcXG4rXFx0bm9kZS1cXHUwMDNlYnVzX25hbWUgPSBrc3RyZHVwKGJ1c19uYW1lLCBHRlBfS0VSTkVMKTtcXG4rXFx0bm9kZS1cXHUwMDNlZGV2X25hbWUgPSBrc3RyZHVwKGRldl9uYW1lLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VidXNfbmFtZSB8fCAhbm9kZS1cXHUwMDNlZGV2X25hbWUpIHtcXG4rXFx0XFx0a2ZyZWUobm9kZS1cXHUwMDNlYnVzX25hbWUpO1xcbitcXHRcXHRrZnJlZShub2RlLVxcdTAwM2VkZXZfbmFtZSk7XFxuK1xcdFxcdGtmcmVlKG5vZGUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShjaGFyICpoYW5kbGVzKVxcbit7XFxuK1xcdGNoYXIgKmhhbmRsZTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghc3RyY21wKGhhbmRsZXMsIFxcXCIqXFxcIikpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IHRydWU7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoKGhhbmRsZSA9IHN0cnNlcChcXHUwMDI2aGFuZGxlcywgXFxcIixcXFwiKSkgIT0gTlVMTCkge1xcbitcXHRcXHRjaGFyICpidXNfbmFtZTtcXG4rXFx0XFx0Y2hhciAqZGV2X25hbWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGhhbmRsZSwgXFx1MDAyNmJ1c19uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRldl9uYW1lKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19pbml0XFxuK2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZyZWUoc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdGtmcmVlKG5vZGUtXFx1MDAzZWJ1c19uYW1lKTtcXG4rXFx0a2ZyZWUobm9kZS1cXHUwMDNlZGV2X25hbWUpO1xcbitcXHRrZnJlZShub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZV90bXA7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBub2RlX3RtcCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5vZGUtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKG5vZGUpO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gZmFsc2U7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJzZShjaGFyICpzdHIpXFxuK3tcXG4rXFx0ZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTtcXG4rXFx0Y2hhciAqc2VwYXJhdG9yO1xcbitcXHRjaGFyICpoYW5kbGVzO1xcbitcXHRjaGFyICptb2RlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCEqc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHNlcGFyYXRvciA9IHN0cnJjaHIoc3RyLCAnPScpO1xcbitcXHRpZiAoIXNlcGFyYXRvciB8fCBzZXBhcmF0b3IgPT0gc3RyIHx8ICFzZXBhcmF0b3JbMV0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0KnNlcGFyYXRvciA9ICdcXFxcMCc7XFxuK1xcdGhhbmRsZXMgPSBzdHI7XFxuK1xcdG1vZGUgPSBzZXBhcmF0b3IgKyAxO1xcbitcXG4rXFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsIFxcdTAwMjZlc3dfbW9kZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShoYW5kbGVzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIoKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmJ1c19uYW1lID0gZGV2bGlua19idXNfbmFtZShkZXZsaW5rKTtcXG4rXFx0Y29uc3QgY2hhciAqZGV2X25hbWUgPSBkZXZsaW5rX2Rldl9uYW1lKGRldmxpbmspO1xcbitcXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XFxuK1xcbitcXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRub2RlID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpO1xcbitcXHRyZXR1cm4gISFub2RlO1xcbit9XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVxcdTAwM2VvcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpIHtcXG4rXFx0XFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxcbitcXHRcXHRcXHRkZXZsX3dhcm4oZGV2bGluayxcXG4rXFx0XFx0XFx0XFx0ICBcXFwiZGV2bGlua19lc3dpdGNoX21vZGU9IHNlbGVjdGVkIHRoaXMgZGV2aWNlIGJ1dCBlc3dpdGNoIG1vZGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlLCBOVUxMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZGV2bF93YXJuKGRldmxpbmssXFxuK1xcdFxcdFxcdCAgXFxcIkNvdWxkbid0IGFwcGx5IGRlZmF1bHQgZXN3aXRjaCBtb2RlLCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgZXJyKTtcXG4rfVxcbitcXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcXVldWVfYXBwbHlfd29yayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4re1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgfHxcXG4rXFx0ICAgICFfX2RldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIWRldmxpbmtfdHJ5X2dldChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLFxcbitcXHRcXHRcXHRcXHUwMDI2ZGV2bGluay1cXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcXG4rXFx0XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFxuK1xcdGRldmxpbmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmssXFxuK1xcdFxcdFxcdCAgICAgICBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xcbitcXG4rXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbitcXG4rXFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZGV2bGluay1cXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7XFxuK1xcdFxcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4rXFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxuK31cXG4rXFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuK3tcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmssXFxuK1xcdFxcdCAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xcbitcXHRkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbit9XFxuK1xcbisvKipcXG4rICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0XFxuKyAqIEBkZXZsaW5rOiBkZXZsaW5rXFxuKyAqXFxuKyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9XFxuKyAqIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLCBpZiBhbnkgbWF0Y2hlcyBAZGV2bGluay5cXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay5cXG4rICovXFxuK3ZvaWQgZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGlmIChjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxcbitcXHRcXHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwKGNoYXIgKnN0cilcXG4re1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK19fc2V0dXAoXFxcImRldmxpbmtfZXN3aXRjaF9tb2RlPVxcXCIsIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cCk7XFxuK1xcbitpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXFxuK3tcXG4rXFx0Y2hhciAqZGVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZikge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xcbitcXHRcXHRwcl93YXJuKFxcXCJkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoZGVmKTtcXG4rXFx0a2ZyZWUoZGVmKTtcXG4rXFx0aWYgKGVyciA9PSAtRUVYSVNUKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGR1cGxpY2F0ZSBlc3dpdGNoIG1vZGUgaGFuZGxlcyBpZ25vcmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcXG4rXFx0XFx0cHJfd2FybihcXFwiZGV2bGluazogaW52YWxpZCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSBpZiAoZXJyKSB7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAwKTtcXG4rXFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9jbGVhbnVwKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSlcXG4rXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKTtcXG4rXFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xcbmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXFx1MDAyNiBCSVQoYWN0aW9uKSkpO1xcbitcXHRpZiAoKmFjdGlvbnNfcGVyZm9ybWVkIFxcdTAwMjYgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihkZXZsaW5rKTtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqL1xcbiBcXHRXQVJOX09OKG1lbWNtcChyZW1vdGVfcmVsb2FkX3N0YXRzLCBkZXZsaW5rLVxcdTAwM2VzdGF0cy5yZW1vdGVfcmVsb2FkX3N0YXRzLFxcbiBcXHRcXHQgICAgICAgc2l6ZW9mKHJlbW90ZV9yZWxvYWRfc3RhdHMpKSk7XFxuQEAgLTcwMiw2ICs3MDcsMjUgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiB9XFxuIFxcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbitcXHRcXHRcXHQgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVxcdTAwM2VvcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIW9wcy1cXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSwgZXh0YWNrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgZXh0YWNrKTtcXG4rfVxcbitcXG4gaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gZGV2bGlua19ubF9jdHgoaW5mbyktXFx1MDAzZWRldmxpbms7XFxuQEAgLTcxMiwxNCArNzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHR1MTYgbW9kZTtcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSkge1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRlcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xcbiBcXHRcXHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0VTV0lUQ0hfTU9ERV0pO1xcbi1cXHRcXHRlcnIgPSBvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oIGIvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXFxuaW5kZXggY2RmODk0YmE1YTlkN2UuLmMyYmVlNWFhYmQ0OWI0IDEwMDY0NFxcbi0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxcbisrKyBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxcbkBAIC01OCw4ICs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiBcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XFxuIFxcdHU4IHJlbG9hZF9mYWlsZWQ6MTtcXG4rXFx0dTggZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nOjE7XFxuIFxcdHJlZmNvdW50X3QgcmVmY291bnQ7XFxuIFxcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yaztcXG4gXFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWw7XFxuIFxcdHN0cnVjdCB4YXJyYXkgbmVzdGVkX3JlbHM7XFxuIFxcdGNoYXIgcHJpdltdIF9fYWxpZ25lZChORVRERVZfQUxJR04pO1xcbkBAIC03MSw2ICs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5O1xcbiBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRldl9kcml2ZXIpO1xcbitpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiBcXG4gI2RlZmluZSBkZXZsX3dhcm4oZGV2bGluaywgZm9ybWF0LCBhcmdzLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMzQ4LDYgKzM1Nyw5IEBAIGJvb2wgZGV2bGlua19yYXRlX2lzX25vZGUoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqZGV2bGlua19yYXRlKTtcXG4gaW50IGRldmxpbmtfcmF0ZXNfY2hlY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdFxcdGJvb2wgKCpyYXRlX2ZpbHRlcikoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqKSxcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIG1vZGUsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFxuIC8qIExpbmVjYXJkcyAqL1xcbiB1bnNpZ25lZCBpbnQgZGV2bGlua19saW5lY2FyZF9pbmRleChzdHJ1Y3QgZGV2bGlua19saW5lY2FyZCAqbGluZWNhcmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjoyNC41NTI0NzM4NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MDMxNzcyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJvb3QtdGltZSBrZXJuZWwgcGFyYW1ldGVyIGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gIHRvIHNldCB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gVGhlIHBhcnNpbmcgbG9naWMgaXMgbWFya2VkIGFzIGBfX2luaXRgIGFuZCBvbmx5IHJ1bnMgZHVyaW5nIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgcnVudGltZSBmdXp6aW5nLiBUaGUgcnVudGltZSBsb2dpYyBpcyBnYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBib290IHBhcmFtZXRlciwgd2hpY2ggc3l6a2FsbGVyIHdpbGwgbm90IHByb3ZpZGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtbHg1IGRyaXZlciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZDNiMmQ4YTg3MjFhMjVhZjJkYTg5N2FkZjBiOWUzNTI5M2NiNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA0OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjExNzMwMGRkNTg5YzRmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtMTI0OSw2ICsxMjQ5LDMxIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxuIFx0XHRcdFtIV10gTWF4aW11bSBjb25maWd1cmFibGUgZmFuIHNwZWVkLlxuIFxuK1x0ZGV2bGlua19lc3dpdGNoX21vZGU9XG4rXHRcdFx0W05FVF1cbitcdFx0XHRGb3JtYXQ6XG4rXHRcdFx0XHUwMDNjc2VsZWN0b3JcdTAwM2U9XHUwMDNjbW9kZVx1MDAzZVxuK1xuK1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlOlxuK1x0XHRcdCogfCBcdTAwM2NoYW5kbGVcdTAwM2VbLFx1MDAzY2hhbmRsZVx1MDAzZS4uLl1cbitcbitcdFx0XHRcdTAwM2NoYW5kbGVcdTAwM2U6XG4rXHRcdFx0XHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2VcbitcbitcdFx0XHRDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmdcbitcdFx0XHRkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLlxuK1xuK1x0XHRcdFx1MDAzY21vZGVcdTAwM2U6XG4rXHRcdFx0bGVnYWN5IHwgc3dpdGNoZGV2IHwgc3dpdGNoZGV2X2luYWN0aXZlXG4rXG4rXHRcdFx0RXhhbXBsZXM6XG4rXHRcdFx0ZGV2bGlua19lc3dpdGNoX21vZGU9Kj1zd2l0Y2hkZXZcbitcdFx0XHRkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldlxuK1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcbitcbitcdFx0XHRTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcbitcdFx0XHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxuK1xuIFx0ZGZsdGNjPVx0XHRbSFcsUzM5MF1cbiBcdFx0XHRGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH1cbiBcdFx0XHRvbjogICAgICAgczM5MCB6bGliIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGNvbXByZXNzaW9uIG9uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zODBjOWU5OTIxMGUzNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcbkBAIC0wLDAgKzEsNzggQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rRGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2Vcbitpbml0aWFsaXphdGlvbi5cbitcbitUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpc1xuK3RoZSBzYW1lIGhhbmRsZSBzaG93biBieSBgYGRldmxpbmsgZGV2IHNob3dgYCwgZm9yIGV4YW1wbGVcbitgYHBjaS8wMDAwOjA4OjAwLjBgYC5cbitcbitLZXJuZWwgY29tbWFuZCBsaW5lIHN5bnRheFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rRGVmYXVsdHMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIGtlcm5lbCBjb21tYW5kIGxpbmVcbitwYXJhbWV0ZXIuXG4rXG4rVGhlIGdlbmVyYWwgc3ludGF4IGlzOjpcbitcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPVx1MDAzY3NlbGVjdG9yXHUwMDNlPVx1MDAzY21vZGVcdTAwM2VcbitcbitgYFx1MDAzY3NlbGVjdG9yXHUwMDNlYGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6XG4rXG4rICAqIHwgXHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2VbLFx1MDAzY2J1cy1uYW1lXHUwMDNlL1x1MDAzY2Rldi1uYW1lXHUwMDNlLi4uXVxuK1xuK2BgKmBgIGFwcGxpZXMgdGhlIG1vZGUgdG8gZXZlcnkgZGV2bGluayBpbnN0YW5jZS4gQWxsIGhhbmRsZXMgaW4gdGhlIHNhbWVcbitzZWxlY3RvciByZWNlaXZlIHRoZSBzYW1lIGVzd2l0Y2ggbW9kZS5cbitcbitgYFx1MDAzY21vZGVcdTAwM2VgYCBpcyBvbmUgb2YgYGBsZWdhY3lgYCwgYGBzd2l0Y2hkZXZgYCBvciBgYHN3aXRjaGRldl9pbmFjdGl2ZWBgLlxuK1xuK1N5bnRheCBydWxlc1xuKy0tLS0tLS0tLS0tLVxuK1xuK1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxuK1xuKyogU3BlY2lmeSB0aGUgZGVmYXVsdCBpbiBvbmUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBwYXJhbWV0ZXIuIFJlcGVhdGVkXG4rICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cbisqIFRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHZhbHVlIGlzIGxpbWl0ZWQgYnkgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmVcbisgIHNpemUuXG4rKiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuKyogYGBcdTAwM2NzZWxlY3Rvclx1MDAzZWBgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZVxuKyAgY29tYmluZWQgd2l0aCBleHBsaWNpdCBoYW5kbGVzLlxuKyogYGBcdTAwM2NidXMtbmFtZVx1MDAzZWBgIGFuZCBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXG4rKiBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzXG4rICBgYDAwMDA6MDg6MDAuMGBgLlxuKyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLlxuKyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy5cbisqIENvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpc1xuKyAgaWdub3JlZC5cbitcbitUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjpcbitcbisgIGRldmxpbmsgZGV2IGVzd2l0Y2ggc2V0IFx1MDAzY2hhbmRsZVx1MDAzZSBtb2RlIFx1MDAzY3ZhbHVlXHUwMDNlXG4rXG4rXG4rRXhhbXBsZXNcbis9PT09PT09PVxuK1xuK1NldCBhbGwgZGV2bGluayBpbnN0YW5jZXMgdG8gc3dpdGNoZGV2IG1vZGU6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9Kj1zd2l0Y2hkZXZcbitcbitTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcbitcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XG4rXG4rU2V0IHR3byBQQ0kgZGV2bGluayBpbnN0YW5jZXMgdG8gc3dpdGNoZGV2IGluYWN0aXZlIG1vZGU6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxuK1xuK1RoZSBmb2xsb3dpbmcgaXMgaW52YWxpZCBiZWNhdXNlIGNvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3RcbitzdXBwb3J0ZWQ6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXYscGNpLzAwMDA6MDk6MDAuMD1zd2l0Y2hkZXZfaW5hY3RpdmVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4xMzRkMmYzMTk5MjJjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtNTYsNiArNTYsNyBAQCBnZW5lcmFsLlxuICAgIDptYXhkZXB0aDogMVxuIFxuICAgIGRldmxpbmstZHBpcGVcbisgICBkZXZsaW5rLWRlZmF1bHRzXG4gICAgZGV2bGluay1lc3dpdGNoLWF0dHJcbiAgICBkZXZsaW5rLWZsYXNoXG4gICAgZGV2bGluay1oZWFsdGhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXG5pbmRleCAwNzQ0MGM1ODcxM2E3ZC4uNzI4M2U1YjQ5ZWVkNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcbkBAIC0yMzgsMjQgKzIzOCwzMCBAQCBzdGF0aWMgdm9pZCBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBtbHg1X2Z3X3Jlc2V0ICpmd19yZXNldCA9IGRldi1cdTAwM2Vwcml2LmZ3X3Jlc2V0O1xuIFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGV2KTtcbitcdGludCBlcnI7XG4gXG4gXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXG4gXHRpZiAodGVzdF9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19QRU5ESU5HX0NPTVAsIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19SRVNFVF9JTl9QUk9HUkVTUyxcbitcdFx0XHQgIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKTtcbiBcdFx0Y29tcGxldGUoXHUwMDI2ZndfcmVzZXQtXHUwMDNlZG9uZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7XG4tXHRcdGlmIChtbHg1X2hlYWx0aF93YWl0X3BjaV91cChkZXYpKVxuLVx0XHRcdG1seDVfY29yZV9lcnIoZGV2LCBcInJlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcblwiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1seDVfbG9hZF9vbmUoZGV2LCB0cnVlKTtcbi1cdFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuLVx0XHRkZXZsaW5rX3JlbW90ZV9yZWxvYWRfYWN0aW9uc19wZXJmb3JtZWQoZGV2bGluaywgMCxcbi1cdFx0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuLVx0XHRcdFx0XHRcdFx0QklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9GV19BQ1RJVkFURSkpO1xuLVx0XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0bWx4NV9zeW5jX3Jlc2V0X3VubG9hZF9mbG93KGRldiwgZmFsc2UpO1xuK1x0ZXJyID0gbWx4NV9oZWFsdGhfd2FpdF9wY2lfdXAoZGV2KTtcbitcbitcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdGNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLCBcdTAwMjZmd19yZXNldC1cdTAwM2VyZXNldF9mbGFncyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRtbHg1X2NvcmVfZXJyKGRldiwgXCJyZXNldCByZWxvYWQgZmxvdyBhYm9ydGVkLCBQQ0kgcmVhZHMgc3RpbGwgbm90IHdvcmtpbmdcXG5cIik7XG4rXHRlbHNlXG4rXHRcdG1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTtcbitcbitcdGRldmxpbmtfcmVtb3RlX3JlbG9hZF9hY3Rpb25zX3BlcmZvcm1lZChkZXZsaW5rLCAwLFxuK1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuK1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRldfQUNUSVZBVEUpKTtcbitcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1X3N0b3Bfc3luY19yZXNldF9wb2xsKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzY4Li4wNzEyZWZlYTc0Y2M2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbkBAIC0xMzkyLDYgKzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG1seDVfZnJlZV9iZnJlZyhkZXYsIFx1MDAyNmRldi1cdTAwM2Vwcml2LmJmcmVnKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuK1xuK1x0aWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXHRkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2bGluayk7XG4rfVxuK1xuIGludCBtbHg1X2luaXRfb25lX2RldmxfbG9ja2VkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0Ym9vbCBsaWdodF9wcm9iZSA9IG1seDVfZGV2X2lzX2xpZ2h0d2VpZ2h0KGRldik7XG5AQCAtMTQ3MSw2ICsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGVyciA9IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoZGV2KTtcbiBcdGlmIChlcnIpXG4gXHRcdGRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdGVsc2VcbitcdFx0bWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTtcbiB1bmxvY2s6XG4gXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXG5pbmRleCBmZmUxYWQ1ZmI3MGJiOC4uOTBkYTAzYzAxMTJjYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kZXZsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxuQEAgLTE2NjEsNiArMTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsXG4gXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbit2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiB2b2lkIGRldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX2ZyZWUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL01ha2VmaWxlIGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcbmluZGV4IDhmMmFkYjVlNTgzNjJmLi45OWNhMGVmN2NmMWU4NyAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL01ha2VmaWxlXG4rKysgYi9uZXQvZGV2bGluay9NYWtlZmlsZVxuQEAgLTEsNCArMSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuLW9iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4rb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIGRlZmF1bHQubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4gXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xuaW5kZXggYzUzYTQyZTE3YTU4OWQuLjlkOWNjNDA2MjZmYzMzIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvY29yZS5jXG4rKysgYi9uZXQvZGV2bGluay9jb3JlLmNcbkBAIC0zMTcsNiArMzE3LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTtcbiBcbiB2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIHtcbitcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKGRldmxpbmspO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcbkBAIC00MjksNiArNDMwLDcgQEAgdm9pZCBkZXZsX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4gXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xuIFx0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuIFxuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7XG4gXHRkZXZsaW5rX25vdGlmeV91bnJlZ2lzdGVyKGRldmxpbmspO1xuIFx0eGFfY2xlYXJfbWFyayhcdTAwMjZkZXZsaW5rcywgZGV2bGluay1cdTAwM2VpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcbiBcdGRldmxpbmtfcmVsX3B1dChkZXZsaW5rKTtcbkBAIC00OTAsNiArNDkyLDcgQEAgc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9ncm91cF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpO1xuIFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZXJ3b3JrLCBkZXZsaW5rX3JlbGVhc2UpO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7XG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jaywgXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrX2tleSk7XG5AQCAtNTM3LDYgKzU0MCw5IEBAIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuIFx0V0FSTl9PTihkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIE5VTEwsIE5VTEwpKTtcbiBcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuK1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoZGV2bGluayk7XG4rXG4gXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XG4gXG4gXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpKTtcbkBAIC01OTgsNiArNjA0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdCgpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC02MTMsNyArNjIzLDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKVxuIG91dF91bnJlZ19wZXJuZXRfc3Vic3lzOlxuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gb3V0OlxuK1x0aWYgKGVycilcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTtcbiBcdFdBUk5fT04oZXJyKTtcbitcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RlZmF1bHQuYyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2RldmxpbmsvZGVmYXVsdC5jXG5AQCAtMCwwICsxLDM2NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2LCBOVklESUEgQ09SUE9SQVRJT04gXHUwMDI2IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZGV2bF9pbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgY2hhciAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtO1xuK3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGw7XG4rc3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQ7XG4rc3RhdGljIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlO1xuK3N0YXRpYyBMSVNUX0hFQUQoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cTtcbitcbitzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0Y2hhciAqYnVzX25hbWU7XG4rXHRjaGFyICpkZXZfbmFtZTtcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0XG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKGNvbnN0IGNoYXIgKnN0cixcbitcdFx0XHRcdCAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSAqbW9kZSlcbit7XG4rXHRpZiAoIXN0cmNtcChzdHIsIFwibGVnYWN5XCIpKSB7XG4rXHRcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmICghc3RyY21wKHN0ciwgXCJzd2l0Y2hkZXZcIikpIHtcbitcdFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0aWYgKCFzdHJjbXAoc3RyLCBcInN3aXRjaGRldl9pbmFjdGl2ZVwiKSkge1xuK1x0XHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGNoYXIgKmhhbmRsZSwgY2hhciAqKmJ1c19uYW1lLFxuK1x0XHRcdFx0ICAgICAgY2hhciAqKmRldl9uYW1lKVxuK3tcbitcdGNoYXIgKnNsYXNoO1xuK1x0Y2hhciAqcDtcbitcbitcdGlmICghKmhhbmRsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKHAgPSBoYW5kbGU7ICpwOyBwKyspIHtcbitcdFx0aWYgKCpwID09ICcqJyB8fCAqcCA9PSAnPScpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzbGFzaCA9IHN0cmNocihoYW5kbGUsICcvJyk7XG4rXHRpZiAoIXNsYXNoIHx8IHNsYXNoID09IGhhbmRsZSB8fCAhc2xhc2hbMV0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHN0cmNocihzbGFzaCArIDEsICcvJykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0KnNsYXNoID0gJ1xcMCc7XG4rXG4rXHQqYnVzX25hbWUgPSBoYW5kbGU7XG4rXHQqZGV2X25hbWUgPSBzbGFzaCArIDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqXG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpXG4re1xuK1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2VidXNfbmFtZSwgYnVzX25hbWUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChub2RlLVx1MDAzZWRldl9uYW1lLCBkZXZfbmFtZSkpXG4rXHRcdFx0cmV0dXJuIG5vZGU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxuK3tcbitcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbitcbitcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSkpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0bm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcbitcdGlmICghbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuK1x0bm9kZS1cdTAwM2VidXNfbmFtZSA9IGtzdHJkdXAoYnVzX25hbWUsIEdGUF9LRVJORUwpO1xuK1x0bm9kZS1cdTAwM2VkZXZfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFub2RlLVx1MDAzZWJ1c19uYW1lIHx8ICFub2RlLVx1MDAzZWRldl9uYW1lKSB7XG4rXHRcdGtmcmVlKG5vZGUtXHUwMDNlYnVzX25hbWUpO1xuK1x0XHRrZnJlZShub2RlLVx1MDAzZWRldl9uYW1lKTtcbitcdFx0a2ZyZWUobm9kZSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZWxpc3QsIFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoY2hhciAqaGFuZGxlcylcbit7XG4rXHRjaGFyICpoYW5kbGU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCFzdHJjbXAoaGFuZGxlcywgXCIqXCIpKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHdoaWxlICgoaGFuZGxlID0gc3Ryc2VwKFx1MDAyNmhhbmRsZXMsIFwiLFwiKSkgIT0gTlVMTCkge1xuK1x0XHRjaGFyICpidXNfbmFtZTtcbitcdFx0Y2hhciAqZGV2X25hbWU7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoaGFuZGxlLCBcdTAwMjZidXNfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfbmFtZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfYWRkKGJ1c19uYW1lLCBkZXZfbmFtZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZSlcbit7XG4rXHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbitcdGtmcmVlKG5vZGUtXHUwMDNlZGV2X25hbWUpO1xuK1x0a2ZyZWUobm9kZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIodm9pZClcbit7XG4rXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGVfdG1wO1xuK1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5vZGVfdG1wLFxuK1x0XHRcdFx0IFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlcywgbGlzdCkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKG5vZGUpO1xuK1x0fVxuK1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IGZhbHNlO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcnNlKGNoYXIgKnN0cilcbit7XG4rXHRlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGVzd19tb2RlO1xuK1x0Y2hhciAqc2VwYXJhdG9yO1xuK1x0Y2hhciAqaGFuZGxlcztcbitcdGNoYXIgKm1vZGU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCEqc3RyKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNlcGFyYXRvciA9IHN0cnJjaHIoc3RyLCAnPScpO1xuK1x0aWYgKCFzZXBhcmF0b3IgfHwgc2VwYXJhdG9yID09IHN0ciB8fCAhc2VwYXJhdG9yWzFdKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdCpzZXBhcmF0b3IgPSAnXFwwJztcbitcdGhhbmRsZXMgPSBzdHI7XG4rXHRtb2RlID0gc2VwYXJhdG9yICsgMTtcbitcbitcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV90b192YWx1ZShtb2RlLCBcdTAwMjZlc3dfbW9kZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRjb25zdCBjaGFyICpidXNfbmFtZSA9IGRldmxpbmtfYnVzX25hbWUoZGV2bGluayk7XG4rXHRjb25zdCBjaGFyICpkZXZfbmFtZSA9IGRldmxpbmtfZGV2X25hbWUoZGV2bGluayk7XG4rXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4rXG4rXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRub2RlID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpO1xuK1x0cmV0dXJuICEhbm9kZTtcbit9XG4rXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay1cdTAwM2VvcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2goZGV2bGluaykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpIHtcbitcdFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxuK1x0XHRcdGRldmxfd2FybihkZXZsaW5rLFxuK1x0XHRcdFx0ICBcImRldmxpbmtfZXN3aXRjaF9tb2RlPSBzZWxlY3RlZCB0aGlzIGRldmljZSBidXQgZXN3aXRjaCBtb2RlIHNldHRpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZSwgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZsX3dhcm4oZGV2bGluayxcbitcdFx0XHQgIFwiQ291bGRuJ3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxcblwiLFxuK1x0XHRcdCAgZXJyKTtcbit9XG4rXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcXVldWVfYXBwbHlfd29yayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXG4rXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4rXHRcdHJldHVybjtcbitcdGlmICghZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgfHxcbitcdCAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4rXHRcdHJldHVybjtcbitcdGlmICghZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLFxuK1x0XHRcdFx1MDAyNmRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcbitcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbitcbitcdGRldmxpbmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmssXG4rXHRcdFx0ICAgICAgIGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayk7XG4rXG4rXHRkZXZsX2xvY2soZGV2bGluayk7XG4rXG4rXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7XG4rXHRcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbitcdGRldmxpbmtfcHV0KGRldmxpbmspO1xuK31cbitcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdElOSVRfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayxcbitcdFx0ICBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayk7XG4rXHRkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IHRydWU7XG4rfVxuK1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4re1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbit9XG4rXG4rLyoqXG4rICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0XG4rICogQGRldmxpbms6IGRldmxpbmtcbisgKlxuKyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9XG4rICoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGlmIGFueSBtYXRjaGVzIEBkZXZsaW5rLlxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay5cbisgKi9cbit2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXG4rXHRkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKTtcbitcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcbitcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gc3RyO1xuK1x0cmV0dXJuIDE7XG4rfVxuK19fc2V0dXAoXCJkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cIiwgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwKTtcbitcbitpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXG4re1xuK1x0Y2hhciAqZGVmO1xuK1x0aW50IGVycjtcbitcbitcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRlZiA9IGtzdHJkdXAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4rXHRcdHByX3dhcm4oXCJkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoZGVmKTtcbitcdGtmcmVlKGRlZik7XG4rXHRpZiAoZXJyID09IC1FRVhJU1QpIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbitcdFx0cHJfd2FybihcImRldmxpbms6IGR1cGxpY2F0ZSBlc3dpdGNoIG1vZGUgaGFuZGxlcyBpZ25vcmVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbitcdFx0cHJfd2FybihcImRldmxpbms6IGludmFsaWQgZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWRcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIGlmIChlcnIgPT0gLUVOT01FTSkge1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuK1x0XHRwcl93YXJuKFwiZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIGlmIChlcnIpIHtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcImRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSxcbitcdFx0XHRcdFx0XHQgICAgICAwKTtcbitcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuK1x0XHRwcl93YXJuKFwiZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cIik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZClcbit7XG4rXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKVxuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXHUwMDI2IEJJVChhY3Rpb24pKSk7XG4rXHRpZiAoKmFjdGlvbnNfcGVyZm9ybWVkIFx1MDAyNiBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuK1x0fVxuK1xuIFx0LyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqL1xuIFx0V0FSTl9PTihtZW1jbXAocmVtb3RlX3JlbG9hZF9zdGF0cywgZGV2bGluay1cdTAwM2VzdGF0cy5yZW1vdGVfcmVsb2FkX3N0YXRzLFxuIFx0XHQgICAgICAgc2l6ZW9mKHJlbW90ZV9yZWxvYWRfc3RhdHMpKSk7XG5AQCAtNzAyLDYgKzcwNywyNSBAQCBpbnQgZGV2bGlua19ubF9lc3dpdGNoX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuK1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuK1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay1cdTAwM2VvcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0aWYgKCFvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgZXh0YWNrKTtcbit9XG4rXG4gaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gZGV2bGlua19ubF9jdHgoaW5mbyktXHUwMDNlZGV2bGluaztcbkBAIC03MTIsMTQgKzczNiw5IEBAIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHUxNiBtb2RlO1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0VTV0lUQ0hfTU9ERV0pIHtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdGVyciA9IGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgZGV2bGlua19yYXRlX2lzX25vZGUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0XHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7XG4tXHRcdGVyciA9IG9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdFx0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaCBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxuaW5kZXggY2RmODk0YmE1YTlkN2UuLmMyYmVlNWFhYmQ0OWI0IDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXG4rKysgYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmhcbkBAIC01OCw4ICs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiBcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2tleTtcbiBcdHU4IHJlbG9hZF9mYWlsZWQ6MTtcbitcdHU4IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZzoxO1xuIFx0cmVmY291bnRfdCByZWZjb3VudDtcbiBcdHN0cnVjdCByY3Vfd29yayByd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcms7XG4gXHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbDtcbiBcdHN0cnVjdCB4YXJyYXkgbmVzdGVkX3JlbHM7XG4gXHRjaGFyIHByaXZbXSBfX2FsaWduZWQoTkVUREVWX0FMSUdOKTtcbkBAIC03MSw2ICs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5O1xuIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsIHNpemVfdCBwcml2X3NpemUsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXZfZHJpdmVyKTtcbitpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfY2xlYW51cCh2b2lkKTtcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIFxuICNkZWZpbmUgZGV2bF93YXJuKGRldmxpbmssIGZvcm1hdCwgYXJncy4uLilcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtMzQ4LDYgKzM1Nyw5IEBAIGJvb2wgZGV2bGlua19yYXRlX2lzX25vZGUoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqZGV2bGlua19yYXRlKTtcbiBpbnQgZGV2bGlua19yYXRlc19jaGVjayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0XHRib29sICgqcmF0ZV9maWx0ZXIpKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKiksXG4gXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuK1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuK1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiAvKiBMaW5lY2FyZHMgKi9cbiB1bnNpZ25lZCBpbnQgZGV2bGlua19saW5lY2FyZF9pbmRleChzdHJ1Y3QgZGV2bGlua19saW5lY2FyZCAqbGluZWNhcmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDQ6MDI6MjQuNTUyNDk4NzM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUwMzE3MTYxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFwiZGV2bGlua19lc3dpdGNoX21vZGU9XCIgS2VybmVsIFBhcmFtZXRlciBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQgaW50cm9kdWNlcyBhIG5ldyBrZXJuZWwgcGFyYW1ldGVyLCBgZGV2bGlua19lc3dpdGNoX21vZGU9YCwgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGxhcmdlbHkgdW50b3VjaGFibGUgdmlhIGZ1enppbmcuXG5cblRoZSBjb3JlIG9mIHRoaXMgZmVhdHVyZSBsaWVzIGluIGBuZXQvZGV2bGluay9kZWZhdWx0LmNgLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXBgLCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXRgLCBhbmQgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwYCBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgaGFwcGVucyBvbmNlIGFuZCBvbmx5IG9uY2UgYXQgYm9vdC4gVGhpcyByZW5kZXJzIGl0IGluYWNjZXNzaWJsZSB0byBkeW5hbWljIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHdoaWNoIHByaW1hcmlseSBvcGVyYXRlcyBwb3N0LWJvb3QuIFRoZSBgX19pbml0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBhcmUgYWxzbyBvbmx5IGV4ZWN1dGVkIG9uY2UgYXQgYm9vdC5cblxuRXZlbiBpZiBzeXprYWxsZXIgd2VyZSBjb25maWd1cmVkIHRvIHNldCB0aGlzIGtlcm5lbCBwYXJhbWV0ZXIsIHRoZSBmdW5jdGlvbmFsaXR5IHByaW1hcmlseSBiZWNvbWVzIGEgYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24uIFRoZSBydW50aW1lIGNvZGUgaXMgZ3VhcmRlZCBieSBhIGNoZWNrIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZGAuIElmIHRoZSBwYXJhbWV0ZXIgaXNuJ3Qgc2V0LCB0aGVuIG1vc3Qgb2YgdGhlIHJ1bnRpbWUgY29kZSBpcyBuZXZlciBydW4uIElmIHNldCwgdGhpcyBjb2RlIHBhdGggY2FsbHMgYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgZnVuY3Rpb24gbWF5IGFscmVhZHkgYmUgZnV6emVkIGFzIGEgcmVzdWx0IG9mIHRoZSBOZXRsaW5rIGRldmxpbmsgaW50ZXJmYWNlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIHRoZXJlIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZGAgYW5kIGBtbHg1X2luaXRfb25lYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIFRoZXNlIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIE1lbGxhbm94IGhhcmR3YXJlLiBUeXBpY2FsbHksIG15IGZ1enppbmcgc2V0dXAgZG9lc24ndCBpbnZvbHZlIE1lbGxhbm94IGhhcmR3YXJlIGFuZCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3VjaCBoYXJkd2FyZS4gRXZlbiBpZiBJIGRpZCwgTWVsbGFub3ggaGFyZHdhcmUgaXNuJ3QgZW11bGF0ZWQgYW5kIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbkZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYGRldmxpbmtfcmVsb2FkYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYCBhbHNvIGhhcyBhIGNvbmRpdGlvbmFsIGNhbGwgdG8gYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBIb3dldmVyLCBpdCdzIGdhdGVkIGJ5IHRoZSBgREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVRgIGZsYWcgYW5kIGFnYWluLCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nIGlmIHRoZSBib290LXRpbWUgcGFyYW1ldGVyIHdhc24ndCBzZXQuXG5cbkZpbmFsbHksIHRoZSBgZGV2bGlua19ubF9lc3dpdGNoX3NldF9kb2l0YCBjb2RlIGlzIHJlZmFjdG9yZWQgYnkgbW92aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGludG8gYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCBjcmVhdGUgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGZ1bmN0aW9uYWwgY2hhbmdlcy4gVGhlIHBhcmFtZXRlciBpcyBvbmx5IHNldCB2aWEgTmV0bGluayBpbiB0aGlzIGNhc2UuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGUgbmV3IHBhcmFtZXRlciBpcyBvbmx5IHBhcnNlZCBhbmQgYWN0aXZhdGVkIGF0IGJvb3QtdGltZSBhbmQgdGhlIGNvZGUgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIGlzIHVucmVhY2hhYmxlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbWluaW1hbCBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IGNhbiBiZSBkeW5hbWljYWxseSBmdXp6ZWQuIFRoZSBleGlzdGluZyBOZXRsaW5rIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvIHNldCB0aGUgYGVzd2l0Y2hfbW9kZWAgaXMgbGlrZWx5IGFscmVhZHkgZnV6emFibGUuIFRoZSBNZWxsYW5veCBjb2RlIGlzIHVucmVhY2hhYmxlLlxuSSdsbCBtYXJrIHRoaXMgYXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTgxLCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjo0OS41ODQyMTcwNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8frd9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 03:54:19 +0000 UTC FinishedAt: 2026-07-08 04:02:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDQ6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNDowMjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTE3MzAwZGQ1ODljNGYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0xMjQ5LDYgJiM0MzsxMjQ5LDMxIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxuIFx0XHRcdFtIV10gTWF4aW11bSBjb25maWd1cmFibGUgZmFuIHNwZWVkLlxuIFxuJiM0MztcdGRldmxpbmtfZXN3aXRjaF9tb2RlPVxuJiM0MztcdFx0XHRbTkVUXVxuJiM0MztcdFx0XHRGb3JtYXQ6XG4mIzQzO1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlPVx1MDAzY21vZGVcdTAwM2VcbiYjNDM7XG4mIzQzO1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlOlxuJiM0MztcdFx0XHQqIHwgXHUwMDNjaGFuZGxlXHUwMDNlWyxcdTAwM2NoYW5kbGVcdTAwM2UuLi5dXG4mIzQzO1xuJiM0MztcdFx0XHRcdTAwM2NoYW5kbGVcdTAwM2U6XG4mIzQzO1x0XHRcdFx1MDAzY2J1cy1uYW1lXHUwMDNlL1x1MDAzY2Rldi1uYW1lXHUwMDNlXG4mIzQzO1xuJiM0MztcdFx0XHRDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmdcbiYjNDM7XHRcdFx0ZGV2bGluayBpbnN0YW5jZXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5cbiYjNDM7XG4mIzQzO1x0XHRcdFx1MDAzY21vZGVcdTAwM2U6XG4mIzQzO1x0XHRcdGxlZ2FjeSB8IHN3aXRjaGRldiB8IHN3aXRjaGRldl9pbmFjdGl2ZVxuJiM0MztcbiYjNDM7XHRcdFx0RXhhbXBsZXM6XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XG4mIzQzO1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcbiYjNDM7XG4mIzQzO1x0XHRcdFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxuJiM0MztcdFx0XHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxuJiM0MztcbiBcdGRmbHRjYz1cdFx0W0hXLFMzOTBdXG4gXHRcdFx0Rm9ybWF0OiB7IG9uIHwgb2ZmIHwgZGVmX29ubHkgfCBpbmZfb25seSB8IGFsd2F5cyB9XG4gXHRcdFx0b246ICAgICAgIHMzOTAgemxpYiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBvblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3Rcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzgwYzllOTkyMTBlMzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0XG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGVcbiYjNDM7a2VybmVsIGNvbW1hbmQgbGluZSBhbmQgYXBwbGllZCB0byBtYXRjaGluZyBkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlXG4mIzQzO2luaXRpYWxpemF0aW9uLlxuJiM0MztcbiYjNDM7VGhlIGRldmxpbmsgZGV2aWNlIGlzIHNlbGVjdGVkIGJ5IGl0cyBkZXZsaW5rIGhhbmRsZS4gRm9yIFBDSSBkZXZpY2VzIHRoaXMgaXNcbiYjNDM7dGhlIHNhbWUgaGFuZGxlIHNob3duIGJ5IGBgZGV2bGluayBkZXYgc2hvd2BgLCBmb3IgZXhhbXBsZVxuJiM0MztgYHBjaS8wMDAwOjA4OjAwLjBgYC5cbiYjNDM7XG4mIzQzO0tlcm5lbCBjb21tYW5kIGxpbmUgc3ludGF4XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztEZWZhdWx0cyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgZGV2bGlua19lc3dpdGNoX21vZGU9YGAga2VybmVsIGNvbW1hbmQgbGluZVxuJiM0MztwYXJhbWV0ZXIuXG4mIzQzO1xuJiM0MztUaGUgZ2VuZXJhbCBzeW50YXggaXM6OlxuJiM0MztcbiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cdTAwM2NzZWxlY3Rvclx1MDAzZT1cdTAwM2Ntb2RlXHUwMDNlXG4mIzQzO1xuJiM0MztgYFx1MDAzY3NlbGVjdG9yXHUwMDNlYGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6XG4mIzQzO1xuJiM0MzsgICogfCBcdTAwM2NidXMtbmFtZVx1MDAzZS9cdTAwM2NkZXYtbmFtZVx1MDAzZVssXHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2UuLi5dXG4mIzQzO1xuJiM0MztgYCpgYCBhcHBsaWVzIHRoZSBtb2RlIHRvIGV2ZXJ5IGRldmxpbmsgaW5zdGFuY2UuIEFsbCBoYW5kbGVzIGluIHRoZSBzYW1lXG4mIzQzO3NlbGVjdG9yIHJlY2VpdmUgdGhlIHNhbWUgZXN3aXRjaCBtb2RlLlxuJiM0MztcbiYjNDM7YGBcdTAwM2Ntb2RlXHUwMDNlYGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC5cbiYjNDM7XG4mIzQzO1N5bnRheCBydWxlc1xuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxuJiM0MztcbiYjNDM7KiBTcGVjaWZ5IHRoZSBkZWZhdWx0IGluIG9uZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlci4gUmVwZWF0ZWRcbiYjNDM7ICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cbiYjNDM7KiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXG4mIzQzOyAgc2l6ZS5cbiYjNDM7KiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuJiM0MzsqIGBgXHUwMDNjc2VsZWN0b3JcdTAwM2VgYCBtdXN0IGJlIGVpdGhlciBgYCpgYCBvciBhIGhhbmRsZSBsaXN0LiBgYCpgYCBjYW5ub3QgYmVcbiYjNDM7ICBjb21iaW5lZCB3aXRoIGV4cGxpY2l0IGhhbmRsZXMuXG4mIzQzOyogYGBcdTAwM2NidXMtbmFtZVx1MDAzZWBgIGFuZCBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXG4mIzQzOyogYGBcdTAwM2NkZXYtbmFtZVx1MDAzZWBgIG1heSBjb250YWluIGBgOmBgLiBUaGlzIGFsbG93cyBQQ0kgbmFtZXMgc3VjaCBhc1xuJiM0MzsgIGBgMDAwMDowODowMC4wYGAuXG4mIzQzOyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLlxuJiM0MzsqIEEgY29tbWEgc2VwYXJhdGVzIGhhbmRsZXMuXG4mIzQzOyogQ29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpc1xuJiM0MzsgIGlnbm9yZWQuXG4mIzQzO1xuJiM0MztUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGluayBkZXYgZXN3aXRjaCBzZXQgXHUwMDNjaGFuZGxlXHUwMDNlIG1vZGUgXHUwMDNjdmFsdWVcdTAwM2VcbiYjNDM7XG4mIzQzO1xuJiM0MztFeGFtcGxlc1xuJiM0Mzs9PT09PT09PVxuJiM0MztcbiYjNDM7U2V0IGFsbCBkZXZsaW5rIGluc3RhbmNlcyB0byBzd2l0Y2hkZXYgbW9kZTo6XG4mIzQzO1xuJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XG4mIzQzO1xuJiM0MztTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXZcbiYjNDM7XG4mIzQzO1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjpcbiYjNDM7XG4mIzQzOyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxuJiM0MztcbiYjNDM7VGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGJlY2F1c2UgY29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdFxuJiM0MztzdXBwb3J0ZWQ6OlxuJiM0MztcbiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldixwY2kvMDAwMDowOTowMC4wPXN3aXRjaGRldl9pbmFjdGl2ZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjEzNGQyZjMxOTkyMmMyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbkBAIC01Niw2ICYjNDM7NTYsNyBAQCBnZW5lcmFsLlxuICAgIDptYXhkZXB0aDogMVxuIFxuICAgIGRldmxpbmstZHBpcGVcbiYjNDM7ICAgZGV2bGluay1kZWZhdWx0c1xuICAgIGRldmxpbmstZXN3aXRjaC1hdHRyXG4gICAgZGV2bGluay1mbGFzaFxuICAgIGRldmxpbmstaGVhbHRoXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuY1xuaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXG5AQCAtMjM4LDI0ICYjNDM7MjM4LDMwIEBAIHN0YXRpYyB2b2lkIG1seDVfZndfcmVzZXRfY29tcGxldGVfcmVsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfZndfcmVzZXQgKmZ3X3Jlc2V0ID0gZGV2LVx1MDAzZXByaXYuZndfcmVzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXG4gXHRpZiAodGVzdF9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19QRU5ESU5HX0NPTVAsIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsXG4mIzQzO1x0XHRcdCAgXHUwMDI2ZndfcmVzZXQtXHUwMDNlcmVzZXRfZmxhZ3MpO1xuIFx0XHRjb21wbGV0ZShcdTAwMjZmd19yZXNldC1cdTAwM2Vkb25lKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcbi1cdFx0aWYgKG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldikpXG4tXHRcdFx0bWx4NV9jb3JlX2VycihkZXYsIFwmIzM0O3Jlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcblwmIzM0Oyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRtbHg1X2xvYWRfb25lKGRldiwgdHJ1ZSk7XG4tXHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbi1cdFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXG4tXHRcdFx0XHRcdFx0XHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpIHxcbi1cdFx0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRldfQUNUSVZBVEUpKTtcbi1cdFx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0bWx4NV9zeW5jX3Jlc2V0X3VubG9hZF9mbG93KGRldiwgZmFsc2UpO1xuJiM0MztcdGVyciA9IG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldik7XG4mIzQzO1xuJiM0MztcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdGNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLCBcdTAwMjZmd19yZXNldC1cdTAwM2VyZXNldF9mbGFncyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIoZGV2LCBcJiMzNDtyZXNldCByZWxvYWQgZmxvdyBhYm9ydGVkLCBQQ0kgcmVhZHMgc3RpbGwgbm90IHdvcmtpbmdcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXG4mIzQzO1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuJiM0MztcdFx0XHRcdFx0XHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XG4mIzQzO1x0ZGV2bF91bmxvY2soZGV2bGluayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVfc3RvcF9zeW5jX3Jlc2V0X3BvbGwoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xuQEAgLTEzOTIsNiAmIzQzOzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG1seDVfZnJlZV9iZnJlZyhkZXYsIFx1MDAyNmRldi1cdTAwM2Vwcml2LmJmcmVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1seDVfZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIU1MWDVfRVNXSVRDSF9NQU5BR0VSKGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XHRkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4gXHRib29sIGxpZ2h0X3Byb2JlID0gbWx4NV9kZXZfaXNfbGlnaHR3ZWlnaHQoZGV2KTtcbkBAIC0xNDcxLDYgJiM0MzsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGVyciA9IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoZGV2KTtcbiBcdGlmIChlcnIpXG4gXHRcdGRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtbHg1X2RldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXYpO1xuIHVubG9jazpcbiBcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kZXZsaW5rLmggYi9pbmNsdWRlL25ldC9kZXZsaW5rLmhcbmluZGV4IGZmZTFhZDVmYjcwYmI4Li45MGRhMDNjMDExMmNiYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXG5AQCAtMTY2MSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsXG4gXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiYjNDM7dm9pZCBkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bGlua19yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9NYWtlZmlsZSBiL25ldC9kZXZsaW5rL01ha2VmaWxlXG5pbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcbkBAIC0xLDQgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4tb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbiYjNDM7b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIGRlZmF1bHQubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4gXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xuaW5kZXggYzUzYTQyZTE3YTU4OWQuLjlkOWNjNDA2MjZmYzMzIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9jb3JlLmNcbkBAIC0zMTcsNiAmIzQzOzMxNyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdHJ5bG9jayk7XG4gXG4gdm9pZCBkZXZsX3VubG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiB7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoZGV2bGluayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF91bmxvY2spO1xuQEAgLTQyOSw2ICYjNDM7NDMwLDcgQEAgdm9pZCBkZXZsX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4gXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xuIFx0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuIFxuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0ZGV2bGlua19ub3RpZnlfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiBcdHhhX2NsZWFyX21hcmsoXHUwMDI2ZGV2bGlua3MsIGRldmxpbmstXHUwMDNlaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XG4gXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XG5AQCAtNDkwLDYgJiM0Mzs0OTIsNyBAQCBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2bGluay1cdTAwM2V0cmFwX2dyb3VwX2xpc3QpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2bGluay1cdTAwM2V0cmFwX3BvbGljZXJfbGlzdCk7XG4gXHRJTklUX1JDVV9XT1JLKFx1MDAyNmRldmxpbmstXHUwMDNlcndvcmssIGRldmxpbmtfcmVsZWFzZSk7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7XG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jaywgXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrX2tleSk7XG5AQCAtNTM3LDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiBcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdFdBUk5fT04oZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBOVUxMLCBOVUxMKSk7XG4gXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoZGV2bGluayk7XG4mIzQzO1xuIFx0ZGV2bGlua19yZWxfcHV0KGRldmxpbmspO1xuIFxuIFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZkZXZsaW5rLVx1MDAzZXRyYXBfcG9saWNlcl9saXN0KSk7XG5AQCAtNTk4LDYgJiM0Mzs2MDQsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGV2bGlua19pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdCgpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC02MTMsNyAmIzQzOzYyMywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcbiBvdXRfdW5yZWdfcGVybmV0X3N1YnN5czpcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZkZXZsaW5rX3Blcm5ldF9vcHMpO1xuIG91dDpcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTtcbiBcdFdBUk5fT04oZXJyKTtcbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZWZhdWx0LmMgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWEzN2Q3NjczMWUxZDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuY1xuQEAgLTAsMCAmIzQzOzEsMzY0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OIFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RldmxfaW50ZXJuYWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbTtcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbDtcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQ7XG4mIzQzO3N0YXRpYyBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZTtcbiYjNDM7c3RhdGljIExJU1RfSEVBRChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdGNoYXIgKmJ1c19uYW1lO1xuJiM0MztcdGNoYXIgKmRldl9uYW1lO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKGNvbnN0IGNoYXIgKnN0cixcbiYjNDM7XHRcdFx0XHQgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgKm1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN0cmNtcChzdHIsIFwmIzM0O2xlZ2FjeVwmIzM0OykpIHtcbiYjNDM7XHRcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc3RyY21wKHN0ciwgXCYjMzQ7c3dpdGNoZGV2XCYjMzQ7KSkge1xuJiM0MztcdFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDtzd2l0Y2hkZXZfaW5hY3RpdmVcJiMzNDspKSB7XG4mIzQzO1x0XHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0XG4mIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoY2hhciAqaGFuZGxlLCBjaGFyICoqYnVzX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgY2hhciAqKmRldl9uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqc2xhc2g7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEqaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGZvciAocCA9IGhhbmRsZTsgKnA7IHAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoKnAgPT0gJiMzOTsqJiMzOTsgfHwgKnAgPT0gJiMzOTs9JiMzOTspXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2xhc2ggPSBzdHJjaHIoaGFuZGxlLCAmIzM5Oy8mIzM5Oyk7XG4mIzQzO1x0aWYgKCFzbGFzaCB8fCBzbGFzaCA9PSBoYW5kbGUgfHwgIXNsYXNoWzFdKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHN0cmNocihzbGFzaCAmIzQzOyAxLCAmIzM5Oy8mIzM5OykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0KnNsYXNoID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0KmJ1c19uYW1lID0gaGFuZGxlO1xuJiM0MztcdCpkZXZfbmFtZSA9IHNsYXNoICYjNDM7IDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKlxuJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGNvbnN0IGNoYXIgKmJ1c19uYW1lLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcbiYjNDM7XHRcdGlmICghc3RyY21wKG5vZGUtXHUwMDNlYnVzX25hbWUsIGJ1c19uYW1lKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5vZGUtXHUwMDNlZGV2X25hbWUsIGRldl9uYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIG5vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfYWRkKGNvbnN0IGNoYXIgKmJ1c19uYW1lLCBjb25zdCBjaGFyICpkZXZfbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZpbmQoYnVzX25hbWUsIGRldl9uYW1lKSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiYjNDM7XHRub2RlID0ga3phbGxvY19vYmooKm5vZGUpO1xuJiM0MztcdGlmICghbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdG5vZGUtXHUwMDNlYnVzX25hbWUgPSBrc3RyZHVwKGJ1c19uYW1lLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRub2RlLVx1MDAzZWRldl9uYW1lID0ga3N0cmR1cChkZXZfbmFtZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFub2RlLVx1MDAzZWJ1c19uYW1lIHx8ICFub2RlLVx1MDAzZWRldl9uYW1lKSB7XG4mIzQzO1x0XHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbiYjNDM7XHRcdGtmcmVlKG5vZGUtXHUwMDNlZGV2X25hbWUpO1xuJiM0MztcdFx0a2ZyZWUobm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShjaGFyICpoYW5kbGVzKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqaGFuZGxlO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc3RyY21wKGhhbmRsZXMsIFwmIzM0OypcJiMzNDspKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChoYW5kbGUgPSBzdHJzZXAoXHUwMDI2aGFuZGxlcywgXCYjMzQ7LFwmIzM0OykpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGNoYXIgKmJ1c19uYW1lO1xuJiM0MztcdFx0Y2hhciAqZGV2X25hbWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZV9wYXJzZShoYW5kbGUsIFx1MDAyNmJ1c19uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfbmFtZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXRcbiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZnJlZShzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbiYjNDM7XHRrZnJlZShub2RlLVx1MDAzZWRldl9uYW1lKTtcbiYjNDM7XHRrZnJlZShub2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlX3RtcDtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBub2RlX3RtcCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzLCBsaXN0KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZnJlZShub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwgPSBmYWxzZTtcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTtcbiYjNDM7XHRjaGFyICpzZXBhcmF0b3I7XG4mIzQzO1x0Y2hhciAqaGFuZGxlcztcbiYjNDM7XHRjaGFyICptb2RlO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKnN0cilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzZXBhcmF0b3IgPSBzdHJyY2hyKHN0ciwgJiMzOTs9JiMzOTspO1xuJiM0MztcdGlmICghc2VwYXJhdG9yIHx8IHNlcGFyYXRvciA9PSBzdHIgfHwgIXNlcGFyYXRvclsxXSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQqc2VwYXJhdG9yID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRoYW5kbGVzID0gc3RyO1xuJiM0MztcdG1vZGUgPSBzZXBhcmF0b3IgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsIFx1MDAyNmVzd19tb2RlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZSA9IGVzd19tb2RlO1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqYnVzX25hbWUgPSBkZXZsaW5rX2J1c19uYW1lKGRldmxpbmspO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRldl9uYW1lID0gZGV2bGlua19kZXZfbmFtZShkZXZsaW5rKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSk7XG4mIzQzO1x0cmV0dXJuICEhbm9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVx1MDAzZW9wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKGRldmxpbmspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KSB7XG4mIzQzO1x0XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpXG4mIzQzO1x0XHRcdGRldmxfd2FybihkZXZsaW5rLFxuJiM0MztcdFx0XHRcdCAgXCYjMzQ7ZGV2bGlua19lc3dpdGNoX21vZGU9IHNlbGVjdGVkIHRoaXMgZGV2aWNlIGJ1dCBlc3dpdGNoIG1vZGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGUsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZsX3dhcm4oZGV2bGluayxcbiYjNDM7XHRcdFx0ICBcJiMzNDtDb3VsZG4mIzM5O3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBlcnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyB8fFxuJiM0MztcdCAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFkZXZsaW5rX3RyeV9nZXQoZGV2bGluaykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFxdWV1ZV93b3JrKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSxcbiYjNDM7XHRcdFx0XHUwMDI2ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxuJiM0MztcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZsaW5rLFxuJiM0MztcdFx0XHQgICAgICAgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bF9sb2NrKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZykge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XHRcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiYjNDM7XHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayxcbiYjNDM7XHRcdCAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xuJiM0MztcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSAtIEFwcGx5IGRldmxpbmsgZXN3aXRjaCBtb2RlIGJvb3QgZGVmYXVsdFxuJiM0MzsgKiBAZGV2bGluazogZGV2bGlua1xuJiM0MzsgKlxuJiM0MzsgKiBBcHBseSB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgc2VsZWN0ZWQgYnkgdGhlIGRldmxpbmtfZXN3aXRjaF9tb2RlPVxuJiM0MzsgKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciwgaWYgYW55IG1hdGNoZXMgQGRldmxpbmsuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBkZXZsaW5rIGluc3RhbmNlIGxvY2suXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbiYjNDM7e1xuJiM0MztcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbiYjNDM7XG4mIzQzO1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7XG4mIzQzO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxuJiM0MztcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7X19zZXR1cChcJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cJiMzNDssIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cCk7XG4mIzQzO1xuJiM0MztpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpkZWY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJzZShkZWYpO1xuJiM0MztcdGtmcmVlKGRlZik7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUVYSVNUKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkdXBsaWNhdGUgZXN3aXRjaCBtb2RlIGhhbmRsZXMgaWdub3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKGVyciA9PSAtRUlOVkFMKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBpbnZhbGlkIGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pIHtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O2Rldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSBpZiAoZXJyKSB7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAwKTtcbiYjNDM7XHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSkge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpO1xuJiM0MztcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggYmNmMDAxNTU0ZTg0MDIuLjYxMWJiNmJmZDQ5MmJmIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtNDc4LDYgJiM0Mzs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXHUwMDI2IEJJVChhY3Rpb24pKSk7XG4mIzQzO1x0aWYgKCphY3Rpb25zX3BlcmZvcm1lZCBcdTAwMjYgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkge1xuJiM0MztcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7XG4mIzQzO1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBDYXRjaCBkcml2ZXIgb24gdXBkYXRpbmcgdGhlIHJlbW90ZSBhY3Rpb24gd2l0aGluIGRldmxpbmsgcmVsb2FkICovXG4gXHRXQVJOX09OKG1lbWNtcChyZW1vdGVfcmVsb2FkX3N0YXRzLCBkZXZsaW5rLVx1MDAzZXN0YXRzLnJlbW90ZV9yZWxvYWRfc3RhdHMsXG4gXHRcdCAgICAgICBzaXplb2YocmVtb3RlX3JlbG9hZF9zdGF0cykpKTtcbkBAIC03MDIsNiAmIzQzOzcwNywyNSBAQCBpbnQgZGV2bGlua19ubF9lc3dpdGNoX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiYjNDM7XHRcdFx0ICAgICBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIG1vZGUsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVx1MDAzZW9wcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4mIzQzO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgZGV2bGlua19yYXRlX2lzX25vZGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBleHRhY2spO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVx1MDAzZWRldmxpbms7XG5AQCAtNzEyLDE0ICYjNDM7NzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0dTE2IG1vZGU7XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSkge1xuLVx0XHRpZiAoIW9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KVxuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdFx0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSxcbi1cdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0XHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7XG4tXHRcdGVyciA9IG9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmggYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmhcbmluZGV4IGNkZjg5NGJhNWE5ZDdlLi5jMmJlZTVhYWJkNDliNCAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXG5AQCAtNTgsOCAmIzQzOzU4LDEwIEBAIHN0cnVjdCBkZXZsaW5rIHtcbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuIFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xuIFx0dTggcmVsb2FkX2ZhaWxlZDoxO1xuJiM0MztcdHU4IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZzoxO1xuIFx0cmVmY291bnRfdCByZWZjb3VudDtcbiBcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrO1xuIFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWw7XG4gXHRzdHJ1Y3QgeGFycmF5IG5lc3RlZF9yZWxzO1xuIFx0Y2hhciBwcml2W10gX19hbGlnbmVkKE5FVERFVl9BTElHTik7XG5AQCAtNzEsNiAmIzQzOzczLDEzIEBAIGV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZGV2bGlua19ubF9mYW1pbHk7XG4gc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSxcbiBcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRldl9kcml2ZXIpO1xuJiM0MztpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4mIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIFxuICNkZWZpbmUgZGV2bF93YXJuKGRldmxpbmssIGZvcm1hdCwgYXJncy4uLilcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtMzQ4LDYgJiM0MzszNTcsOSBAQCBib29sIGRldmxpbmtfcmF0ZV9pc19ub2RlKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKmRldmxpbmtfcmF0ZSk7XG4gaW50IGRldmxpbmtfcmF0ZXNfY2hlY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdFx0Ym9vbCAoKnJhdGVfZmlsdGVyKShjb25zdCBzdHJ1Y3QgZGV2bGlua19yYXRlICopLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gLyogTGluZWNhcmRzICovXG4gdW5zaWduZWQgaW50IGRldmxpbmtfbGluZWNhcmRfaW5kZXgoc3RydWN0IGRldmxpbmtfbGluZWNhcmQgKmxpbmVjYXJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJvb3QtdGltZSBrZXJuZWwgcGFyYW1ldGVyIGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gIHRvIHNldCB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gVGhlIHBhcnNpbmcgbG9naWMgaXMgbWFya2VkIGFzIGBfX2luaXRgIGFuZCBvbmx5IHJ1bnMgZHVyaW5nIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgcnVudGltZSBmdXp6aW5nLiBUaGUgcnVudGltZSBsb2dpYyBpcyBnYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBib290IHBhcmFtZXRlciwgd2hpY2ggc3l6a2FsbGVyIHdpbGwgbm90IHByb3ZpZGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtbHg1IGRyaXZlciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAwNDowMjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjExNzMwMGRkNTg5YzRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTI0OSw2ICYjNDM7MTI0OSwzMSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCWRlbGxfc21tX2h3bW9uLmZhbl9tYXg9CiAJCQlbSFddIE1heGltdW0gY29uZmlndXJhYmxlIGZhbiBzcGVlZC4KIAomIzQzOwlkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0KJiM0MzsJCQlbTkVUXQomIzQzOwkJCUZvcm1hdDoKJiM0MzsJCQkmbHQ7c2VsZWN0b3ImZ3Q7PSZsdDttb2RlJmd0OwomIzQzOwomIzQzOwkJCSZsdDtzZWxlY3RvciZndDs6CiYjNDM7CQkJKiB8ICZsdDtoYW5kbGUmZ3Q7WywmbHQ7aGFuZGxlJmd0Oy4uLl0KJiM0MzsKJiM0MzsJCQkmbHQ7aGFuZGxlJmd0OzoKJiM0MzsJCQkmbHQ7YnVzLW5hbWUmZ3Q7LyZsdDtkZXYtbmFtZSZndDsKJiM0MzsKJiM0MzsJCQlDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmcKJiM0MzsJCQlkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLgomIzQzOwomIzQzOwkJCSZsdDttb2RlJmd0OzoKJiM0MzsJCQlsZWdhY3kgfCBzd2l0Y2hkZXYgfCBzd2l0Y2hkZXZfaW5hY3RpdmUKJiM0MzsKJiM0MzsJCQlFeGFtcGxlczoKJiM0MzsJCQlkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0qPXN3aXRjaGRldgomIzQzOwkJCWRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2CiYjNDM7CQkJZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZQomIzQzOwomIzQzOwkJCVNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdAomIzQzOwkJCWZvciB0aGUgZnVsbCBzeW50YXguCiYjNDM7CiAJZGZsdGNjPQkJW0hXLFMzOTBdCiAJCQlGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH0KIAkJCW9uOiAgICAgICBzMzkwIHpsaWIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY29tcHJlc3Npb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4MGM5ZTk5MjEwZTM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGUKJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2UKJiM0Mztpbml0aWFsaXphdGlvbi4KJiM0MzsKJiM0MztUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpcwomIzQzO3RoZSBzYW1lIGhhbmRsZSBzaG93biBieSBgYGRldmxpbmsgZGV2IHNob3dgYCwgZm9yIGV4YW1wbGUKJiM0MztgYHBjaS8wMDAwOjA4OjAwLjBgYC4KJiM0MzsKJiM0MztLZXJuZWwgY29tbWFuZCBsaW5lIHN5bnRheAomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RGVmYXVsdHMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIGtlcm5lbCBjb21tYW5kIGxpbmUKJiM0MztwYXJhbWV0ZXIuCiYjNDM7CiYjNDM7VGhlIGdlbmVyYWwgc3ludGF4IGlzOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSZsdDtzZWxlY3RvciZndDs9Jmx0O21vZGUmZ3Q7CiYjNDM7CiYjNDM7YGAmbHQ7c2VsZWN0b3ImZ3Q7YGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6CiYjNDM7CiYjNDM7ICAqIHwgJmx0O2J1cy1uYW1lJmd0Oy8mbHQ7ZGV2LW5hbWUmZ3Q7WywmbHQ7YnVzLW5hbWUmZ3Q7LyZsdDtkZXYtbmFtZSZndDsuLi5dCiYjNDM7CiYjNDM7YGAqYGAgYXBwbGllcyB0aGUgbW9kZSB0byBldmVyeSBkZXZsaW5rIGluc3RhbmNlLiBBbGwgaGFuZGxlcyBpbiB0aGUgc2FtZQomIzQzO3NlbGVjdG9yIHJlY2VpdmUgdGhlIHNhbWUgZXN3aXRjaCBtb2RlLgomIzQzOwomIzQzO2BgJmx0O21vZGUmZ3Q7YGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC4KJiM0MzsKJiM0MztTeW50YXggcnVsZXMKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztUaGUgZm9sbG93aW5nIHN5bnRheCBydWxlcyBhcHBseToKJiM0MzsKJiM0MzsqIFNwZWNpZnkgdGhlIGRlZmF1bHQgaW4gb25lIGBgZGV2bGlua19lc3dpdGNoX21vZGU9YGAgcGFyYW1ldGVyLiBSZXBlYXRlZAomIzQzOyAgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBwYXJhbWV0ZXJzIGFyZSBub3QgYWNjdW11bGF0ZWQuCiYjNDM7KiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCiYjNDM7ICBzaXplLgomIzQzOyogV2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCB3aXRoaW4gdGhlIHBhcmFtZXRlciB2YWx1ZS4KJiM0MzsqIGBgJmx0O3NlbGVjdG9yJmd0O2BgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZQomIzQzOyAgY29tYmluZWQgd2l0aCBleHBsaWNpdCBoYW5kbGVzLgomIzQzOyogYGAmbHQ7YnVzLW5hbWUmZ3Q7YGAgYW5kIGBgJmx0O2Rldi1uYW1lJmd0O2BgIG11c3Qgbm90IGJlIGVtcHR5LgomIzQzOyogYGAmbHQ7ZGV2LW5hbWUmZ3Q7YGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzCiYjNDM7ICBgYDAwMDA6MDg6MDAuMGBgLgomIzQzOyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLgomIzQzOyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy4KJiM0MzsqIENvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLgomIzQzOyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpcwomIzQzOyAgaWdub3JlZC4KJiM0MzsKJiM0MztUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjoKJiM0MzsKJiM0MzsgIGRldmxpbmsgZGV2IGVzd2l0Y2ggc2V0ICZsdDtoYW5kbGUmZ3Q7IG1vZGUgJmx0O3ZhbHVlJmd0OwomIzQzOwomIzQzOwomIzQzO0V4YW1wbGVzCiYjNDM7PT09PT09PT0KJiM0MzsKJiM0MztTZXQgYWxsIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBtb2RlOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2CiYjNDM7CiYjNDM7U2V0IG9uZSBQQ0kgZGV2bGluayBpbnN0YW5jZSB0byBzd2l0Y2hkZXYgbW9kZTo6CiYjNDM7CiYjNDM7ICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldgomIzQzOwomIzQzO1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmUKJiM0MzsKJiM0MztUaGUgZm9sbG93aW5nIGlzIGludmFsaWQgYmVjYXVzZSBjb21tYS1zZXBhcmF0ZWQgZGVmYXVsdCBhc3NpZ25tZW50cyBhcmUgbm90CiYjNDM7c3VwcG9ydGVkOjoKJiM0MzsKJiM0MzsgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2LHBjaS8wMDAwOjA5OjAwLjA9c3dpdGNoZGV2X2luYWN0aXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjEzNGQyZjMxOTkyMmMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CkBAIC01Niw2ICYjNDM7NTYsNyBAQCBnZW5lcmFsLgogICAgOm1heGRlcHRoOiAxCiAKICAgIGRldmxpbmstZHBpcGUKJiM0MzsgICBkZXZsaW5rLWRlZmF1bHRzCiAgICBkZXZsaW5rLWVzd2l0Y2gtYXR0cgogICAgZGV2bGluay1mbGFzaAogICAgZGV2bGluay1oZWFsdGgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmMKaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYwpAQCAtMjM4LDI0ICYjNDM7MjM4LDMwIEBAIHN0YXRpYyB2b2lkIG1seDVfZndfcmVzZXRfY29tcGxldGVfcmVsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1seDVfZndfcmVzZXQgKmZ3X3Jlc2V0ID0gZGV2LSZndDtwcml2LmZ3X3Jlc2V0OwogCXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7CiYjNDM7CWludCBlcnI7CiAKIAkvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovCiAJaWYgKHRlc3RfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUEVORElOR19DT01QLCAmYW1wO2Z3X3Jlc2V0LSZndDtyZXNldF9mbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLAomIzQzOwkJCSAgJmFtcDtmd19yZXNldC0mZ3Q7cmVzZXRfZmxhZ3MpOwogCQljb21wbGV0ZSgmYW1wO2Z3X3Jlc2V0LSZndDtkb25lKTsKLQl9IGVsc2UgewotCQltbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7Ci0JCWlmIChtbHg1X2hlYWx0aF93YWl0X3BjaV91cChkZXYpKQotCQkJbWx4NV9jb3JlX2VycihkZXYsICYjMzQ7cmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXG4mIzM0Oyk7Ci0JCWVsc2UKLQkJCW1seDVfbG9hZF9vbmUoZGV2LCB0cnVlKTsKLQkJZGV2bF9sb2NrKGRldmxpbmspOwotCQlkZXZsaW5rX3JlbW90ZV9yZWxvYWRfYWN0aW9uc19wZXJmb3JtZWQoZGV2bGluaywgMCwKLQkJCQkJCQlCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpIHwKLQkJCQkJCQlCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7Ci0JCWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwkJcmV0dXJuOwogCX0KIAomIzQzOwltbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7CiYjNDM7CWVyciA9IG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldik7CiYjNDM7CiYjNDM7CWRldmxfbG9jayhkZXZsaW5rKTsKIAljbGVhcl9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19SRVNFVF9JTl9QUk9HUkVTUywgJmFtcDtmd19yZXNldC0mZ3Q7cmVzZXRfZmxhZ3MpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbWx4NV9jb3JlX2VycihkZXYsICYjMzQ7cmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCW1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsCiYjNDM7CQkJCQkJQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSB8CiYjNDM7CQkJCQkJQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9GV19BQ1RJVkFURSkpOwomIzQzOwlkZXZsX3VubG9jayhkZXZsaW5rKTsKIH0KIAogc3RhdGljIHZvaWQgbWx4NV9zdG9wX3N5bmNfcmVzZXRfcG9sbChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKQEAgLTEzOTIsNiAmIzQzOzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAltbHg1X2ZyZWVfYmZyZWcoZGV2LCAmYW1wO2Rldi0mZ3Q7cHJpdi5iZnJlZyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtbHg1X2RldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7CiYjNDM7CWRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXZsaW5rKTsKJiM0Mzt9CiYjNDM7CiBpbnQgbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogewogCWJvb2wgbGlnaHRfcHJvYmUgPSBtbHg1X2Rldl9pc19saWdodHdlaWdodChkZXYpOwpAQCAtMTQ3MSw2ICYjNDM7MTQ4Miw4IEBAIGludCBtbHg1X2luaXRfb25lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJZXJyID0gbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChkZXYpOwogCWlmIChlcnIpCiAJCWRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTsKJiM0MzsJZWxzZQomIzQzOwkJbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTsKIHVubG9jazoKIAlkZXZsX3VubG9jayhkZXZsaW5rKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oCmluZGV4IGZmZTFhZDVmYjcwYmI4Li45MGRhMDNjMDExMmNiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZGV2bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaApAQCAtMTY2MSw2ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsCiAKIGludCBkZXZsX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7CiB2b2lkIGRldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwogdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwogdm9pZCBkZXZsaW5rX2ZyZWUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspOwpkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvTWFrZWZpbGUgYi9uZXQvZGV2bGluay9NYWtlZmlsZQppbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDQgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAotb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXAomIzQzO29iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBkZWZhdWx0Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcCiAJIHJlc291cmNlLm8gcGFyYW0ubyByZWdpb24ubyBoZWFsdGgubyB0cmFwLm8gcmF0ZS5vIGxpbmVjYXJkLm8gc2hfZGV2Lm8KZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuYwppbmRleCBjNTNhNDJlMTdhNTg5ZC4uOWQ5Y2M0MDYyNmZjMzMgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9jb3JlLmMKQEAgLTMxNyw2ICYjNDM7MzE3LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTsKIAogdm9pZCBkZXZsX3VubG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKIHsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoZGV2bGluayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2bGluay0mZ3Q7bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZsX3VubG9jayk7CkBAIC00MjksNiAmIzQzOzQzMCw3IEBAIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQogCUFTU0VSVF9ERVZMSU5LX1JFR0lTVEVSRUQoZGV2bGluayk7CiAJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwogCiYjNDM7CWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspOwogCWRldmxpbmtfbm90aWZ5X3VucmVnaXN0ZXIoZGV2bGluayk7CiAJeGFfY2xlYXJfbWFyaygmYW1wO2RldmxpbmtzLCBkZXZsaW5rLSZndDtpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTsKIAlkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7CkBAIC00OTAsNiAmIzQzOzQ5Miw3IEBAIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsIHNpemVfdCBwcml2X3NpemUsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZsaW5rLSZndDt0cmFwX2dyb3VwX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2bGluay0mZ3Q7dHJhcF9wb2xpY2VyX2xpc3QpOwogCUlOSVRfUkNVX1dPUksoJmFtcDtkZXZsaW5rLSZndDtyd29yaywgZGV2bGlua19yZWxlYXNlKTsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7CiAJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoJmFtcDtkZXZsaW5rLSZndDtsb2NrX2tleSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2RldmxpbmstJmd0O2xvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZhbXA7ZGV2bGluay0mZ3Q7bG9jaywgJmFtcDtkZXZsaW5rLSZndDtsb2NrX2tleSk7CkBAIC01MzcsNiAmIzQzOzU0MCw5IEBAIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQogCWRldmxfbG9jayhkZXZsaW5rKTsKIAlXQVJOX09OKGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgTlVMTCwgTlVMTCkpOwogCWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfY2xlYW51cChkZXZsaW5rKTsKJiM0MzsKIAlkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7CiAKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZhbXA7ZGV2bGluay0mZ3Q7dHJhcF9wb2xpY2VyX2xpc3QpKTsKQEAgLTU5OCw2ICYjNDM7NjA0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQoKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtkZXZsaW5rX3Blcm5ldF9vcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtNjEzLDcgJiM0Mzs2MjMsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGV2bGlua19pbml0KHZvaWQpCiBvdXRfdW5yZWdfcGVybmV0X3N1YnN5czoKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtkZXZsaW5rX3Blcm5ldF9vcHMpOwogb3V0OgomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTsKIAlXQVJOX09OKGVycik7CiYjNDM7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGVmYXVsdC5jIGIvbmV0L2RldmxpbmsvZGVmYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuYwpAQCAtMCwwICYjNDM7MSwzNjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OICZhbXA7IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2RldmxfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbTsKJiM0MztzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsOwomIzQzO3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkOwomIzQzO3N0YXRpYyBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3E7CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwljaGFyICpidXNfbmFtZTsKJiM0MzsJY2hhciAqZGV2X25hbWU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdAomIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV90b192YWx1ZShjb25zdCBjaGFyICpzdHIsCiYjNDM7CQkJCSAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSAqbW9kZSkKJiM0Mzt7CiYjNDM7CWlmICghc3RyY21wKHN0ciwgJiMzNDtsZWdhY3kmIzM0OykpIHsKJiM0MzsJCSptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJaWYgKCFzdHJjbXAoc3RyLCAmIzM0O3N3aXRjaGRldiYjMzQ7KSkgewomIzQzOwkJKm1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlpZiAoIXN0cmNtcChzdHIsICYjMzQ7c3dpdGNoZGV2X2luYWN0aXZlJiMzNDspKSB7CiYjNDM7CQkqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdAomIzQzO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoY2hhciAqaGFuZGxlLCBjaGFyICoqYnVzX25hbWUsCiYjNDM7CQkJCSAgICAgIGNoYXIgKipkZXZfbmFtZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKnNsYXNoOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlpZiAoISpoYW5kbGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChwID0gaGFuZGxlOyAqcDsgcCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgqcCA9PSAmIzM5OyomIzM5OyB8fCAqcCA9PSAmIzM5Oz0mIzM5OykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbGFzaCA9IHN0cmNocihoYW5kbGUsICYjMzk7LyYjMzk7KTsKJiM0MzsJaWYgKCFzbGFzaCB8fCBzbGFzaCA9PSBoYW5kbGUgfHwgIXNsYXNoWzFdKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzdHJjaHIoc2xhc2ggJiM0MzsgMSwgJiMzOTsvJiMzOTspKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpzbGFzaCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJKmJ1c19uYW1lID0gaGFuZGxlOwomIzQzOwkqZGV2X25hbWUgPSBzbGFzaCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqCiYjNDM7ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHsKJiM0MzsJCWlmICghc3RyY21wKG5vZGUtJmd0O2J1c19uYW1lLCBidXNfbmFtZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFzdHJjbXAobm9kZS0mZ3Q7ZGV2X25hbWUsIGRldl9uYW1lKSkKJiM0MzsJCQlyZXR1cm4gbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQKJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlOwomIzQzOwomIzQzOwlpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CiYjNDM7CW5vZGUgPSBremFsbG9jX29iaigqbm9kZSk7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO25vZGUtJmd0O2xpc3QpOwomIzQzOwlub2RlLSZndDtidXNfbmFtZSA9IGtzdHJkdXAoYnVzX25hbWUsIEdGUF9LRVJORUwpOwomIzQzOwlub2RlLSZndDtkZXZfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIW5vZGUtJmd0O2J1c19uYW1lIHx8ICFub2RlLSZndDtkZXZfbmFtZSkgewomIzQzOwkJa2ZyZWUobm9kZS0mZ3Q7YnVzX25hbWUpOwomIzQzOwkJa2ZyZWUobm9kZS0mZ3Q7ZGV2X25hbWUpOwomIzQzOwkJa2ZyZWUobm9kZSk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7bm9kZS0mZ3Q7bGlzdCwgJmFtcDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoY2hhciAqaGFuZGxlcykKJiM0Mzt7CiYjNDM7CWNoYXIgKmhhbmRsZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzdHJjbXAoaGFuZGxlcywgJiMzNDsqJiMzNDspKSB7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdoaWxlICgoaGFuZGxlID0gc3Ryc2VwKCZhbXA7aGFuZGxlcywgJiMzNDssJiMzNDspKSAhPSBOVUxMKSB7CiYjNDM7CQljaGFyICpidXNfbmFtZTsKJiM0MzsJCWNoYXIgKmRldl9uYW1lOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZV9wYXJzZShoYW5kbGUsICZhbXA7YnVzX25hbWUsCiYjNDM7CQkJCQkJCSAgICAmYW1wO2Rldl9uYW1lKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCWVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQKJiM0MztkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CWtmcmVlKG5vZGUtJmd0O2J1c19uYW1lKTsKJiM0MzsJa2ZyZWUobm9kZS0mZ3Q7ZGV2X25hbWUpOwomIzQzOwlrZnJlZShub2RlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlX3RtcDsKJiM0MzsJc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbm9kZV90bXAsCiYjNDM7CQkJCSAmYW1wO2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlcywgbGlzdCkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtub2RlLSZndDtsaXN0KTsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZyZWUobm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IGZhbHNlOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTsKJiM0MzsJY2hhciAqc2VwYXJhdG9yOwomIzQzOwljaGFyICpoYW5kbGVzOwomIzQzOwljaGFyICptb2RlOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoISpzdHIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc2VwYXJhdG9yID0gc3RycmNocihzdHIsICYjMzk7PSYjMzk7KTsKJiM0MzsJaWYgKCFzZXBhcmF0b3IgfHwgc2VwYXJhdG9yID09IHN0ciB8fCAhc2VwYXJhdG9yWzFdKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpzZXBhcmF0b3IgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWhhbmRsZXMgPSBzdHI7CiYjNDM7CW1vZGUgPSBzZXBhcmF0b3IgJiM0MzsgMTsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsICZhbXA7ZXN3X21vZGUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqYnVzX25hbWUgPSBkZXZsaW5rX2J1c19uYW1lKGRldmxpbmspOwomIzQzOwljb25zdCBjaGFyICpkZXZfbmFtZSA9IGRldmxpbmtfZGV2X25hbWUoZGV2bGluayk7CiYjNDM7CXN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJaWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJbm9kZSA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZpbmQoYnVzX25hbWUsIGRldl9uYW1lKTsKJiM0MzsJcmV0dXJuICEhbm9kZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLSZndDtvcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2goZGV2bGluaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KSB7CiYjNDM7CQlpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwpCiYjNDM7CQkJZGV2bF93YXJuKGRldmxpbmssCiYjNDM7CQkJCSAgJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0gc2VsZWN0ZWQgdGhpcyBkZXZpY2UgYnV0IGVzd2l0Y2ggbW9kZSBzZXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlLCBOVUxMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWRldmxfd2FybihkZXZsaW5rLAomIzQzOwkJCSAgJiMzNDtDb3VsZG4mIzM5O3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJICBlcnIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwomIzQzOwomIzQzOwlpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nIHx8CiYjNDM7CSAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghZGV2bGlua190cnlfZ2V0KGRldmxpbmspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLAomIzQzOwkJCSZhbXA7ZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSkKJiM0MzsJCWRldmxpbmtfcHV0KGRldmxpbmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsKJiM0MzsJZGV2bGluayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2bGluaywKJiM0MzsJCQkgICAgICAgZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKTsKJiM0MzsKJiM0MzsJZGV2bF9sb2NrKGRldmxpbmspOwomIzQzOwomIzQzOwlpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspICZhbXA7JmFtcDsKJiM0MzsJICAgIGRldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZykgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsJCWRldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxfdW5sb2NrKGRldmxpbmspOwomIzQzOwlkZXZsaW5rX3B1dChkZXZsaW5rKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CUlOSVRfV09SSygmYW1wO2RldmxpbmstJmd0O2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yaywKJiM0MzsJCSAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspOwomIzQzOwlkZXZsaW5rLSZndDtkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKQomIzQzO3sKJiM0MzsJZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspOwomIzQzOwomIzQzOwlkZXZsaW5rLSZndDtkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0CiYjNDM7ICogQGRldmxpbms6IGRldmxpbmsKJiM0MzsgKgomIzQzOyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9CiYjNDM7ICoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGlmIGFueSBtYXRjaGVzIEBkZXZsaW5rLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay4KJiM0MzsgKi8KJiM0Mzt2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CWRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTsKJiM0MzsKJiM0MzsJZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7CiYjNDM7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfY2xlYW51cChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaykKJiM0Mzt7CiYjNDM7CWlmIChjYW5jZWxfd29ya19zeW5jKCZhbXA7ZGV2bGluay0mZ3Q7ZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSkKJiM0MzsJCWRldmxpbmtfcHV0KGRldmxpbmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gc3RyOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7X19zZXR1cCgmIzM0O2RldmxpbmtfZXN3aXRjaF9tb2RlPSYjMzQ7LCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXApOwomIzQzOwomIzQzO2ludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgKmRlZjsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZikgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDsKJiM0MzsJCXByX3dhcm4oJiMzNDtkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcnNlKGRlZik7CiYjNDM7CWtmcmVlKGRlZik7CiYjNDM7CWlmIChlcnIgPT0gLUVFWElTVCkgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDsKJiM0MzsJCXByX3dhcm4oJiMzNDtkZXZsaW5rOiBkdXBsaWNhdGUgZXN3aXRjaCBtb2RlIGhhbmRsZXMgaWdub3JlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogaW52YWxpZCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pIHsKJiM0MzsJCWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9IGVsc2UgaWYgKGVycikgewomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGUmIzM0OywKJiM0MzsJCQkJCQkgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sCiYjNDM7CQkJCQkJICAgICAgMCk7CiYjNDM7CWlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKSB7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMOwomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7CiYjNDM7CQlwcl93YXJuKCYjMzQ7ZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpCiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpOwomIzQzOwlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jCmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDQKLS0tIGEvbmV0L2RldmxpbmsvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2LmMKQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIGludCBkZXZsaW5rX3JlbG9hZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IG5ldCAqZGVzdF9uZXQsCiAJCXJldHVybiBlcnI7CiAKIAlXQVJOX09OKCEoKmFjdGlvbnNfcGVyZm9ybWVkICZhbXA7IEJJVChhY3Rpb24pKSk7CiYjNDM7CWlmICgqYWN0aW9uc19wZXJmb3JtZWQgJmFtcDsgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkgewomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7CiYjNDM7CQlkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspOwomIzQzOwl9CiYjNDM7CiAJLyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqLwogCVdBUk5fT04obWVtY21wKHJlbW90ZV9yZWxvYWRfc3RhdHMsIGRldmxpbmstJmd0O3N0YXRzLnJlbW90ZV9yZWxvYWRfc3RhdHMsCiAJCSAgICAgICBzaXplb2YocmVtb3RlX3JlbG9hZF9zdGF0cykpKTsKQEAgLTcwMiw2ICYjNDM7NzA3LDI1IEBAIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogfQogCiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKJiM0MzsJCQkgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay0mZ3Q7b3BzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7CiYjNDM7CiYjNDM7CWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwllcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcmV0dXJuIG9wcy0mZ3Q7ZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBleHRhY2spOwomIzQzO30KJiM0MzsKIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLSZndDtkZXZsaW5rOwpAQCAtNzEyLDE0ICYjNDM7NzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCXUxNiBtb2RlOwogCiAJaWYgKGluZm8tJmd0O2F0dHJzW0RFVkxJTktfQVRUUl9FU1dJVENIX01PREVdKSB7Ci0JCWlmICghb3BzLSZndDtlc3dpdGNoX21vZGVfc2V0KQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQllcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLAotCQkJCQkgIGluZm8tJmd0O2V4dGFjayk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7CiAJCW1vZGUgPSBubGFfZ2V0X3UxNihpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7Ci0JCWVyciA9IG9wcy0mZ3Q7ZXN3aXRjaF9tb2RlX3NldChkZXZsaW5rLCBtb2RlLCBpbmZvLSZndDtleHRhY2spOwomIzQzOwkJZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tJmd0O2V4dGFjayk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaCBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaAppbmRleCBjZGY4OTRiYTVhOWQ3ZS4uYzJiZWU1YWFiZDQ5YjQgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmgKQEAgLTU4LDggJiM0Mzs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5OwogCXU4IHJlbG9hZF9mYWlsZWQ6MTsKJiM0MzsJdTggZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nOjE7CiAJcmVmY291bnRfdCByZWZjb3VudDsKIAlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcms7CiAJc3RydWN0IGRldmxpbmtfcmVsICpyZWw7CiAJc3RydWN0IHhhcnJheSBuZXN0ZWRfcmVsczsKIAljaGFyIHByaXZbXSBfX2FsaWduZWQoTkVUREVWX0FMSUdOKTsKQEAgLTcxLDYgJiM0Mzs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5Owogc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSwKIAkJCQlzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2X2RyaXZlcik7CiYjNDM7aW50IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpOwomIzQzO3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5zdGFuY2VfaW5pdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7CiYjNDM7dm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKJiM0Mzt2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTsKIAogI2RlZmluZSBkZXZsX3dhcm4oZGV2bGluaywgZm9ybWF0LCBhcmdzLi4uKQkJCQlcCiAJZG8gewkJCQkJCQkJXApAQCAtMzQ4LDYgJiM0MzszNTcsOSBAQCBib29sIGRldmxpbmtfcmF0ZV9pc19ub2RlKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKmRldmxpbmtfcmF0ZSk7CiBpbnQgZGV2bGlua19yYXRlc19jaGVjayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAkJCWJvb2wgKCpyYXRlX2ZpbHRlcikoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqKSwKIAkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKJiM0MzsJCQkgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSwKJiM0MzsJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAKIC8qIExpbmVjYXJkcyAqLwogdW5zaWduZWQgaW50IGRldmxpbmtfbGluZWNhcmRfaW5kZXgoc3RydWN0IGRldmxpbmtfbGluZWNhcmQgKmxpbmVjYXJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDQ6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5ODEKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgJiMzNDtkZXZsaW5rX2Vzd2l0Y2hfbW9kZT0mIzM0OyBLZXJuZWwgUGFyYW1ldGVyIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIEl0IGludHJvZHVjZXMgYSBuZXcga2VybmVsIHBhcmFtZXRlciwgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAsIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsYXJnZWx5IHVudG91Y2hhYmxlIHZpYSBmdXp6aW5nLgoKVGhlIGNvcmUgb2YgdGhpcyBmZWF0dXJlIGxpZXMgaW4gYG5ldC9kZXZsaW5rL2RlZmF1bHQuY2AsIHdpdGggZnVuY3Rpb25zIGxpa2UgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cGAsIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdGAsIGFuZCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZGAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXBgIGlzIGFuIGBfX3NldHVwYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgaGFwcGVucyBvbmNlIGFuZCBvbmx5IG9uY2UgYXQgYm9vdC4gVGhpcyByZW5kZXJzIGl0IGluYWNjZXNzaWJsZSB0byBkeW5hbWljIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHdoaWNoIHByaW1hcmlseSBvcGVyYXRlcyBwb3N0LWJvb3QuIFRoZSBgX19pbml0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBhcmUgYWxzbyBvbmx5IGV4ZWN1dGVkIG9uY2UgYXQgYm9vdC4KCkV2ZW4gaWYgc3l6a2FsbGVyIHdlcmUgY29uZmlndXJlZCB0byBzZXQgdGhpcyBrZXJuZWwgcGFyYW1ldGVyLCB0aGUgZnVuY3Rpb25hbGl0eSBwcmltYXJpbHkgYmVjb21lcyBhIGJvb3QtdGltZSBjb25maWd1cmF0aW9uLiBUaGUgcnVudGltZSBjb2RlIGlzIGd1YXJkZWQgYnkgYSBjaGVjayBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWRgLiBJZiB0aGUgcGFyYW1ldGVyIGlzbiYjMzk7dCBzZXQsIHRoZW4gbW9zdCBvZiB0aGUgcnVudGltZSBjb2RlIGlzIG5ldmVyIHJ1bi4gSWYgc2V0LCB0aGlzIGNvZGUgcGF0aCBjYWxscyBgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0YC4gVGhpcyBmdW5jdGlvbiBtYXkgYWxyZWFkeSBiZSBmdXp6ZWQgYXMgYSByZXN1bHQgb2YgdGhlIE5ldGxpbmsgZGV2bGluayBpbnRlcmZhY2UuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIHRoZXJlIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZGAgYW5kIGBtbHg1X2luaXRfb25lYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIFRoZXNlIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIE1lbGxhbm94IGhhcmR3YXJlLiBUeXBpY2FsbHksIG15IGZ1enppbmcgc2V0dXAgZG9lc24mIzM5O3QgaW52b2x2ZSBNZWxsYW5veCBoYXJkd2FyZSBhbmQgSSBoYXZlIHRvIGFzc3VtZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHN1Y2ggaGFyZHdhcmUuIEV2ZW4gaWYgSSBkaWQsIE1lbGxhbm94IGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBhbmQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZS4KCkZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYGRldmxpbmtfcmVsb2FkYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYCBhbHNvIGhhcyBhIGNvbmRpdGlvbmFsIGNhbGwgdG8gYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBIb3dldmVyLCBpdCYjMzk7cyBnYXRlZCBieSB0aGUgYERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUYCBmbGFnIGFuZCBhZ2FpbiwgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBpZiB0aGUgYm9vdC10aW1lIHBhcmFtZXRlciB3YXNuJiMzOTt0IHNldC4KCkZpbmFsbHksIHRoZSBgZGV2bGlua19ubF9lc3dpdGNoX3NldF9kb2l0YCBjb2RlIGlzIHJlZmFjdG9yZWQgYnkgbW92aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGludG8gYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgY3JlYXRlIGFueSBuZXcgY29kZSBwYXRocyBvciBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBwYXJhbWV0ZXIgaXMgb25seSBzZXQgdmlhIE5ldGxpbmsgaW4gdGhpcyBjYXNlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBuZXcgcGFyYW1ldGVyIGlzIG9ubHkgcGFyc2VkIGFuZCBhY3RpdmF0ZWQgYXQgYm9vdC10aW1lIGFuZCB0aGUgY29kZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gaXMgdW5yZWFjaGFibGUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbWFsIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IGZ1enplZC4gVGhlIGV4aXN0aW5nIE5ldGxpbmsgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgdG8gc2V0IHRoZSBgZXN3aXRjaF9tb2RlYCBpcyBsaWtlbHkgYWxyZWFkeSBmdXp6YWJsZS4gVGhlIE1lbGxhbm94IGNvZGUgaXMgdW5yZWFjaGFibGUuCkkmIzM5O2xsIG1hcmsgdGhpcyBhcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjoyMy44NDU2MTIwNzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTczODY0MTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBib290LXRpbWUga2VybmVsIHBhcmFtZXRlciBgZGV2bGlua19lc3dpdGNoX21vZGU9YCB0byBzZXQgdGhlIGRlZmF1bHQgZGV2bGluayBlc3dpdGNoIG1vZGUuIFRoZSBwYXJzaW5nIGxvZ2ljIGlzIG1hcmtlZCBhcyBgX19pbml0YCBhbmQgb25seSBydW5zIGR1cmluZyBib290LCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIHJ1bnRpbWUgZnV6emluZy4gVGhlIHJ1bnRpbWUgbG9naWMgaXMgZ2F0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIHRoaXMgYm9vdCBwYXJhbWV0ZXIsIHdoaWNoIHN5emthbGxlciB3aWxsIG5vdCBwcm92aWRlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWx4NSBkcml2ZXIgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBNZWxsYW5veCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDQ6MDI6MjMuODQ1NjIwMTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDU4MTg4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2QzYjJkOGE4NzIxYTI1YWYyZGE4OTdhZGYwYjllMzUyOTNjYjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDQ6MDI6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi4xMTczMDBkZDU4OWM0ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTEyNDksNiArMTI0OSwzMSBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxcbiBcXHRcXHRcXHRbSFddIE1heGltdW0gY29uZmlndXJhYmxlIGZhbiBzcGVlZC5cXG4gXFxuK1xcdGRldmxpbmtfZXN3aXRjaF9tb2RlPVxcbitcXHRcXHRcXHRbTkVUXVxcbitcXHRcXHRcXHRGb3JtYXQ6XFxuK1xcdFxcdFxcdFxcdTAwM2NzZWxlY3RvclxcdTAwM2U9XFx1MDAzY21vZGVcXHUwMDNlXFxuK1xcbitcXHRcXHRcXHRcXHUwMDNjc2VsZWN0b3JcXHUwMDNlOlxcbitcXHRcXHRcXHQqIHwgXFx1MDAzY2hhbmRsZVxcdTAwM2VbLFxcdTAwM2NoYW5kbGVcXHUwMDNlLi4uXVxcbitcXG4rXFx0XFx0XFx0XFx1MDAzY2hhbmRsZVxcdTAwM2U6XFxuK1xcdFxcdFxcdFxcdTAwM2NidXMtbmFtZVxcdTAwM2UvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZVxcbitcXG4rXFx0XFx0XFx0Q29uZmlndXJlIGRlZmF1bHQgZGV2bGluayBlc3dpdGNoIG1vZGUgZm9yIG1hdGNoaW5nXFxuK1xcdFxcdFxcdGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uXFxuK1xcbitcXHRcXHRcXHRcXHUwMDNjbW9kZVxcdTAwM2U6XFxuK1xcdFxcdFxcdGxlZ2FjeSB8IHN3aXRjaGRldiB8IHN3aXRjaGRldl9pbmFjdGl2ZVxcbitcXG4rXFx0XFx0XFx0RXhhbXBsZXM6XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XFxuK1xcdFxcdFxcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcXG4rXFxuK1xcdFxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxcbitcXHRcXHRcXHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxcbitcXG4gXFx0ZGZsdGNjPVxcdFxcdFtIVyxTMzkwXVxcbiBcXHRcXHRcXHRGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH1cXG4gXFx0XFx0XFx0b246ICAgICAgIHMzOTAgemxpYiBoYXJkd2FyZSBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBvblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2RldmxpbmstZGVmYXVsdHMucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzgwYzllOTkyMTBlMzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcXG5AQCAtMCwwICsxLDc4IEBAXFxuKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rRGV2bGluayBFc3dpdGNoIE1vZGUgRGVmYXVsdHNcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitEZXZsaW5rIGVzd2l0Y2ggbW9kZSBkZWZhdWx0cyBhbGxvdyB0aGUgZXN3aXRjaCBtb2RlIHRvIGJlIHByb3ZpZGVkIG9uIHRoZVxcbitrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2VcXG4raW5pdGlhbGl6YXRpb24uXFxuK1xcbitUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpc1xcbit0aGUgc2FtZSBoYW5kbGUgc2hvd24gYnkgYGBkZXZsaW5rIGRldiBzaG93YGAsIGZvciBleGFtcGxlXFxuK2BgcGNpLzAwMDA6MDg6MDAuMGBgLlxcbitcXG4rS2VybmVsIGNvbW1hbmQgbGluZSBzeW50YXhcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0RlZmF1bHRzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBrZXJuZWwgY29tbWFuZCBsaW5lXFxuK3BhcmFtZXRlci5cXG4rXFxuK1RoZSBnZW5lcmFsIHN5bnRheCBpczo6XFxuK1xcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPVxcdTAwM2NzZWxlY3RvclxcdTAwM2U9XFx1MDAzY21vZGVcXHUwMDNlXFxuK1xcbitgYFxcdTAwM2NzZWxlY3RvclxcdTAwM2VgYCBpcyBlaXRoZXIgYGAqYGAgb3Igb25lIG9yIG1vcmUgZGV2bGluayBoYW5kbGVzOjpcXG4rXFxuKyAgKiB8IFxcdTAwM2NidXMtbmFtZVxcdTAwM2UvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZVssXFx1MDAzY2J1cy1uYW1lXFx1MDAzZS9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlLi4uXVxcbitcXG4rYGAqYGAgYXBwbGllcyB0aGUgbW9kZSB0byBldmVyeSBkZXZsaW5rIGluc3RhbmNlLiBBbGwgaGFuZGxlcyBpbiB0aGUgc2FtZVxcbitzZWxlY3RvciByZWNlaXZlIHRoZSBzYW1lIGVzd2l0Y2ggbW9kZS5cXG4rXFxuK2BgXFx1MDAzY21vZGVcXHUwMDNlYGAgaXMgb25lIG9mIGBgbGVnYWN5YGAsIGBgc3dpdGNoZGV2YGAgb3IgYGBzd2l0Y2hkZXZfaW5hY3RpdmVgYC5cXG4rXFxuK1N5bnRheCBydWxlc1xcbistLS0tLS0tLS0tLS1cXG4rXFxuK1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxcbitcXG4rKiBTcGVjaWZ5IHRoZSBkZWZhdWx0IGluIG9uZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlci4gUmVwZWF0ZWRcXG4rICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cXG4rKiBUaGUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCB2YWx1ZSBpcyBsaW1pdGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuKyAgc2l6ZS5cXG4rKiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxcbisqIGBgXFx1MDAzY3NlbGVjdG9yXFx1MDAzZWBgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZVxcbisgIGNvbWJpbmVkIHdpdGggZXhwbGljaXQgaGFuZGxlcy5cXG4rKiBgYFxcdTAwM2NidXMtbmFtZVxcdTAwM2VgYCBhbmQgYGBcXHUwMDNjZGV2LW5hbWVcXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXFxuKyogYGBcXHUwMDNjZGV2LW5hbWVcXHUwMDNlYGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzXFxuKyAgYGAwMDAwOjA4OjAwLjBgYC5cXG4rKiBIYW5kbGVzIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZSwgYGAqYGAsIGBgPWBgIG9yIG1vcmUgdGhhbiBvbmUgYGAvYGAuXFxuKyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy5cXG4rKiBDb21tYS1zZXBhcmF0ZWQgZGVmYXVsdCBhc3NpZ25tZW50cyBhcmUgbm90IHN1cHBvcnRlZC5cXG4rKiBEdXBsaWNhdGUgaGFuZGxlcyBhcmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBkZWZhdWx0IGlzXFxuKyAgaWdub3JlZC5cXG4rXFxuK1RoZSBlc3dpdGNoIG1vZGUgZGVmYXVsdCBjb3JyZXNwb25kcyB0byB0aGUgdXNlcnNwYWNlIGNvbW1hbmQ6OlxcbitcXG4rICBkZXZsaW5rIGRldiBlc3dpdGNoIHNldCBcXHUwMDNjaGFuZGxlXFx1MDAzZSBtb2RlIFxcdTAwM2N2YWx1ZVxcdTAwM2VcXG4rXFxuK1xcbitFeGFtcGxlc1xcbis9PT09PT09PVxcbitcXG4rU2V0IGFsbCBkZXZsaW5rIGluc3RhbmNlcyB0byBzd2l0Y2hkZXYgbW9kZTo6XFxuK1xcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPSo9c3dpdGNoZGV2XFxuK1xcbitTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcXG4rXFxuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXZcXG4rXFxuK1NldCB0d28gUENJIGRldmxpbmsgaW5zdGFuY2VzIHRvIHN3aXRjaGRldiBpbmFjdGl2ZSBtb2RlOjpcXG4rXFxuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxcbitcXG4rVGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGJlY2F1c2UgY29tbWEtc2VwYXJhdGVkIGRlZmF1bHQgYXNzaWdubWVudHMgYXJlIG5vdFxcbitzdXBwb3J0ZWQ6OlxcbitcXG4rICBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldixwY2kvMDAwMDowOTowMC4wPXN3aXRjaGRldl9pbmFjdGl2ZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcXG5pbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMTM0ZDJmMzE5OTIyYzIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuQEAgLTU2LDYgKzU2LDcgQEAgZ2VuZXJhbC5cXG4gICAgOm1heGRlcHRoOiAxXFxuIFxcbiAgICBkZXZsaW5rLWRwaXBlXFxuKyAgIGRldmxpbmstZGVmYXVsdHNcXG4gICAgZGV2bGluay1lc3dpdGNoLWF0dHJcXG4gICAgZGV2bGluay1mbGFzaFxcbiAgICBkZXZsaW5rLWhlYWx0aFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXFxuaW5kZXggMDc0NDBjNTg3MTNhN2QuLjcyODNlNWI0OWVlZDRjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcXG5AQCAtMjM4LDI0ICsyMzgsMzAgQEAgc3RhdGljIHZvaWQgbWx4NV9md19yZXNldF9jb21wbGV0ZV9yZWxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV9md19yZXNldCAqZndfcmVzZXQgPSBkZXYtXFx1MDAzZXByaXYuZndfcmVzZXQ7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKGRldik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXFxuIFxcdGlmICh0ZXN0X2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1BFTkRJTkdfQ09NUCwgXFx1MDAyNmZ3X3Jlc2V0LVxcdTAwM2VyZXNldF9mbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmZ3X3Jlc2V0LVxcdTAwM2VyZXNldF9mbGFncyk7XFxuIFxcdFxcdGNvbXBsZXRlKFxcdTAwMjZmd19yZXNldC1cXHUwMDNlZG9uZSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcXG4tXFx0XFx0aWYgKG1seDVfaGVhbHRoX3dhaXRfcGNpX3VwKGRldikpXFxuLVxcdFxcdFxcdG1seDVfY29yZV9lcnIoZGV2LCBcXFwicmVzZXQgcmVsb2FkIGZsb3cgYWJvcnRlZCwgUENJIHJlYWRzIHN0aWxsIG5vdCB3b3JraW5nXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRtbHg1X2xvYWRfb25lKGRldiwgdHJ1ZSk7XFxuLVxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4tXFx0XFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XFxuLVxcdFxcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdG1seDVfc3luY19yZXNldF91bmxvYWRfZmxvdyhkZXYsIGZhbHNlKTtcXG4rXFx0ZXJyID0gbWx4NV9oZWFsdGhfd2FpdF9wY2lfdXAoZGV2KTtcXG4rXFxuK1xcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4gXFx0Y2xlYXJfYml0KE1MWDVfRldfUkVTRVRfRkxBR1NfUkVTRVRfSU5fUFJPR1JFU1MsIFxcdTAwMjZmd19yZXNldC1cXHUwMDNlcmVzZXRfZmxhZ3MpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRtbHg1X2NvcmVfZXJyKGRldiwgXFxcInJlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWx4NV9sb2FkX29uZV9kZXZsX2xvY2tlZChkZXYsIHRydWUpO1xcbitcXG4rXFx0ZGV2bGlua19yZW1vdGVfcmVsb2FkX2FjdGlvbnNfcGVyZm9ybWVkKGRldmxpbmssIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0ZXX0FDVElWQVRFKSk7XFxuK1xcdGRldmxfdW5sb2NrKGRldmxpbmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtbHg1X3N0b3Bfc3luY19yZXNldF9wb2xsKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuaW5kZXggNjQzYjRhYWMyMDMzNjguLjA3MTJlZmVhNzRjYzY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuQEAgLTEzOTIsNiArMTM5MiwxNyBAQCBzdGF0aWMgdm9pZCBtbHg1X3VubG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRtbHg1X2ZyZWVfYmZyZWcoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LmJmcmVnKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xcbitcXG4rXFx0aWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcdGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShkZXZsaW5rKTtcXG4rfVxcbitcXG4gaW50IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbiBcXHRib29sIGxpZ2h0X3Byb2JlID0gbWx4NV9kZXZfaXNfbGlnaHR3ZWlnaHQoZGV2KTtcXG5AQCAtMTQ3MSw2ICsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0ZXJyID0gbWx4NV9pbml0X29uZV9kZXZsX2xvY2tlZChkZXYpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRkZXZsX3VucmVnaXN0ZXIoZGV2bGluayk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTtcXG4gdW5sb2NrOlxcbiBcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXFxuaW5kZXggZmZlMWFkNWZiNzBiYjguLjkwZGEwM2MwMTEyY2JhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxcbkBAIC0xNjYxLDYgKzE2NjEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLFxcbiBcXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiB2b2lkIGRldmxfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuK3ZvaWQgZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4gdm9pZCBkZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4gdm9pZCBkZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL01ha2VmaWxlIGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcXG5pbmRleCA4ZjJhZGI1ZTU4MzYyZi4uOTljYTBlZjdjZjFlODcgMTAwNjQ0XFxuLS0tIGEvbmV0L2RldmxpbmsvTWFrZWZpbGVcXG4rKysgYi9uZXQvZGV2bGluay9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNCBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbi1vYmoteSA6PSBjb3JlLm8gbmV0bGluay5vIG5ldGxpbmtfZ2VuLm8gZGV2Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuK29iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBkZWZhdWx0Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuIFxcdCByZXNvdXJjZS5vIHBhcmFtLm8gcmVnaW9uLm8gaGVhbHRoLm8gdHJhcC5vIHJhdGUubyBsaW5lY2FyZC5vIHNoX2Rldi5vXFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xcbmluZGV4IGM1M2E0MmUxN2E1ODlkLi45ZDljYzQwNjI2ZmMzMyAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9jb3JlLmNcXG4rKysgYi9uZXQvZGV2bGluay9jb3JlLmNcXG5AQCAtMzE3LDYgKzMxNyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdHJ5bG9jayk7XFxuIFxcbiB2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbiB7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKGRldmxpbmspO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcXG5AQCAtNDI5LDYgKzQzMCw3IEBAIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbiBcXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xcbiBcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuIFxcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihkZXZsaW5rKTtcXG4gXFx0ZGV2bGlua19ub3RpZnlfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG4gXFx0eGFfY2xlYXJfbWFyayhcXHUwMDI2ZGV2bGlua3MsIGRldmxpbmstXFx1MDAzZWluZGV4LCBERVZMSU5LX1JFR0lTVEVSRUQpO1xcbiBcXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XFxuQEAgLTQ5MCw2ICs0OTIsNyBAQCBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2bGluay1cXHUwMDNldHJhcF9ncm91cF9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldmxpbmstXFx1MDAzZXRyYXBfcG9saWNlcl9saXN0KTtcXG4gXFx0SU5JVF9SQ1VfV09SSyhcXHUwMDI2ZGV2bGluay1cXHUwMDNlcndvcmssIGRldmxpbmtfcmVsZWFzZSk7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KGRldmxpbmspO1xcbiBcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9ja19rZXkpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG4gXFx0bG9ja2RlcF9zZXRfY2xhc3MoXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2ssIFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrX2tleSk7XFxuQEAgLTUzNyw2ICs1NDAsOSBAQCB2b2lkIGRldmxpbmtfZnJlZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4gXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbiBcXHRXQVJOX09OKGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgTlVMTCwgTlVMTCkpO1xcbiBcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKGRldmxpbmspO1xcbitcXG4gXFx0ZGV2bGlua19yZWxfcHV0KGRldmxpbmspO1xcbiBcXG4gXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2ZGV2bGluay1cXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpKTtcXG5AQCAtNTk4LDYgKzYwNCwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQoKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZkZXZsaW5rX3Blcm5ldF9vcHMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNjEzLDcgKzYyMywxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2luaXQodm9pZClcXG4gb3V0X3VucmVnX3Blcm5ldF9zdWJzeXM6XFxuIFxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2ZGV2bGlua19wZXJuZXRfb3BzKTtcXG4gb3V0OlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfY2xlYW51cCgpO1xcbiBcXHRXQVJOX09OKGVycik7XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZWZhdWx0LmMgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvZGV2bGluay9kZWZhdWx0LmNcXG5AQCAtMCwwICsxLDM2NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYsIE5WSURJQSBDT1JQT1JBVElPTiBcXHUwMDI2IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJkZXZsX2ludGVybmFsLmhcXFwiXFxuK1xcbitzdGF0aWMgY2hhciAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtO1xcbitzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsO1xcbitzdGF0aWMgYm9vbCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZDtcXG4rc3RhdGljIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlO1xcbitzdGF0aWMgTElTVF9IRUFEKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxO1xcbitcXG4rc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRjaGFyICpidXNfbmFtZTtcXG4rXFx0Y2hhciAqZGV2X25hbWU7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfdG9fdmFsdWUoY29uc3QgY2hhciAqc3RyLFxcbitcXHRcXHRcXHRcXHQgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgKm1vZGUpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAoc3RyLCBcXFwibGVnYWN5XFxcIikpIHtcXG4rXFx0XFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9MRUdBQ1k7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdGlmICghc3RyY21wKHN0ciwgXFxcInN3aXRjaGRldlxcXCIpKSB7XFxuK1xcdFxcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfU1dJVENIREVWO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCJzd2l0Y2hkZXZfaW5hY3RpdmVcXFwiKSkge1xcbitcXHRcXHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGNoYXIgKmhhbmRsZSwgY2hhciAqKmJ1c19uYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICBjaGFyICoqZGV2X25hbWUpXFxuK3tcXG4rXFx0Y2hhciAqc2xhc2g7XFxuK1xcdGNoYXIgKnA7XFxuK1xcbitcXHRpZiAoISpoYW5kbGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Zm9yIChwID0gaGFuZGxlOyAqcDsgcCsrKSB7XFxuK1xcdFxcdGlmICgqcCA9PSAnKicgfHwgKnAgPT0gJz0nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c2xhc2ggPSBzdHJjaHIoaGFuZGxlLCAnLycpO1xcbitcXHRpZiAoIXNsYXNoIHx8IHNsYXNoID09IGhhbmRsZSB8fCAhc2xhc2hbMV0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3RyY2hyKHNsYXNoICsgMSwgJy8nKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqc2xhc2ggPSAnXFxcXDAnO1xcbitcXG4rXFx0KmJ1c19uYW1lID0gaGFuZGxlO1xcbitcXHQqZGV2X25hbWUgPSBzbGFzaCArIDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpcXG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcXHUwMDI2ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzLCBsaXN0KSB7XFxuK1xcdFxcdGlmICghc3RyY21wKG5vZGUtXFx1MDAzZWJ1c19uYW1lLCBidXNfbmFtZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdHJjbXAobm9kZS1cXHUwMDNlZGV2X25hbWUsIGRldl9uYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIG5vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdFxcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXG4rXFx0bm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZub2RlLVxcdTAwM2VsaXN0KTtcXG4rXFx0bm9kZS1cXHUwMDNlYnVzX25hbWUgPSBrc3RyZHVwKGJ1c19uYW1lLCBHRlBfS0VSTkVMKTtcXG4rXFx0bm9kZS1cXHUwMDNlZGV2X25hbWUgPSBrc3RyZHVwKGRldl9uYW1lLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFub2RlLVxcdTAwM2VidXNfbmFtZSB8fCAhbm9kZS1cXHUwMDNlZGV2X25hbWUpIHtcXG4rXFx0XFx0a2ZyZWUobm9kZS1cXHUwMDNlYnVzX25hbWUpO1xcbitcXHRcXHRrZnJlZShub2RlLVxcdTAwM2VkZXZfbmFtZSk7XFxuK1xcdFxcdGtmcmVlKG5vZGUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShjaGFyICpoYW5kbGVzKVxcbit7XFxuK1xcdGNoYXIgKmhhbmRsZTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghc3RyY21wKGhhbmRsZXMsIFxcXCIqXFxcIikpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IHRydWU7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoKGhhbmRsZSA9IHN0cnNlcChcXHUwMDI2aGFuZGxlcywgXFxcIixcXFwiKSkgIT0gTlVMTCkge1xcbitcXHRcXHRjaGFyICpidXNfbmFtZTtcXG4rXFx0XFx0Y2hhciAqZGV2X25hbWU7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGhhbmRsZSwgXFx1MDAyNmJ1c19uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRldl9uYW1lKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2FkZChidXNfbmFtZSwgZGV2X25hbWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19pbml0XFxuK2RldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlX2ZyZWUoc3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdGtmcmVlKG5vZGUtXFx1MDAzZWJ1c19uYW1lKTtcXG4rXFx0a2ZyZWUobm9kZS1cXHUwMDNlZGV2X25hbWUpO1xcbitcXHRrZnJlZShub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZV90bXA7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBub2RlX3RtcCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5vZGUtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKG5vZGUpO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsID0gZmFsc2U7XFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJzZShjaGFyICpzdHIpXFxuK3tcXG4rXFx0ZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBlc3dfbW9kZTtcXG4rXFx0Y2hhciAqc2VwYXJhdG9yO1xcbitcXHRjaGFyICpoYW5kbGVzO1xcbitcXHRjaGFyICptb2RlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCEqc3RyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHNlcGFyYXRvciA9IHN0cnJjaHIoc3RyLCAnPScpO1xcbitcXHRpZiAoIXNlcGFyYXRvciB8fCBzZXBhcmF0b3IgPT0gc3RyIHx8ICFzZXBhcmF0b3JbMV0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0KnNlcGFyYXRvciA9ICdcXFxcMCc7XFxuK1xcdGhhbmRsZXMgPSBzdHI7XFxuK1xcdG1vZGUgPSBzZXBhcmF0b3IgKyAxO1xcbitcXG4rXFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKG1vZGUsIFxcdTAwMjZlc3dfbW9kZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlc19wYXJzZShoYW5kbGVzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIoKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmJ1c19uYW1lID0gZGV2bGlua19idXNfbmFtZShkZXZsaW5rKTtcXG4rXFx0Y29uc3QgY2hhciAqZGV2X25hbWUgPSBkZXZsaW5rX2Rldl9uYW1lKGRldmxpbmspO1xcbitcXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XFxuK1xcbitcXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbClcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRub2RlID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpO1xcbitcXHRyZXR1cm4gISFub2RlO1xcbit9XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVxcdTAwM2VvcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpIHtcXG4rXFx0XFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxcbitcXHRcXHRcXHRkZXZsX3dhcm4oZGV2bGluayxcXG4rXFx0XFx0XFx0XFx0ICBcXFwiZGV2bGlua19lc3dpdGNoX21vZGU9IHNlbGVjdGVkIHRoaXMgZGV2aWNlIGJ1dCBlc3dpdGNoIG1vZGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlLCBOVUxMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZGV2bF93YXJuKGRldmxpbmssXFxuK1xcdFxcdFxcdCAgXFxcIkNvdWxkbid0IGFwcGx5IGRlZmF1bHQgZXN3aXRjaCBtb2RlLCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgZXJyKTtcXG4rfVxcbitcXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcXVldWVfYXBwbHlfd29yayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG4re1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgfHxcXG4rXFx0ICAgICFfX2RldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIWRldmxpbmtfdHJ5X2dldChkZXZsaW5rKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLFxcbitcXHRcXHRcXHRcXHUwMDI2ZGV2bGluay1cXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcXG4rXFx0XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFxuK1xcdGRldmxpbmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmssXFxuK1xcdFxcdFxcdCAgICAgICBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xcbitcXG4rXFx0ZGV2bF9sb2NrKGRldmxpbmspO1xcbitcXG4rXFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZGV2bGluay1cXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7XFxuK1xcdFxcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4rXFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxuK31cXG4rXFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuK3tcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmssXFxuK1xcdFxcdCAgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspO1xcbitcXHRkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbit9XFxuK1xcbisvKipcXG4rICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0XFxuKyAqIEBkZXZsaW5rOiBkZXZsaW5rXFxuKyAqXFxuKyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9XFxuKyAqIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLCBpZiBhbnkgbWF0Y2hlcyBAZGV2bGluay5cXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay5cXG4rICovXFxuK3ZvaWQgZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG4rXFxuK1xcdGRldmxpbmstXFx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZSk7XFxuK1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbit7XFxuK1xcdGlmIChjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcmspKVxcbitcXHRcXHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwKGNoYXIgKnN0cilcXG4re1xcbitcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK19fc2V0dXAoXFxcImRldmxpbmtfZXN3aXRjaF9tb2RlPVxcXCIsIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cCk7XFxuK1xcbitpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXFxuK3tcXG4rXFx0Y2hhciAqZGVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZGVmID0ga3N0cmR1cChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZikge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xcbitcXHRcXHRwcl93YXJuKFxcXCJkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoZGVmKTtcXG4rXFx0a2ZyZWUoZGVmKTtcXG4rXFx0aWYgKGVyciA9PSAtRUVYSVNUKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGR1cGxpY2F0ZSBlc3dpdGNoIG1vZGUgaGFuZGxlcyBpZ25vcmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcXG4rXFx0XFx0cHJfd2FybihcXFwiZGV2bGluazogaW52YWxpZCBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2UgaWYgKGVyciA9PSAtRU5PTUVNKSB7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH0gZWxzZSBpZiAoZXJyKSB7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAwKTtcXG4rXFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpIHtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XFxuK1xcdFxcdHByX3dhcm4oXFxcImRldmxpbms6IGRldmxpbmtfZXN3aXRjaF9tb2RlIHBhcmFtZXRlciBpZ25vcmVkLCBmYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9jbGVhbnVwKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSlcXG4rXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKTtcXG4rXFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xcbmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXFx1MDAyNiBCSVQoYWN0aW9uKSkpO1xcbitcXHRpZiAoKmFjdGlvbnNfcGVyZm9ybWVkIFxcdTAwMjYgQklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9EUklWRVJfUkVJTklUKSkge1xcbitcXHRcXHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihkZXZsaW5rKTtcXG4rXFx0XFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqL1xcbiBcXHRXQVJOX09OKG1lbWNtcChyZW1vdGVfcmVsb2FkX3N0YXRzLCBkZXZsaW5rLVxcdTAwM2VzdGF0cy5yZW1vdGVfcmVsb2FkX3N0YXRzLFxcbiBcXHRcXHQgICAgICAgc2l6ZW9mKHJlbW90ZV9yZWxvYWRfc3RhdHMpKSk7XFxuQEAgLTcwMiw2ICs3MDcsMjUgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9nZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xcbiB9XFxuIFxcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbitcXHRcXHRcXHQgICAgIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMgPSBkZXZsaW5rLVxcdTAwM2VvcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XFxuK1xcbitcXHRpZiAoIW9wcy1cXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSwgZXh0YWNrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgZXh0YWNrKTtcXG4rfVxcbitcXG4gaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gZGV2bGlua19ubF9jdHgoaW5mbyktXFx1MDAzZWRldmxpbms7XFxuQEAgLTcxMiwxNCArNzM2LDkgQEAgaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHR1MTYgbW9kZTtcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSkge1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRlcnIgPSBkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIGRldmxpbmtfcmF0ZV9pc19ub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xcbiBcXHRcXHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0VTV0lUQ0hfTU9ERV0pO1xcbi1cXHRcXHRlcnIgPSBvcHMtXFx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oIGIvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXFxuaW5kZXggY2RmODk0YmE1YTlkN2UuLmMyYmVlNWFhYmQ0OWI0IDEwMDY0NFxcbi0tLSBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxcbisrKyBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxcbkBAIC01OCw4ICs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiBcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XFxuIFxcdHU4IHJlbG9hZF9mYWlsZWQ6MTtcXG4rXFx0dTggZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nOjE7XFxuIFxcdHJlZmNvdW50X3QgcmVmY291bnQ7XFxuIFxcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yaztcXG4gXFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWw7XFxuIFxcdHN0cnVjdCB4YXJyYXkgbmVzdGVkX3JlbHM7XFxuIFxcdGNoYXIgcHJpdltdIF9fYWxpZ25lZChORVRERVZfQUxJR04pO1xcbkBAIC03MSw2ICs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5O1xcbiBzdHJ1Y3QgZGV2bGluayAqX19kZXZsaW5rX2FsbG9jKGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzLCBzaXplX3QgcHJpdl9zaXplLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRldl9kcml2ZXIpO1xcbitpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZCk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZ19jbGVhcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XFxuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xcbiBcXG4gI2RlZmluZSBkZXZsX3dhcm4oZGV2bGluaywgZm9ybWF0LCBhcmdzLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMzQ4LDYgKzM1Nyw5IEBAIGJvb2wgZGV2bGlua19yYXRlX2lzX25vZGUoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqZGV2bGlua19yYXRlKTtcXG4gaW50IGRldmxpbmtfcmF0ZXNfY2hlY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdFxcdGJvb2wgKCpyYXRlX2ZpbHRlcikoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqKSxcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4rXFx0XFx0XFx0ICAgICBlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIG1vZGUsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFxuIC8qIExpbmVjYXJkcyAqL1xcbiB1bnNpZ25lZCBpbnQgZGV2bGlua19saW5lY2FyZF9pbmRleChzdHJ1Y3QgZGV2bGlua19saW5lY2FyZCAqbGluZWNhcmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjoyNC41NTI0NzM4NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MDMxNzcyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJvb3QtdGltZSBrZXJuZWwgcGFyYW1ldGVyIGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gIHRvIHNldCB0aGUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZS4gVGhlIHBhcnNpbmcgbG9naWMgaXMgbWFya2VkIGFzIGBfX2luaXRgIGFuZCBvbmx5IHJ1bnMgZHVyaW5nIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgcnVudGltZSBmdXp6aW5nLiBUaGUgcnVudGltZSBsb2dpYyBpcyBnYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBib290IHBhcmFtZXRlciwgd2hpY2ggc3l6a2FsbGVyIHdpbGwgbm90IHByb3ZpZGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtbHg1IGRyaXZlciByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZDNiMmQ4YTg3MjFhMjVhZjJkYTg5N2FkZjBiOWUzNTI5M2NiNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA0OjAyOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjExNzMwMGRkNTg5YzRmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtMTI0OSw2ICsxMjQ5LDMxIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRkZWxsX3NtbV9od21vbi5mYW5fbWF4PVxuIFx0XHRcdFtIV10gTWF4aW11bSBjb25maWd1cmFibGUgZmFuIHNwZWVkLlxuIFxuK1x0ZGV2bGlua19lc3dpdGNoX21vZGU9XG4rXHRcdFx0W05FVF1cbitcdFx0XHRGb3JtYXQ6XG4rXHRcdFx0XHUwMDNjc2VsZWN0b3JcdTAwM2U9XHUwMDNjbW9kZVx1MDAzZVxuK1xuK1x0XHRcdFx1MDAzY3NlbGVjdG9yXHUwMDNlOlxuK1x0XHRcdCogfCBcdTAwM2NoYW5kbGVcdTAwM2VbLFx1MDAzY2hhbmRsZVx1MDAzZS4uLl1cbitcbitcdFx0XHRcdTAwM2NoYW5kbGVcdTAwM2U6XG4rXHRcdFx0XHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2VcbitcbitcdFx0XHRDb25maWd1cmUgZGVmYXVsdCBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBmb3IgbWF0Y2hpbmdcbitcdFx0XHRkZXZsaW5rIGluc3RhbmNlcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLlxuK1xuK1x0XHRcdFx1MDAzY21vZGVcdTAwM2U6XG4rXHRcdFx0bGVnYWN5IHwgc3dpdGNoZGV2IHwgc3dpdGNoZGV2X2luYWN0aXZlXG4rXG4rXHRcdFx0RXhhbXBsZXM6XG4rXHRcdFx0ZGV2bGlua19lc3dpdGNoX21vZGU9Kj1zd2l0Y2hkZXZcbitcdFx0XHRkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1wY2kvMDAwMDowODowMC4wPXN3aXRjaGRldlxuK1x0XHRcdGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjAscGNpLzAwMDA6MDk6MDAuMT1zd2l0Y2hkZXZfaW5hY3RpdmVcbitcbitcdFx0XHRTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcbitcdFx0XHRmb3IgdGhlIGZ1bGwgc3ludGF4LlxuK1xuIFx0ZGZsdGNjPVx0XHRbSFcsUzM5MF1cbiBcdFx0XHRGb3JtYXQ6IHsgb24gfCBvZmYgfCBkZWZfb25seSB8IGluZl9vbmx5IHwgYWx3YXlzIH1cbiBcdFx0XHRvbjogICAgICAgczM5MCB6bGliIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGNvbXByZXNzaW9uIG9uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9kZXZsaW5rLWRlZmF1bHRzLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zODBjOWU5OTIxMGUzNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvZGV2bGluay1kZWZhdWx0cy5yc3RcbkBAIC0wLDAgKzEsNzggQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK0RldmxpbmsgRXN3aXRjaCBNb2RlIERlZmF1bHRzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rRGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdHMgYWxsb3cgdGhlIGVzd2l0Y2ggbW9kZSB0byBiZSBwcm92aWRlZCBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lIGFuZCBhcHBsaWVkIHRvIG1hdGNoaW5nIGRldmxpbmsgaW5zdGFuY2VzIGR1cmluZyBkZXZpY2Vcbitpbml0aWFsaXphdGlvbi5cbitcbitUaGUgZGV2bGluayBkZXZpY2UgaXMgc2VsZWN0ZWQgYnkgaXRzIGRldmxpbmsgaGFuZGxlLiBGb3IgUENJIGRldmljZXMgdGhpcyBpc1xuK3RoZSBzYW1lIGhhbmRsZSBzaG93biBieSBgYGRldmxpbmsgZGV2IHNob3dgYCwgZm9yIGV4YW1wbGVcbitgYHBjaS8wMDAwOjA4OjAwLjBgYC5cbitcbitLZXJuZWwgY29tbWFuZCBsaW5lIHN5bnRheFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rRGVmYXVsdHMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIGtlcm5lbCBjb21tYW5kIGxpbmVcbitwYXJhbWV0ZXIuXG4rXG4rVGhlIGdlbmVyYWwgc3ludGF4IGlzOjpcbitcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPVx1MDAzY3NlbGVjdG9yXHUwMDNlPVx1MDAzY21vZGVcdTAwM2VcbitcbitgYFx1MDAzY3NlbGVjdG9yXHUwMDNlYGAgaXMgZWl0aGVyIGBgKmBgIG9yIG9uZSBvciBtb3JlIGRldmxpbmsgaGFuZGxlczo6XG4rXG4rICAqIHwgXHUwMDNjYnVzLW5hbWVcdTAwM2UvXHUwMDNjZGV2LW5hbWVcdTAwM2VbLFx1MDAzY2J1cy1uYW1lXHUwMDNlL1x1MDAzY2Rldi1uYW1lXHUwMDNlLi4uXVxuK1xuK2BgKmBgIGFwcGxpZXMgdGhlIG1vZGUgdG8gZXZlcnkgZGV2bGluayBpbnN0YW5jZS4gQWxsIGhhbmRsZXMgaW4gdGhlIHNhbWVcbitzZWxlY3RvciByZWNlaXZlIHRoZSBzYW1lIGVzd2l0Y2ggbW9kZS5cbitcbitgYFx1MDAzY21vZGVcdTAwM2VgYCBpcyBvbmUgb2YgYGBsZWdhY3lgYCwgYGBzd2l0Y2hkZXZgYCBvciBgYHN3aXRjaGRldl9pbmFjdGl2ZWBgLlxuK1xuK1N5bnRheCBydWxlc1xuKy0tLS0tLS0tLS0tLVxuK1xuK1RoZSBmb2xsb3dpbmcgc3ludGF4IHJ1bGVzIGFwcGx5OlxuK1xuKyogU3BlY2lmeSB0aGUgZGVmYXVsdCBpbiBvbmUgYGBkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1gYCBwYXJhbWV0ZXIuIFJlcGVhdGVkXG4rICBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHBhcmFtZXRlcnMgYXJlIG5vdCBhY2N1bXVsYXRlZC5cbisqIFRoZSBgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWBgIHZhbHVlIGlzIGxpbWl0ZWQgYnkgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmVcbisgIHNpemUuXG4rKiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuKyogYGBcdTAwM2NzZWxlY3Rvclx1MDAzZWBgIG11c3QgYmUgZWl0aGVyIGBgKmBgIG9yIGEgaGFuZGxlIGxpc3QuIGBgKmBgIGNhbm5vdCBiZVxuKyAgY29tYmluZWQgd2l0aCBleHBsaWNpdCBoYW5kbGVzLlxuKyogYGBcdTAwM2NidXMtbmFtZVx1MDAzZWBgIGFuZCBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbXVzdCBub3QgYmUgZW1wdHkuXG4rKiBgYFx1MDAzY2Rldi1uYW1lXHUwMDNlYGAgbWF5IGNvbnRhaW4gYGA6YGAuIFRoaXMgYWxsb3dzIFBDSSBuYW1lcyBzdWNoIGFzXG4rICBgYDAwMDA6MDg6MDAuMGBgLlxuKyogSGFuZGxlcyBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2UsIGBgKmBgLCBgYD1gYCBvciBtb3JlIHRoYW4gb25lIGBgL2BgLlxuKyogQSBjb21tYSBzZXBhcmF0ZXMgaGFuZGxlcy5cbisqIENvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLlxuKyogRHVwbGljYXRlIGhhbmRsZXMgYXJlIHJlamVjdGVkIGFuZCB0aGUgZGV2bGluayBlc3dpdGNoIG1vZGUgZGVmYXVsdCBpc1xuKyAgaWdub3JlZC5cbitcbitUaGUgZXN3aXRjaCBtb2RlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXJzcGFjZSBjb21tYW5kOjpcbitcbisgIGRldmxpbmsgZGV2IGVzd2l0Y2ggc2V0IFx1MDAzY2hhbmRsZVx1MDAzZSBtb2RlIFx1MDAzY3ZhbHVlXHUwMDNlXG4rXG4rXG4rRXhhbXBsZXNcbis9PT09PT09PVxuK1xuK1NldCBhbGwgZGV2bGluayBpbnN0YW5jZXMgdG8gc3dpdGNoZGV2IG1vZGU6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9Kj1zd2l0Y2hkZXZcbitcbitTZXQgb25lIFBDSSBkZXZsaW5rIGluc3RhbmNlIHRvIHN3aXRjaGRldiBtb2RlOjpcbitcbisgIGRldmxpbmtfZXN3aXRjaF9tb2RlPXBjaS8wMDAwOjA4OjAwLjA9c3dpdGNoZGV2XG4rXG4rU2V0IHR3byBQQ0kgZGV2bGluayBpbnN0YW5jZXMgdG8gc3dpdGNoZGV2IGluYWN0aXZlIG1vZGU6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMCxwY2kvMDAwMDowOTowMC4xPXN3aXRjaGRldl9pbmFjdGl2ZVxuK1xuK1RoZSBmb2xsb3dpbmcgaXMgaW52YWxpZCBiZWNhdXNlIGNvbW1hLXNlcGFyYXRlZCBkZWZhdWx0IGFzc2lnbm1lbnRzIGFyZSBub3RcbitzdXBwb3J0ZWQ6OlxuK1xuKyAgZGV2bGlua19lc3dpdGNoX21vZGU9cGNpLzAwMDA6MDg6MDAuMD1zd2l0Y2hkZXYscGNpLzAwMDA6MDk6MDAuMD1zd2l0Y2hkZXZfaW5hY3RpdmVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4xMzRkMmYzMTk5MjJjMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtNTYsNiArNTYsNyBAQCBnZW5lcmFsLlxuICAgIDptYXhkZXB0aDogMVxuIFxuICAgIGRldmxpbmstZHBpcGVcbisgICBkZXZsaW5rLWRlZmF1bHRzXG4gICAgZGV2bGluay1lc3dpdGNoLWF0dHJcbiAgICBkZXZsaW5rLWZsYXNoXG4gICAgZGV2bGluay1oZWFsdGhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9md19yZXNldC5jXG5pbmRleCAwNzQ0MGM1ODcxM2E3ZC4uNzI4M2U1YjQ5ZWVkNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZndfcmVzZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2Z3X3Jlc2V0LmNcbkBAIC0yMzgsMjQgKzIzOCwzMCBAQCBzdGF0aWMgdm9pZCBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBtbHg1X2Z3X3Jlc2V0ICpmd19yZXNldCA9IGRldi1cdTAwM2Vwcml2LmZ3X3Jlc2V0O1xuIFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoZGV2KTtcbitcdGludCBlcnI7XG4gXG4gXHQvKiBpZiB0aGlzIGlzIHRoZSBkcml2ZXIgdGhhdCBpbml0aWF0ZWQgdGhlIGZ3IHJlc2V0LCBkZXZsaW5rIGNvbXBsZXRlZCB0aGUgcmVsb2FkICovXG4gXHRpZiAodGVzdF9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19QRU5ESU5HX0NPTVAsIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoTUxYNV9GV19SRVNFVF9GTEFHU19SRVNFVF9JTl9QUk9HUkVTUyxcbitcdFx0XHQgIFx1MDAyNmZ3X3Jlc2V0LVx1MDAzZXJlc2V0X2ZsYWdzKTtcbiBcdFx0Y29tcGxldGUoXHUwMDI2ZndfcmVzZXQtXHUwMDNlZG9uZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbHg1X3N5bmNfcmVzZXRfdW5sb2FkX2Zsb3coZGV2LCBmYWxzZSk7XG4tXHRcdGlmIChtbHg1X2hlYWx0aF93YWl0X3BjaV91cChkZXYpKVxuLVx0XHRcdG1seDVfY29yZV9lcnIoZGV2LCBcInJlc2V0IHJlbG9hZCBmbG93IGFib3J0ZWQsIFBDSSByZWFkcyBzdGlsbCBub3Qgd29ya2luZ1xcblwiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1seDVfbG9hZF9vbmUoZGV2LCB0cnVlKTtcbi1cdFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuLVx0XHRkZXZsaW5rX3JlbW90ZV9yZWxvYWRfYWN0aW9uc19wZXJmb3JtZWQoZGV2bGluaywgMCxcbi1cdFx0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuLVx0XHRcdFx0XHRcdFx0QklUKERFVkxJTktfUkVMT0FEX0FDVElPTl9GV19BQ1RJVkFURSkpO1xuLVx0XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0bWx4NV9zeW5jX3Jlc2V0X3VubG9hZF9mbG93KGRldiwgZmFsc2UpO1xuK1x0ZXJyID0gbWx4NV9oZWFsdGhfd2FpdF9wY2lfdXAoZGV2KTtcbitcbitcdGRldmxfbG9jayhkZXZsaW5rKTtcbiBcdGNsZWFyX2JpdChNTFg1X0ZXX1JFU0VUX0ZMQUdTX1JFU0VUX0lOX1BST0dSRVNTLCBcdTAwMjZmd19yZXNldC1cdTAwM2VyZXNldF9mbGFncyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRtbHg1X2NvcmVfZXJyKGRldiwgXCJyZXNldCByZWxvYWQgZmxvdyBhYm9ydGVkLCBQQ0kgcmVhZHMgc3RpbGwgbm90IHdvcmtpbmdcXG5cIik7XG4rXHRlbHNlXG4rXHRcdG1seDVfbG9hZF9vbmVfZGV2bF9sb2NrZWQoZGV2LCB0cnVlKTtcbitcbitcdGRldmxpbmtfcmVtb3RlX3JlbG9hZF9hY3Rpb25zX3BlcmZvcm1lZChkZXZsaW5rLCAwLFxuK1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCkgfFxuK1x0XHRcdFx0XHRcdEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRldfQUNUSVZBVEUpKTtcbitcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1X3N0b3Bfc3luY19yZXNldF9wb2xsKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzY4Li4wNzEyZWZlYTc0Y2M2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbkBAIC0xMzkyLDYgKzEzOTIsMTcgQEAgc3RhdGljIHZvaWQgbWx4NV91bmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG1seDVfZnJlZV9iZnJlZyhkZXYsIFx1MDAyNmRldi1cdTAwM2Vwcml2LmJmcmVnKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayhkZXYpO1xuK1xuK1x0aWYgKCFNTFg1X0VTV0lUQ0hfTUFOQUdFUihkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXHRkZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2bGluayk7XG4rfVxuK1xuIGludCBtbHg1X2luaXRfb25lX2RldmxfbG9ja2VkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0Ym9vbCBsaWdodF9wcm9iZSA9IG1seDVfZGV2X2lzX2xpZ2h0d2VpZ2h0KGRldik7XG5AQCAtMTQ3MSw2ICsxNDgyLDggQEAgaW50IG1seDVfaW5pdF9vbmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGVyciA9IG1seDVfaW5pdF9vbmVfZGV2bF9sb2NrZWQoZGV2KTtcbiBcdGlmIChlcnIpXG4gXHRcdGRldmxfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdGVsc2VcbitcdFx0bWx4NV9kZXZsX2FwcGx5X2RlZmF1bHRfZXN3X21vZGUoZGV2KTtcbiB1bmxvY2s6XG4gXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGV2bGluay5oIGIvaW5jbHVkZS9uZXQvZGV2bGluay5oXG5pbmRleCBmZmUxYWQ1ZmI3MGJiOC4uOTBkYTAzYzAxMTJjYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kZXZsaW5rLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RldmxpbmsuaFxuQEAgLTE2NjEsNiArMTY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsXG4gXG4gaW50IGRldmxfcmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIHZvaWQgZGV2bF91bnJlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbit2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbiB2b2lkIGRldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayk7XG4gdm9pZCBkZXZsaW5rX2ZyZWUoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL01ha2VmaWxlIGIvbmV0L2RldmxpbmsvTWFrZWZpbGVcbmluZGV4IDhmMmFkYjVlNTgzNjJmLi45OWNhMGVmN2NmMWU4NyAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL01ha2VmaWxlXG4rKysgYi9uZXQvZGV2bGluay9NYWtlZmlsZVxuQEAgLTEsNCArMSw0IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuLW9iai15IDo9IGNvcmUubyBuZXRsaW5rLm8gbmV0bGlua19nZW4ubyBkZXYubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4rb2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIGRlZmF1bHQubyBwb3J0Lm8gc2IubyBkcGlwZS5vIFxcXG4gXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2NvcmUuYyBiL25ldC9kZXZsaW5rL2NvcmUuY1xuaW5kZXggYzUzYTQyZTE3YTU4OWQuLjlkOWNjNDA2MjZmYzMzIDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvY29yZS5jXG4rKysgYi9uZXQvZGV2bGluay9jb3JlLmNcbkBAIC0zMTcsNiArMzE3LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTtcbiBcbiB2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIHtcbitcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9xdWV1ZV9hcHBseV93b3JrKGRldmxpbmspO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcbkBAIC00MjksNiArNDMwLDcgQEAgdm9pZCBkZXZsX3VucmVnaXN0ZXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4gXHRBU1NFUlRfREVWTElOS19SRUdJU1RFUkVEKGRldmxpbmspO1xuIFx0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuIFxuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoZGV2bGluayk7XG4gXHRkZXZsaW5rX25vdGlmeV91bnJlZ2lzdGVyKGRldmxpbmspO1xuIFx0eGFfY2xlYXJfbWFyayhcdTAwMjZkZXZsaW5rcywgZGV2bGluay1cdTAwM2VpbmRleCwgREVWTElOS19SRUdJU1RFUkVEKTtcbiBcdGRldmxpbmtfcmVsX3B1dChkZXZsaW5rKTtcbkBAIC00OTAsNiArNDkyLDcgQEAgc3RydWN0IGRldmxpbmsgKl9fZGV2bGlua19hbGxvYyhjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9ncm91cF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpO1xuIFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZXJ3b3JrLCBkZXZsaW5rX3JlbGVhc2UpO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2luaXQoZGV2bGluayk7XG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jaywgXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrX2tleSk7XG5AQCAtNTM3LDYgKzU0MCw5IEBAIHZvaWQgZGV2bGlua19mcmVlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuIFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuIFx0V0FSTl9PTihkZXZsaW5rX3JhdGVzX2NoZWNrKGRldmxpbmssIE5VTEwsIE5VTEwpKTtcbiBcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuK1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoZGV2bGluayk7XG4rXG4gXHRkZXZsaW5rX3JlbF9wdXQoZGV2bGluayk7XG4gXG4gXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRldmxpbmstXHUwMDNldHJhcF9wb2xpY2VyX2xpc3QpKTtcbkBAIC01OTgsNiArNjA0LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaW5pdCgpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC02MTMsNyArNjIzLDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfaW5pdCh2b2lkKVxuIG91dF91bnJlZ19wZXJuZXRfc3Vic3lzOlxuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmRldmxpbmtfcGVybmV0X29wcyk7XG4gb3V0OlxuK1x0aWYgKGVycilcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAoKTtcbiBcdFdBUk5fT04oZXJyKTtcbitcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RlZmF1bHQuYyBiL25ldC9kZXZsaW5rL2RlZmF1bHQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTM3ZDc2NzMxZTFkN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2RldmxpbmsvZGVmYXVsdC5jXG5AQCAtMCwwICsxLDM2NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2LCBOVklESUEgQ09SUE9SQVRJT04gXHUwMDI2IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZGV2bF9pbnRlcm5hbC5oXCJcbitcbitzdGF0aWMgY2hhciAqZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtO1xuK3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGw7XG4rc3RhdGljIGJvb2wgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQ7XG4rc3RhdGljIGVudW0gZGV2bGlua19lc3dpdGNoX21vZGUgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlO1xuK3N0YXRpYyBMSVNUX0hFQUQoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cTtcbitcbitzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0Y2hhciAqYnVzX25hbWU7XG4rXHRjaGFyICpkZXZfbmFtZTtcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0XG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3RvX3ZhbHVlKGNvbnN0IGNoYXIgKnN0cixcbitcdFx0XHRcdCAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSAqbW9kZSlcbit7XG4rXHRpZiAoIXN0cmNtcChzdHIsIFwibGVnYWN5XCIpKSB7XG4rXHRcdCptb2RlID0gREVWTElOS19FU1dJVENIX01PREVfTEVHQUNZO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmICghc3RyY21wKHN0ciwgXCJzd2l0Y2hkZXZcIikpIHtcbitcdFx0Km1vZGUgPSBERVZMSU5LX0VTV0lUQ0hfTU9ERV9TV0lUQ0hERVY7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0aWYgKCFzdHJjbXAoc3RyLCBcInN3aXRjaGRldl9pbmFjdGl2ZVwiKSkge1xuK1x0XHQqbW9kZSA9IERFVkxJTktfRVNXSVRDSF9NT0RFX1NXSVRDSERFVl9JTkFDVElWRTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfaGFuZGxlX3BhcnNlKGNoYXIgKmhhbmRsZSwgY2hhciAqKmJ1c19uYW1lLFxuK1x0XHRcdFx0ICAgICAgY2hhciAqKmRldl9uYW1lKVxuK3tcbitcdGNoYXIgKnNsYXNoO1xuK1x0Y2hhciAqcDtcbitcbitcdGlmICghKmhhbmRsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKHAgPSBoYW5kbGU7ICpwOyBwKyspIHtcbitcdFx0aWYgKCpwID09ICcqJyB8fCAqcCA9PSAnPScpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzbGFzaCA9IHN0cmNocihoYW5kbGUsICcvJyk7XG4rXHRpZiAoIXNsYXNoIHx8IHNsYXNoID09IGhhbmRsZSB8fCAhc2xhc2hbMV0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHN0cmNocihzbGFzaCArIDEsICcvJykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0KnNsYXNoID0gJ1xcMCc7XG4rXG4rXHQqYnVzX25hbWUgPSBoYW5kbGU7XG4rXHQqZGV2X25hbWUgPSBzbGFzaCArIDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqXG4rZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChjb25zdCBjaGFyICpidXNfbmFtZSwgY29uc3QgY2hhciAqZGV2X25hbWUpXG4re1xuK1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXMsIGxpc3QpIHtcbitcdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2VidXNfbmFtZSwgYnVzX25hbWUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChub2RlLVx1MDAzZWRldl9uYW1lLCBkZXZfbmFtZSkpXG4rXHRcdFx0cmV0dXJuIG5vZGU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9hZGQoY29uc3QgY2hhciAqYnVzX25hbWUsIGNvbnN0IGNoYXIgKmRldl9uYW1lKVxuK3tcbitcdHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZTtcbitcbitcdGlmIChkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9maW5kKGJ1c19uYW1lLCBkZXZfbmFtZSkpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuK1x0bm9kZSA9IGt6YWxsb2Nfb2JqKCpub2RlKTtcbitcdGlmICghbm9kZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuK1x0bm9kZS1cdTAwM2VidXNfbmFtZSA9IGtzdHJkdXAoYnVzX25hbWUsIEdGUF9LRVJORUwpO1xuK1x0bm9kZS1cdTAwM2VkZXZfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFub2RlLVx1MDAzZWJ1c19uYW1lIHx8ICFub2RlLVx1MDAzZWRldl9uYW1lKSB7XG4rXHRcdGtmcmVlKG5vZGUtXHUwMDNlYnVzX25hbWUpO1xuK1x0XHRrZnJlZShub2RlLVx1MDAzZWRldl9uYW1lKTtcbitcdFx0a2ZyZWUobm9kZSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZWxpc3QsIFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoY2hhciAqaGFuZGxlcylcbit7XG4rXHRjaGFyICpoYW5kbGU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCFzdHJjbXAoaGFuZGxlcywgXCIqXCIpKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaF9hbGwgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHdoaWxlICgoaGFuZGxlID0gc3Ryc2VwKFx1MDAyNmhhbmRsZXMsIFwiLFwiKSkgIT0gTlVMTCkge1xuK1x0XHRjaGFyICpidXNfbmFtZTtcbitcdFx0Y2hhciAqZGV2X25hbWU7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9oYW5kbGVfcGFyc2UoaGFuZGxlLCBcdTAwMjZidXNfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfbmFtZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfYWRkKGJ1c19uYW1lLCBkZXZfbmFtZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXRcbitkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKHN0cnVjdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZSAqbm9kZSlcbit7XG4rXHRrZnJlZShub2RlLVx1MDAzZWJ1c19uYW1lKTtcbitcdGtmcmVlKG5vZGUtXHUwMDNlZGV2X25hbWUpO1xuK1x0a2ZyZWUobm9kZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZXNfY2xlYXIodm9pZClcbit7XG4rXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGVfdG1wO1xuK1x0c3RydWN0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlICpub2RlO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5vZGVfdG1wLFxuK1x0XHRcdFx0IFx1MDAyNmRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2RlcywgbGlzdCkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbm9kZV9mcmVlKG5vZGUpO1xuK1x0fVxuK1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbCA9IGZhbHNlO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2VuYWJsZWQgPSBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcnNlKGNoYXIgKnN0cilcbit7XG4rXHRlbnVtIGRldmxpbmtfZXN3aXRjaF9tb2RlIGVzd19tb2RlO1xuK1x0Y2hhciAqc2VwYXJhdG9yO1xuK1x0Y2hhciAqaGFuZGxlcztcbitcdGNoYXIgKm1vZGU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCEqc3RyKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNlcGFyYXRvciA9IHN0cnJjaHIoc3RyLCAnPScpO1xuK1x0aWYgKCFzZXBhcmF0b3IgfHwgc2VwYXJhdG9yID09IHN0ciB8fCAhc2VwYXJhdG9yWzFdKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdCpzZXBhcmF0b3IgPSAnXFwwJztcbitcdGhhbmRsZXMgPSBzdHI7XG4rXHRtb2RlID0gc2VwYXJhdG9yICsgMTtcbitcbitcdGVyciA9IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV90b192YWx1ZShtb2RlLCBcdTAwMjZlc3dfbW9kZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2hhbmRsZXNfcGFyc2UoaGFuZGxlcyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlID0gZXN3X21vZGU7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9tYXRjaChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRjb25zdCBjaGFyICpidXNfbmFtZSA9IGRldmxpbmtfYnVzX25hbWUoZGV2bGluayk7XG4rXHRjb25zdCBjaGFyICpkZXZfbmFtZSA9IGRldmxpbmtfZGV2X25hbWUoZGV2bGluayk7XG4rXHRzdHJ1Y3QgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGUgKm5vZGU7XG4rXG4rXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX21hdGNoX2FsbClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRub2RlID0gZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVfZmluZChidXNfbmFtZSwgZGV2X25hbWUpO1xuK1x0cmV0dXJuICEhbm9kZTtcbit9XG4rXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay1cdTAwM2VvcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2goZGV2bGluaykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQpIHtcbitcdFx0aWYgKCFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfbWF0Y2hfYWxsKVxuK1x0XHRcdGRldmxfd2FybihkZXZsaW5rLFxuK1x0XHRcdFx0ICBcImRldmxpbmtfZXN3aXRjaF9tb2RlPSBzZWxlY3RlZCB0aGlzIGRldmljZSBidXQgZXN3aXRjaCBtb2RlIHNldHRpbmcgaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZSwgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZsX3dhcm4oZGV2bGluayxcbitcdFx0XHQgIFwiQ291bGRuJ3QgYXBwbHkgZGVmYXVsdCBlc3dpdGNoIG1vZGUsIGVyciAlZFxcblwiLFxuK1x0XHRcdCAgZXJyKTtcbit9XG4rXG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcXVldWVfYXBwbHlfd29yayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXG4rXHRpZiAoIWRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9lbmFibGVkIHx8ICFkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpXG4rXHRcdHJldHVybjtcbitcdGlmICghZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgfHxcbitcdCAgICAhX19kZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4rXHRcdHJldHVybjtcbitcdGlmICghZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoIXF1ZXVlX3dvcmsoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxLFxuK1x0XHRcdFx1MDAyNmRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcbitcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbitcbitcdGRldmxpbmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmssXG4rXHRcdFx0ICAgICAgIGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayk7XG4rXG4rXHRkZXZsX2xvY2soZGV2bGluayk7XG4rXG4rXHRpZiAoZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoZGV2bGluayk7XG4rXHRcdGRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbitcdGRldmxpbmtfcHV0KGRldmxpbmspO1xuK31cbitcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdElOSVRfV09SSyhcdTAwMjZkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayxcbitcdFx0ICBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfd29yayk7XG4rXHRkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IHRydWU7XG4rfVxuK1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG4re1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0ZGV2bGluay1cdTAwM2VkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmcgPSBmYWxzZTtcbit9XG4rXG4rLyoqXG4rICogZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlIC0gQXBwbHkgZGV2bGluayBlc3dpdGNoIG1vZGUgYm9vdCBkZWZhdWx0XG4rICogQGRldmxpbms6IGRldmxpbmtcbisgKlxuKyAqIEFwcGx5IHRoZSBkZXZsaW5rIGVzd2l0Y2ggbW9kZSBzZWxlY3RlZCBieSB0aGUgZGV2bGlua19lc3dpdGNoX21vZGU9XG4rICoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGlmIGFueSBtYXRjaGVzIEBkZXZsaW5rLlxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldmxpbmsgaW5zdGFuY2UgbG9jay5cbisgKi9cbit2b2lkIGRldmxfYXBwbHlfZGVmYXVsdF9lc3dfbW9kZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbit7XG4rXHRkZXZsX2Fzc2VydF9sb2NrZWQoZGV2bGluayk7XG4rXG4rXHRkZXZsaW5rLVx1MDAzZWRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZyA9IGZhbHNlO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZChkZXZsaW5rKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bF9hcHBseV9kZWZhdWx0X2Vzd19tb2RlKTtcbitcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9jbGVhbnVwKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxuK3tcbitcdGlmIChjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRldmxpbmstXHUwMDNlZGVmYXVsdF9lc3dfbW9kZV9hcHBseV93b3JrKSlcbitcdFx0ZGV2bGlua19wdXQoZGV2bGluayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gc3RyO1xuK1x0cmV0dXJuIDE7XG4rfVxuK19fc2V0dXAoXCJkZXZsaW5rX2Vzd2l0Y2hfbW9kZT1cIiwgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwKTtcbitcbitpbnQgX19pbml0IGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbml0KHZvaWQpXG4re1xuK1x0Y2hhciAqZGVmO1xuK1x0aW50IGVycjtcbitcbitcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRlZiA9IGtzdHJkdXAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4rXHRcdHByX3dhcm4oXCJkZXZsaW5rOiBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBwYXJhbWV0ZXIgaWdub3JlZCwgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRlcnIgPSBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyc2UoZGVmKTtcbitcdGtmcmVlKGRlZik7XG4rXHRpZiAoZXJyID09IC1FRVhJU1QpIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbitcdFx0cHJfd2FybihcImRldmxpbms6IGR1cGxpY2F0ZSBlc3dpdGNoIG1vZGUgaGFuZGxlcyBpZ25vcmVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSBpZiAoZXJyID09IC1FSU5WQUwpIHtcbitcdFx0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3BhcmFtID0gTlVMTDtcbitcdFx0cHJfd2FybihcImRldmxpbms6IGludmFsaWQgZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWRcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIGlmIChlcnIgPT0gLUVOT01FTSkge1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfcGFyYW0gPSBOVUxMO1xuK1x0XHRwcl93YXJuKFwiZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fSBlbHNlIGlmIChlcnIpIHtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcImRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSxcbitcdFx0XHRcdFx0XHQgICAgICAwKTtcbitcdGlmICghZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9wYXJhbSA9IE5VTEw7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9ub2Rlc19jbGVhcigpO1xuK1x0XHRwcl93YXJuKFwiZGV2bGluazogZGV2bGlua19lc3dpdGNoX21vZGUgcGFyYW1ldGVyIGlnbm9yZWQsIGZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cIik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBfX2luaXQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2NsZWFudXAodm9pZClcbit7XG4rXHRpZiAoZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3dxKVxuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfd3EpO1xuK1x0ZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX25vZGVzX2NsZWFyKCk7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IGJjZjAwMTU1NGU4NDAyLi42MTFiYjZiZmQ0OTJiZiAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4rKysgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgaW50IGRldmxpbmtfcmVsb2FkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgbmV0ICpkZXN0X25ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdFdBUk5fT04oISgqYWN0aW9uc19wZXJmb3JtZWQgXHUwMDI2IEJJVChhY3Rpb24pKSk7XG4rXHRpZiAoKmFjdGlvbnNfcGVyZm9ybWVkIFx1MDAyNiBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpKSB7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuK1x0XHRkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfYXBwbHlfbG9ja2VkKGRldmxpbmspO1xuK1x0fVxuK1xuIFx0LyogQ2F0Y2ggZHJpdmVyIG9uIHVwZGF0aW5nIHRoZSByZW1vdGUgYWN0aW9uIHdpdGhpbiBkZXZsaW5rIHJlbG9hZCAqL1xuIFx0V0FSTl9PTihtZW1jbXAocmVtb3RlX3JlbG9hZF9zdGF0cywgZGV2bGluay1cdTAwM2VzdGF0cy5yZW1vdGVfcmVsb2FkX3N0YXRzLFxuIFx0XHQgICAgICAgc2l6ZW9mKHJlbW90ZV9yZWxvYWRfc3RhdHMpKSk7XG5AQCAtNzAyLDYgKzcwNywyNSBAQCBpbnQgZGV2bGlua19ubF9lc3dpdGNoX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pO1xuIH1cbiBcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuK1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuK1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzID0gZGV2bGluay1cdTAwM2VvcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZGV2bF9hc3NlcnRfbG9ja2VkKGRldmxpbmspO1xuK1xuK1x0aWYgKCFvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZXJyID0gZGV2bGlua19yYXRlc19jaGVjayhkZXZsaW5rLCBkZXZsaW5rX3JhdGVfaXNfbm9kZSwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gb3BzLVx1MDAzZWVzd2l0Y2hfbW9kZV9zZXQoZGV2bGluaywgbW9kZSwgZXh0YWNrKTtcbit9XG4rXG4gaW50IGRldmxpbmtfbmxfZXN3aXRjaF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gZGV2bGlua19ubF9jdHgoaW5mbyktXHUwMDNlZGV2bGluaztcbkBAIC03MTIsMTQgKzczNiw5IEBAIGludCBkZXZsaW5rX25sX2Vzd2l0Y2hfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdHUxNiBtb2RlO1xuIFxuIFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0VTV0lUQ0hfTU9ERV0pIHtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN3aXRjaF9tb2RlX3NldClcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdGVyciA9IGRldmxpbmtfcmF0ZXNfY2hlY2soZGV2bGluaywgZGV2bGlua19yYXRlX2lzX25vZGUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2VleHRhY2spO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9wZW5kaW5nX2NsZWFyKGRldmxpbmspO1xuIFx0XHRtb2RlID0gbmxhX2dldF91MTYoaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRVNXSVRDSF9NT0RFXSk7XG4tXHRcdGVyciA9IG9wcy1cdTAwM2Vlc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdFx0ZXJyID0gZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KGRldmxpbmssIG1vZGUsIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaCBiL25ldC9kZXZsaW5rL2RldmxfaW50ZXJuYWwuaFxuaW5kZXggY2RmODk0YmE1YTlkN2UuLmMyYmVlNWFhYmQ0OWI0IDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2bF9pbnRlcm5hbC5oXG4rKysgYi9uZXQvZGV2bGluay9kZXZsX2ludGVybmFsLmhcbkBAIC01OCw4ICs1OCwxMCBAQCBzdHJ1Y3QgZGV2bGluayB7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiBcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2tleTtcbiBcdHU4IHJlbG9hZF9mYWlsZWQ6MTtcbitcdHU4IGRlZmF1bHRfZXN3X21vZGVfYXBwbHlfcGVuZGluZzoxO1xuIFx0cmVmY291bnRfdCByZWZjb3VudDtcbiBcdHN0cnVjdCByY3Vfd29yayByd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBkZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3dvcms7XG4gXHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbDtcbiBcdHN0cnVjdCB4YXJyYXkgbmVzdGVkX3JlbHM7XG4gXHRjaGFyIHByaXZbXSBfX2FsaWduZWQoTkVUREVWX0FMSUdOKTtcbkBAIC03MSw2ICs3MywxMyBAQCBleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRldmxpbmtfbmxfZmFtaWx5O1xuIHN0cnVjdCBkZXZsaW5rICpfX2RldmxpbmtfYWxsb2MoY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHMsIHNpemVfdCBwcml2X3NpemUsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXZfZHJpdmVyKTtcbitpbnQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXQodm9pZCk7XG4rdm9pZCBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfY2xlYW51cCh2b2lkKTtcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9pbnN0YW5jZV9pbml0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcbit2b2lkIGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3F1ZXVlX2FwcGx5X3dvcmsoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X3BlbmRpbmdfY2xlYXIoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuK3ZvaWQgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luc3RhbmNlX2NsZWFudXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuIFxuICNkZWZpbmUgZGV2bF93YXJuKGRldmxpbmssIGZvcm1hdCwgYXJncy4uLilcdFx0XHRcdFxcXG4gXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtMzQ4LDYgKzM1Nyw5IEBAIGJvb2wgZGV2bGlua19yYXRlX2lzX25vZGUoY29uc3Qgc3RydWN0IGRldmxpbmtfcmF0ZSAqZGV2bGlua19yYXRlKTtcbiBpbnQgZGV2bGlua19yYXRlc19jaGVjayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0XHRib29sICgqcmF0ZV9maWx0ZXIpKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3JhdGUgKiksXG4gXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgZGV2bGlua19lc3dpdGNoX21vZGVfc2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuK1x0XHRcdCAgICAgZW51bSBkZXZsaW5rX2Vzd2l0Y2hfbW9kZSBtb2RlLFxuK1x0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiAvKiBMaW5lY2FyZHMgKi9cbiB1bnNpZ25lZCBpbnQgZGV2bGlua19saW5lY2FyZF9pbmRleChzdHJ1Y3QgZGV2bGlua19saW5lY2FyZCAqbGluZWNhcmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDQ6MDI6MjQuNTUyNDk4NzM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUwMzE3MTYxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFwiZGV2bGlua19lc3dpdGNoX21vZGU9XCIgS2VybmVsIFBhcmFtZXRlciBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQgaW50cm9kdWNlcyBhIG5ldyBrZXJuZWwgcGFyYW1ldGVyLCBgZGV2bGlua19lc3dpdGNoX21vZGU9YCwgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGxhcmdlbHkgdW50b3VjaGFibGUgdmlhIGZ1enppbmcuXG5cblRoZSBjb3JlIG9mIHRoaXMgZmVhdHVyZSBsaWVzIGluIGBuZXQvZGV2bGluay9kZWZhdWx0LmNgLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfc2V0dXBgLCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2luaXRgLCBhbmQgYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX3NldHVwYCBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdC4gVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgaGFwcGVucyBvbmNlIGFuZCBvbmx5IG9uY2UgYXQgYm9vdC4gVGhpcyByZW5kZXJzIGl0IGluYWNjZXNzaWJsZSB0byBkeW5hbWljIGZ1enppbmcgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHdoaWNoIHByaW1hcmlseSBvcGVyYXRlcyBwb3N0LWJvb3QuIFRoZSBgX19pbml0YCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgY29kZSBhcmUgYWxzbyBvbmx5IGV4ZWN1dGVkIG9uY2UgYXQgYm9vdC5cblxuRXZlbiBpZiBzeXprYWxsZXIgd2VyZSBjb25maWd1cmVkIHRvIHNldCB0aGlzIGtlcm5lbCBwYXJhbWV0ZXIsIHRoZSBmdW5jdGlvbmFsaXR5IHByaW1hcmlseSBiZWNvbWVzIGEgYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24uIFRoZSBydW50aW1lIGNvZGUgaXMgZ3VhcmRlZCBieSBhIGNoZWNrIGBkZXZsaW5rX2RlZmF1bHRfZXN3X21vZGVfZW5hYmxlZGAuIElmIHRoZSBwYXJhbWV0ZXIgaXNuJ3Qgc2V0LCB0aGVuIG1vc3Qgb2YgdGhlIHJ1bnRpbWUgY29kZSBpcyBuZXZlciBydW4uIElmIHNldCwgdGhpcyBjb2RlIHBhdGggY2FsbHMgYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgZnVuY3Rpb24gbWF5IGFscmVhZHkgYmUgZnV6emVkIGFzIGEgcmVzdWx0IG9mIHRoZSBOZXRsaW5rIGRldmxpbmsgaW50ZXJmYWNlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIHRoZXJlIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGBtbHg1X2Z3X3Jlc2V0X2NvbXBsZXRlX3JlbG9hZGAgYW5kIGBtbHg1X2luaXRfb25lYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIFRoZXNlIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIE1lbGxhbm94IGhhcmR3YXJlLiBUeXBpY2FsbHksIG15IGZ1enppbmcgc2V0dXAgZG9lc24ndCBpbnZvbHZlIE1lbGxhbm94IGhhcmR3YXJlIGFuZCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3VjaCBoYXJkd2FyZS4gRXZlbiBpZiBJIGRpZCwgTWVsbGFub3ggaGFyZHdhcmUgaXNuJ3QgZW11bGF0ZWQgYW5kIGlzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbkZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYGRldmxpbmtfcmVsb2FkYCB3aXRoaW4gYG5ldC9kZXZsaW5rL2Rldi5jYCBhbHNvIGhhcyBhIGNvbmRpdGlvbmFsIGNhbGwgdG8gYGRldmxpbmtfZGVmYXVsdF9lc3dfbW9kZV9hcHBseV9sb2NrZWRgLiBIb3dldmVyLCBpdCdzIGdhdGVkIGJ5IHRoZSBgREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVRgIGZsYWcgYW5kIGFnYWluLCBgZGV2bGlua19kZWZhdWx0X2Vzd19tb2RlX2FwcGx5X2xvY2tlZGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nIGlmIHRoZSBib290LXRpbWUgcGFyYW1ldGVyIHdhc24ndCBzZXQuXG5cbkZpbmFsbHksIHRoZSBgZGV2bGlua19ubF9lc3dpdGNoX3NldF9kb2l0YCBjb2RlIGlzIHJlZmFjdG9yZWQgYnkgbW92aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGludG8gYGRldmxpbmtfZXN3aXRjaF9tb2RlX3NldGAuIFRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCBjcmVhdGUgYW55IG5ldyBjb2RlIHBhdGhzIG9yIGZ1bmN0aW9uYWwgY2hhbmdlcy4gVGhlIHBhcmFtZXRlciBpcyBvbmx5IHNldCB2aWEgTmV0bGluayBpbiB0aGlzIGNhc2UuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGUgbmV3IHBhcmFtZXRlciBpcyBvbmx5IHBhcnNlZCBhbmQgYWN0aXZhdGVkIGF0IGJvb3QtdGltZSBhbmQgdGhlIGNvZGUgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIGlzIHVucmVhY2hhYmxlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbWluaW1hbCBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IGNhbiBiZSBkeW5hbWljYWxseSBmdXp6ZWQuIFRoZSBleGlzdGluZyBOZXRsaW5rIGludGVyZmFjZSB3aGljaCBpcyB1c2VkIHRvIHNldCB0aGUgYGVzd2l0Y2hfbW9kZWAgaXMgbGlrZWx5IGFscmVhZHkgZnV6emFibGUuIFRoZSBNZWxsYW5veCBjb2RlIGlzIHVucmVhY2hhYmxlLlxuSSdsbCBtYXJrIHRoaXMgYXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTgxLCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNDowMjo0OS41ODQyMTcwNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYm9vdC10aW1lIGtlcm5lbCBwYXJhbWV0ZXIgYGRldmxpbmtfZXN3aXRjaF9tb2RlPWAgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmxpbmsgZXN3aXRjaCBtb2RlLiBUaGUgcGFyc2luZyBsb2dpYyBpcyBtYXJrZWQgYXMgYF9faW5pdGAgYW5kIG9ubHkgcnVucyBkdXJpbmcgYm9vdCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBydW50aW1lIGZ1enppbmcuIFRoZSBydW50aW1lIGxvZ2ljIGlzIGdhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGJvb3QgcGFyYW1ldGVyLCB3aGljaCBzeXprYWxsZXIgd2lsbCBub3QgcHJvdmlkZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1seDUgZHJpdmVyIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8frd9[1] Phase: Running StartedAt: 2026-07-08 04:03:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8frd9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-08 04:03:01 +0000 UTC FinishedAt: 2026-07-08 04:03:18 +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,}