Name: series-workflowl9dkz Phase: Failed StartedAt: 2026-07-18 19:26:30 +0000 UTC FinishedAt: 2026-07-18 19:50:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9dkz[0] Phase: Succeeded StartedAt: 2026-07-18 19:26:30 +0000 UTC FinishedAt: 2026-07-18 19:50:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9dkz[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 19:26:30 +0000 UTC FinishedAt: 2026-07-18 19:50:25 +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+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyBhbmQgX19pbml0ZGF0YSB2YXJpYWJsZXMgaW4gaW5pdC9kb19tb3VudHMuYyB0byBzdXBwb3J0IG5ldyBib290IHBhcmFtZXRlcnMgKHJvb3RpbWFnZT0sIGV0Yy4pLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBib290LCBiZWZvcmUgdGhlIGZ1enplciBzdGFydHMsIGFuZCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCB2aWEgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzNTJmZTQ0NWJlOTMyMTVkNmNkY2MzNDA3Yjg0YzIyMjM3ZDNmZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAxOTo0OTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTA1ZWJiMTcxOGJiM2UgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC02Njk5LDYgJiM0Mzs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHRyb290ZnN0eXBlPVx0W0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSB0eXBlXG4gXG4mIzQzO1x0cm9vdGltYWdlPVx0W0tOTF0gTW91bnQgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSB0aGlzXG4mIzQzO1x0XHRcdGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZSAoYWJzb2x1dGUgcGF0aCkgbG9jYXRlZCBvbiB0aGVcbiYjNDM7XHRcdFx0ZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0sIGluc3RlYWQgb2YgdXNpbmcgdGhhdFxuJiM0MztcdFx0XHRmaWxlc3lzdGVtIGFzIHRoZSByb290IGRpcmVjdGx5LiAgVGhpcyBhbGxvd3NcbiYjNDM7XHRcdFx0aW1hZ2UtYmFzZWQgc3lzdGVtcyB0aGF0IGtlZXAgdGhlaXIgKHR5cGljYWxseVxuJiM0MztcdFx0XHRyZWFkLW9ubHksIGUuZy4gZXJvZnMpIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgYXNcbiYjNDM7XHRcdFx0cGxhaW4gZmlsZXMgb24gYSBjYXJyaWVyIGZpbGVzeXN0ZW0gdG8gYm9vdCB3aXRob3V0XG4mIzQzO1x0XHRcdGFuIGluaXRyYW1mcy4gIFRoZSBpbWFnZSBpcyBtb3VudGVkIHJlYWQtb25seSB2aWFcbiYjNDM7XHRcdFx0dGhlIGZpbGVzeXN0ZW0mIzM5O3MgZmlsZS1iYWNrZWQgbW91bnQgc3VwcG9ydCAobm8gbG9vcFxuJiM0MztcdFx0XHRkZXZpY2UgaXMgc2V0IHVwKTsgXCYjMzQ7cm9cJiMzNDssIFwmIzM0O3J3XCYjMzQ7IGFuZCByb290ZmxhZ3M9IGtlZXBcbiYjNDM7XHRcdFx0YXBwbHlpbmcgdG8gdGhlIGNhcnJpZXIgZmlsZXN5c3RlbS4gIE9uY2UgdGhlIGltYWdlXG4mIzQzO1x0XHRcdGlzIG1vdW50ZWQsIHRoZSBjYXJyaWVyIG1vdW50IGlzIGRldGFjaGVkIChidXQga2VwdFxuJiM0MztcdFx0XHRidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzc1xuJiM0MztcdFx0XHRyb290aW1hZ2VzcmNkaXI9IGlzIGFsc28gZ2l2ZW4uXG4mIzQzO1xuJiM0MztcdHJvb3RpbWFnZWZsYWdzPVx0W0tOTF0gU2V0IHJvb3QgaW1hZ2UgZmlsZXN5c3RlbSBtb3VudCBvcHRpb24gc3RyaW5nLFxuJiM0MztcdFx0XHR1c2VkIHRvZ2V0aGVyIHdpdGggcm9vdGltYWdlPS5cbiYjNDM7XG4mIzQzO1x0cm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXJcbiYjNDM7XHRcdFx0d2l0aCByb290aW1hZ2U9LiAgRGVmYXVsdCBpcyB0byB0cnkgYWxsIGZpbGVzeXN0ZW1zXG4mIzQzO1x0XHRcdGtub3duIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gbW91bnQgYSBibG9jayBkZXZpY2Ugb3JcbiYjNDM7XHRcdFx0YW4gaW1hZ2UgZmlsZS5cbiYjNDM7XG4mIzQzO1x0cm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdFxuJiM0MztcdFx0XHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxuJiM0MztcdFx0XHRob2xkaW5nIHRoZSBpbWFnZSAoaS5lLiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnlcbiYjNDM7XHRcdFx0cm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWRcbiYjNDM7XHRcdFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuJiM0MztcbiYjNDM7XHRyb290aW1hZ2V2ZXJpdHk9IFtLTkxdIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2Ugc3BlY2lmaWVkIGJ5XG4mIzQzO1x0XHRcdHJvb3RpbWFnZT0gdG8gaGF2ZSBmc3Zlcml0eSBlbmFibGVkIHdpdGggdGhpcyBmaWxlXG4mIzQzO1x0XHRcdGRpZ2VzdCwgZ2l2ZW4gYXMgXHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZSxcbiYjNDM7XHRcdFx0ZS5nLiBzaGEyNTY6ZGQxYjNmYTkuLi4gIFRoZSBib290IGlzIGFib3J0ZWQgaWYgdGhlXG4mIzQzO1x0XHRcdGltYWdlIGNhcnJpZXMgbm8gb3IgYSBkaWZmZXJlbnQgZnN2ZXJpdHkgZGlnZXN0LlxuJiM0MztcdFx0XHRCZWNhdXNlIGZzdmVyaXR5IGtlZXBzIHZlcmlmeWluZyBkYXRhIHJlYWQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0aW1hZ2UgYWdhaW5zdCBpdHMgTWVya2xlIHRyZWUgYXQgcnVudGltZSwgYSB0cnVzdGVkXG4mIzQzO1x0XHRcdChlLmcuIHNpZ25lZCBvciBUUE0tbWVhc3VyZWQpIGtlcm5lbCBjb21tYW5kIGxpbmVcbiYjNDM7XHRcdFx0ZXh0ZW5kcyB0aGUgY2hhaW4gb2YgdHJ1c3QgdG8gdGhlIGNvbXBsZXRlIHJvb3RcbiYjNDM7XHRcdFx0ZmlsZXN5c3RlbSBjb250ZW50cyB3aXRob3V0IGFuIGluaXRyYW1mcy4gIFJlcXVpcmVzXG4mIzQzO1x0XHRcdENPTkZJR19GU19WRVJJVFkgYW5kIGEgY2FycmllciBmaWxlc3lzdGVtIHdpdGhcbiYjNDM7XHRcdFx0ZnN2ZXJpdHkgc3VwcG9ydC5cbiYjNDM7XG4gXHRyb290d2FpdFx0W0tOTF0gV2FpdCAoaW5kZWZpbml0ZWx5KSBmb3Igcm9vdCBkZXZpY2UgdG8gc2hvdyB1cC5cbiBcdFx0XHRVc2VmdWwgZm9yIGRldmljZXMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHlcbiBcdFx0XHQoZS5nLiBVU0IgYW5kIE1NQyBkZXZpY2VzKS5cbmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuY1xuaW5kZXggOTVlMGIzYTBmNzExYmQuLjRlYjc5MmIyNzcwODZkIDEwMDY0NFxuLS0tIGEvaW5pdC9kb19tb3VudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9kb19tb3VudHMuY1xuQEAgLTI0LDYgJiM0MzsyNCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmZzX2ZzX3NiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZnNfbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhaWQvZGV0ZWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9oZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NjcnlwdG8vaGFzaF9pbmZvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21vdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtkb19tb3VudHMuaFwmIzM0O1xuQEAgLTEyMiwxMyAmIzQzOzEyNSw1OSBAQCBfX3NldHVwKFwmIzM0O3Jvb3RmbGFncz1cJiMzNDssIHJvb3RfZGF0YV9zZXR1cCk7XG4gX19zZXR1cChcJiMzNDtyb290ZnN0eXBlPVwmIzM0OywgZnNfbmFtZXNfc2V0dXApO1xuIF9fc2V0dXAoXCYjMzQ7cm9vdGRlbGF5PVwmIzM0Oywgcm9vdF9kZWxheV9zZXR1cCk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHJvb3RpbWFnZT0gbW91bnRzIHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gYW4gaW1hZ2UgZmlsZSBsb2NhdGVkXG4mIzQzOyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxuJiM0MzsgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJvb3RfaW1hZ2UgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX2ZzX25hbWVzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX21vdW50X2RhdGE7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRyb290X2ltYWdlX21vdW50X2RhdGEgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0cm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3Zlcml0eTtcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV92ZXJpdHlfc2V0dXAoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0cm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlPVwmIzM0Oywgcm9vdF9pbWFnZV9zZXR1cCk7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlZnN0eXBlPVwmIzM0Oywgcm9vdF9pbWFnZV9mc19uYW1lc19zZXR1cCk7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlZmxhZ3M9XCYjMzQ7LCByb290X2ltYWdlX2RhdGFfc2V0dXApO1xuJiM0MztfX3NldHVwKFwmIzM0O3Jvb3RpbWFnZXNyY2Rpcj1cJiMzNDssIHJvb3RfaW1hZ2Vfc3JjZGlyX3NldHVwKTtcbiYjNDM7X19zZXR1cChcJiMzNDtyb290aW1hZ2V2ZXJpdHk9XCYjMzQ7LCByb290X2ltYWdlX3Zlcml0eV9zZXR1cCk7XG4mIzQzO1xuIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovXG4tc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplLCBjaGFyICpuYW1lcylcbiB7XG4gXHRpbnQgY291bnQgPSAxO1xuIFx0Y2hhciAqcCA9IHBhZ2U7XG4gXG4tXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xuJiM0MztcdHN0cnNjcHkocCwgbmFtZXMsIHNpemUpO1xuIFx0d2hpbGUgKCpwJiM0MzsmIzQzOykge1xuIFx0XHRpZiAocFstMV0gPT0gJiMzOTssJiMzOTspIHtcbiBcdFx0XHRwWy0xXSA9ICYjMzk7XFwwJiMzOTs7XG5AQCAtMTM5LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSlcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmcyxcbi1cdFx0XHRcdCBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IHZvaWQgKmRhdGEpXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyLFxuJiM0MztcdFx0XHRcdCBjb25zdCBjaGFyICpmcywgY29uc3QgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdCBjb25zdCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqcztcbiBcdGNoYXIgKmRhdGFfcGFnZSA9IE5VTEw7XG5AQCAtMTU0LDExICYjNDM7MjA0LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4gXHRcdHN0cnNjcHlfcGFkKGRhdGFfcGFnZSwgZGF0YSwgUEFHRV9TSVpFKTtcbiBcdH1cbiBcbi1cdHJldCA9IGluaXRfbW91bnQobmFtZSwgXCYjMzQ7L3Jvb3RcJiMzNDssIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcbiYjNDM7XHRyZXQgPSBpbml0X21vdW50KG5hbWUsIGRpciwgZnMsIGZsYWdzLCBkYXRhX3BhZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpbml0X2NoZGlyKFwmIzM0Oy9yb290XCYjMzQ7KTtcbiYjNDM7XHRpbml0X2NoZGlyKGRpcik7XG4gXHRzID0gY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vwd2QuZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRST09UX0RFViA9IHMtXHUwMDNlc19kZXY7XG4gXHRwcmludGsoS0VSTl9JTkZPXG5AQCAtMTg1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290X2dlbmVyaWMoY2hhciAqbmFtZSwgY2hhciAqcHJldHR5X25hbWUsIGludCBmbGFncylcbiBcdHNjbnByaW50ZihiLCBCREVWTkFNRV9TSVpFLCBcJiMzNDt1bmtub3duLWJsb2NrKCV1LCV1KVwmIzM0OyxcbiBcdFx0ICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7XG4gXHRpZiAocm9vdF9mc19uYW1lcylcbi1cdFx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcbiBcdGVsc2VcbiBcdFx0bnVtX2ZzID0gbGlzdF9iZGV2X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xuIHJldHJ5OlxuQEAgLTE5NCw3ICYjNDM7MjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXG4gXG4gXHRcdGlmICghKnApXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGVyciA9IGRvX21vdW50X3Jvb3QobmFtZSwgcCwgZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4mIzQzO1x0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIFwmIzM0Oy9yb290XCYjMzQ7LCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0XHRjYXNlIDA6XG4gXHRcdFx0XHRnb3RvIG91dDtcbkBAIC0yNjYsNyAmIzQzOzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxuIFx0ICovXG4gXHR0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjtcbiBcdGZvciAodHJ5ID0gMTsgOyB0cnkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCYjMzQ7bmZzXCYjMzQ7LCByb290X21vdW50ZmxhZ3MsIHJvb3RfZGF0YSkpXG4mIzQzO1x0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwmIzM0Oy9yb290XCYjMzQ7LCBcJiMzNDtuZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiYjNDM7XHRcdFx0XHQgICByb290X2RhdGEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHRyeSBcdTAwM2UgTkZTUk9PVF9SRVRSWV9NQVgpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMzAzLDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfY2lmc19yb290KHZvaWQpXG4gXG4gXHR0aW1lb3V0ID0gQ0lGU1JPT1RfVElNRU9VVF9NSU47XG4gXHRmb3IgKHRyeSA9IDE7IDsgdHJ5JiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwmIzM0O2NpZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiYjNDM7XHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCYjMzQ7L3Jvb3RcJiMzNDssIFwmIzM0O2NpZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiBcdFx0XHRcdCAgIHJvb3RfZGF0YSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRpZiAodHJ5IFx1MDAzZSBDSUZTUk9PVF9SRVRSWV9NQVgpXG5AQCAtMzQ1LDcgJiM0MzszOTYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZnNfbmFtZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4mIzQzO1x0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwgcm9vdF9mc19uYW1lcyk7XG4gXG4gXHRmb3IgKGkgPSAwLCBmc3R5cGUgPSBmc19uYW1lczsgaSBcdTAwM2MgbnVtX2ZzO1xuIFx0ICAgICBpJiM0MzsmIzQzOywgZnN0eXBlICYjNDM7PSBzdHJsZW4oZnN0eXBlKSAmIzQzOyAxKSB7XG5AQCAtMzUzLDggJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghZnNfaXNfbm9kZXYoZnN0eXBlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcbi1cdFx0XHRcdCAgICByb290X21vdW50X2RhdGEpO1xuJiM0MztcdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBcJiMzNDsvcm9vdFwmIzM0OywgZnN0eXBlLFxuJiM0MztcdFx0XHRcdCAgICByb290X21vdW50ZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQwMiw2ICYjNDM7NDUzLDE0OCBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHR9XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MzsvKlxuJiM0MzsgKiBSZXF1aXJlIHRoZSByb290IGltYWdlIHRvIGNhcnJ5IHRoZSBmc3Zlcml0eSBmaWxlIGRpZ2VzdCBnaXZlbiBieVxuJiM0MzsgKiByb290aW1hZ2V2ZXJpdHk9XHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXG4mIzQzOyAqIG9wZW5lZCBzbyB0aGF0IGl0cyBmc3Zlcml0eSBpbmZvcm1hdGlvbiBpcyBsb2FkZWQuICBBbnkgZGV2aWF0aW9uXG4mIzQzOyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZVxuJiM0MzsgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJiMzOTtzXG4mIzQzOyAqIE1lcmtsZSB0cmVlIGFzIHRoZXkgYXJlIHJlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XG4mIzQzO1x0ZW51bSBoYXNoX2FsZ28gd2FudF9hbGdvLCBnb3RfYWxnbztcbiYjNDM7XHRpbnQgd2FudF9zaXplLCBnb3Rfc2l6ZSwgaTtcbiYjNDM7XHRjaGFyICpoZXg7XG4mIzQzO1xuJiM0MztcdGhleCA9IHN0cmNocihyb290X2ltYWdlX3Zlcml0eSwgJiMzOTs6JiMzOTspO1xuJiM0MztcdGlmICghaGV4KVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290aW1hZ2V2ZXJpdHk9IGV4cGVjdHMgXHUwMDNjYWxnb3JpdGhtXHUwMDNlOlx1MDAzY2hleCBkaWdlc3RcdTAwM2VcJiMzNDspO1xuJiM0MztcdCpoZXgmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRpID0gbWF0Y2hfc3RyaW5nKGhhc2hfYWxnb19uYW1lLCBIQVNIX0FMR09fX0xBU1QsIHJvb3RfaW1hZ2VfdmVyaXR5KTtcbiYjNDM7XHRpZiAoaSBcdTAwM2MgMClcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PTogdW5rbm93biBoYXNoIGFsZ29yaXRobSBcXFwmIzM0OyVzXFxcJiMzNDtcJiMzNDssXG4mIzQzO1x0XHQgICAgICByb290X2ltYWdlX3Zlcml0eSk7XG4mIzQzO1x0d2FudF9hbGdvID0gaTtcbiYjNDM7XHR3YW50X3NpemUgPSBoYXNoX2RpZ2VzdF9zaXplW3dhbnRfYWxnb107XG4mIzQzO1x0aWYgKHN0cmxlbihoZXgpICE9IDIgKiB3YW50X3NpemUgfHwgaGV4MmJpbih3YW50LCBoZXgsIHdhbnRfc2l6ZSkpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT06IGV4cGVjdGVkICVkLWJ5dGUgaGV4IGRpZ2VzdFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIHdhbnRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsIFx1MDAyNmdvdF9hbGdvKTtcbiYjNDM7XHRpZiAoIWdvdF9zaXplKVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290IGltYWdlIGRvZXMgbm90IGhhdmUgZnN2ZXJpdHkgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKGdvdF9hbGdvICE9IHdhbnRfYWxnbyB8fCBnb3Rfc2l6ZSAhPSB3YW50X3NpemUgfHxcbiYjNDM7XHQgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgbWlzbWF0Y2g6IGV4cGVjdGVkICVzOiUqcGhOLCBnb3QgJXM6JSpwaE5cJiMzNDssXG4mIzQzO1x0XHQgICAgICBoYXNoX2FsZ29fbmFtZVt3YW50X2FsZ29dLCB3YW50X3NpemUsIHdhbnQsXG4mIzQzO1x0XHQgICAgICBoYXNoX2FsZ29fbmFtZVtnb3RfYWxnb10sIGdvdF9zaXplLCBnb3QpO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1ZGUzogdmVyaWZpZWQgcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgJXM6JSpwaE5cXG5cJiMzNDssXG4mIzQzO1x0XHRoYXNoX2FsZ29fbmFtZVt3YW50X2FsZ29dLCB3YW50X3NpemUsIHdhbnQpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlIC8qICFDT05GSUdfRlNfVkVSSVRZICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHBhbmljKFwmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogIUNPTkZJR19GU19WRVJJVFkgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhlIGltYWdlIGZpbGUgcm9vdGltYWdlPSBvbiB0aGVcbiYjNDM7ICogZmlsZXN5c3RlbSB0aGF0IHdhcyBqdXN0IG1vdW50ZWQgZnJvbSByb290PSAodGhlIFwmIzM0O2NhcnJpZXJcJiMzNDspLCBzbyB0aGF0XG4mIzQzOyAqIGltYWdlLWJhc2VkIHN5c3RlbXMgY2FuIGJvb3Qgd2l0aG91dCBhbiBpbml0cmFtZnMuXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2VcbiYjNDM7ICogaXMgYWx3YXlzIG1vdW50ZWQgcmVhZC1vbmx5OyBcJiMzNDtyb1wmIzM0Oy9cJiMzNDtyd1wmIzM0Oy9yb290ZmxhZ3M9IGtlZXAgYXBwbHlpbmcgdG8gdGhlXG4mIzQzOyAqIGNhcnJpZXIuICBPbiBzdWNjZXNzIHRoZSBjd2QgaXMgdGhlIGltYWdlJiMzOTtzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3RcbiYjNDM7ICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cbiYjNDM7ICogaW5zaWRlIHRoZSBpbWFnZSBpZiBzZXQsIGFuZCBkZXRhY2hlZCBvdGhlcndpc2U7IGVpdGhlciB3YXkgdGhlIGltYWdlXG4mIzQzOyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfaW1hZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBNU19SRE9OTFkgfCBNU19TSUxFTlQ7XG4mIzQzO1x0Y2hhciAqcGF0aCwgKmZzX25hbWVzLCAqcDtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiYjNDM7XHRpbnQgbnVtX2ZzLCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBhdGggPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBhdGggfHwgIWZzX25hbWVzKVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZTogbm90IGVub3VnaCBtZW1vcnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwmIzM0Oy9yb290JXNcJiMzNDssIHJvb3RfaW1hZ2UpIFx1MDAzZT0gUEFUSF9NQVgpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXG4mIzQzO1x0ICogY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHRoaXMgb3BlbiBhbmQgdGhlIG1vdW50IGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihmaWxlKSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgcm9vdF9pbWFnZSwgUFRSX0VSUihmaWxlKSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlX3Zlcml0eSlcbiYjNDM7XHRcdHZlcmlmeV9yb290X2ltYWdlKGZpbGUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpbml0X21rZGlyKFwmIzM0Oy9pbWFnZVwmIzM0OywgMDcwMCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHVuYWJsZSB0byBjcmVhdGUgL2ltYWdlOiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJvb3RfaW1hZ2VfZnNfbmFtZXMpXG4mIzQzO1x0XHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdFx0cm9vdF9pbWFnZV9mc19uYW1lcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bnVtX2ZzID0gbGlzdF9iZGV2X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXHUwMDNjIG51bV9mczsgaSYjNDM7JiM0MzssIHAgJiM0Mzs9IHN0cmxlbihwKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRpZiAoISpwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGVyciA9IGRvX21vdW50X3Jvb3QocGF0aCwgXCYjMzQ7L2ltYWdlXCYjMzQ7LCBwLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgcm9vdF9pbWFnZV9tb3VudF9kYXRhKTtcbiYjNDM7XHRcdHN3aXRjaCAoZXJyKSB7XG4mIzQzO1x0XHRjYXNlIDA6XG4mIzQzO1x0XHRcdGdvdG8gbW91bnRlZDtcbiYjNDM7XHRcdGNhc2UgLUVBQ0NFUzpcbiYjNDM7XHRcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRcdGNhc2UgLUVOT1RCTEs6XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZSAlczogZXJyb3IgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICByb290X2ltYWdlLCBlcnIpO1xuJiM0MztcdH1cbiYjNDM7XHRwYW5pYyhcJiMzNDtWRlM6IG5vIGZpbGVzeXN0ZW0gY291bGQgbW91bnQgcm9vdCBpbWFnZSAlc1wmIzM0Oywgcm9vdF9pbWFnZSk7XG4mIzQzO1xuJiM0Mzttb3VudGVkOlxuJiM0MztcdGZwdXQoZmlsZSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlX3NyY2Rpcikge1xuJiM0MztcdFx0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCYjMzQ7LiVzXCYjMzQ7LCByb290X2ltYWdlX3NyY2RpcikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIFBBVEhfTUFYKVxuJiM0MztcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSBpbml0X21vdW50KFwmIzM0Oy9yb290XCYjMzQ7LCBwYXRoLCBOVUxMLCBNU19NT1ZFLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtWRlM6IGZhaWxlZCB0byBtb3ZlIHRoZSByb290IGltYWdlJiMzOTtzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGluaXRfdW1vdW50KFwmIzM0Oy9yb290XCYjMzQ7LCBNTlRfREVUQUNIKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocGF0aCk7XG4mIzQzO1x0a2ZyZWUoZnNfbmFtZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHdhaXQgZm9yIGFueSBhc3luY2hyb25vdXMgc2Nhbm5pbmcgdG8gY29tcGxldGUgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgd2FpdF9mb3Jfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxuIHtcbkBAIC00ODEsNiAmIzQzOzY3NCw4IEBAIHZvaWQgX19pbml0IHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpXG4gXHRpZiAocm9vdF93YWl0KVxuIFx0XHR3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4gXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4mIzQzO1x0aWYgKHJvb3RfaW1hZ2UpXG4mIzQzO1x0XHRtb3VudF9yb290X2ltYWdlKCk7XG4gXHRkZXZ0bXBmc19tb3VudCgpO1xuIFxuIFx0aWYgKGluaXRfcGl2b3Rfcm9vdChcJiMzNDsuXCYjMzQ7LCBcJiMzNDsuXCYjMzQ7KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyBhbmQgX19pbml0ZGF0YSB2YXJpYWJsZXMgaW4gaW5pdC9kb19tb3VudHMuYyB0byBzdXBwb3J0IG5ldyBib290IHBhcmFtZXRlcnMgKHJvb3RpbWFnZT0sIGV0Yy4pLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBib290LCBiZWZvcmUgdGhlIGZ1enplciBzdGFydHMsIGFuZCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCB2aWEgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTM1MmZlNDQ1YmU5MzIxNWQ2Y2RjYzM0MDdiODRjMjIyMzdkM2ZkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDE4IDE5OjQ5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTA1ZWJiMTcxOGJiM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC02Njk5LDYgJiM0Mzs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzCiAKIAlyb290ZnN0eXBlPQlbS05MXSBTZXQgcm9vdCBmaWxlc3lzdGVtIHR5cGUKIAomIzQzOwlyb290aW1hZ2U9CVtLTkxdIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhpcwomIzQzOwkJCWZpbGVzeXN0ZW0gaW1hZ2UgZmlsZSAoYWJzb2x1dGUgcGF0aCkgbG9jYXRlZCBvbiB0aGUKJiM0MzsJCQlmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSwgaW5zdGVhZCBvZiB1c2luZyB0aGF0CiYjNDM7CQkJZmlsZXN5c3RlbSBhcyB0aGUgcm9vdCBkaXJlY3RseS4gIFRoaXMgYWxsb3dzCiYjNDM7CQkJaW1hZ2UtYmFzZWQgc3lzdGVtcyB0aGF0IGtlZXAgdGhlaXIgKHR5cGljYWxseQomIzQzOwkJCXJlYWQtb25seSwgZS5nLiBlcm9mcykgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhcwomIzQzOwkJCXBsYWluIGZpbGVzIG9uIGEgY2FycmllciBmaWxlc3lzdGVtIHRvIGJvb3Qgd2l0aG91dAomIzQzOwkJCWFuIGluaXRyYW1mcy4gIFRoZSBpbWFnZSBpcyBtb3VudGVkIHJlYWQtb25seSB2aWEKJiM0MzsJCQl0aGUgZmlsZXN5c3RlbSYjMzk7cyBmaWxlLWJhY2tlZCBtb3VudCBzdXBwb3J0IChubyBsb29wCiYjNDM7CQkJZGV2aWNlIGlzIHNldCB1cCk7ICYjMzQ7cm8mIzM0OywgJiMzNDtydyYjMzQ7IGFuZCByb290ZmxhZ3M9IGtlZXAKJiM0MzsJCQlhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2UKJiM0MzsJCQlpcyBtb3VudGVkLCB0aGUgY2FycmllciBtb3VudCBpcyBkZXRhY2hlZCAoYnV0IGtlcHQKJiM0MzsJCQlidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzcwomIzQzOwkJCXJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi4KJiM0MzsKJiM0MzsJcm9vdGltYWdlZmxhZ3M9CVtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gbW91bnQgb3B0aW9uIHN0cmluZywKJiM0MzsJCQl1c2VkIHRvZ2V0aGVyIHdpdGggcm9vdGltYWdlPS4KJiM0MzsKJiM0MzsJcm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXIKJiM0MzsJCQl3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXMKJiM0MzsJCQlrbm93biB0byB0aGUga2VybmVsIHRoYXQgY2FuIG1vdW50IGEgYmxvY2sgZGV2aWNlIG9yCiYjNDM7CQkJYW4gaW1hZ2UgZmlsZS4KJiM0MzsKJiM0MzsJcm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdAomIzQzOwkJCWltYWdlIHdoZXJlIHRoZSBtb3VudCBvZiB0aGUgY2FycmllciBmaWxlc3lzdGVtCiYjNDM7CQkJaG9sZGluZyB0aGUgaW1hZ2UgKGkuZS4gdGhlIGZpbGVzeXN0ZW0gc3BlY2lmaWVkIGJ5CiYjNDM7CQkJcm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWQKJiM0MzsJCQl0b2dldGhlciB3aXRoIHJvb3RpbWFnZT0uCiYjNDM7CiYjNDM7CXJvb3RpbWFnZXZlcml0eT0gW0tOTF0gUmVxdWlyZSB0aGUgcm9vdCBpbWFnZSBzcGVjaWZpZWQgYnkKJiM0MzsJCQlyb290aW1hZ2U9IHRvIGhhdmUgZnN2ZXJpdHkgZW5hYmxlZCB3aXRoIHRoaXMgZmlsZQomIzQzOwkJCWRpZ2VzdCwgZ2l2ZW4gYXMgJmx0O2hhc2ggYWxnb3JpdGhtJmd0OzombHQ7aGV4IGRpZ2VzdCZndDssCiYjNDM7CQkJZS5nLiBzaGEyNTY6ZGQxYjNmYTkuLi4gIFRoZSBib290IGlzIGFib3J0ZWQgaWYgdGhlCiYjNDM7CQkJaW1hZ2UgY2FycmllcyBubyBvciBhIGRpZmZlcmVudCBmc3Zlcml0eSBkaWdlc3QuCiYjNDM7CQkJQmVjYXVzZSBmc3Zlcml0eSBrZWVwcyB2ZXJpZnlpbmcgZGF0YSByZWFkIGZyb20gdGhlCiYjNDM7CQkJaW1hZ2UgYWdhaW5zdCBpdHMgTWVya2xlIHRyZWUgYXQgcnVudGltZSwgYSB0cnVzdGVkCiYjNDM7CQkJKGUuZy4gc2lnbmVkIG9yIFRQTS1tZWFzdXJlZCkga2VybmVsIGNvbW1hbmQgbGluZQomIzQzOwkJCWV4dGVuZHMgdGhlIGNoYWluIG9mIHRydXN0IHRvIHRoZSBjb21wbGV0ZSByb290CiYjNDM7CQkJZmlsZXN5c3RlbSBjb250ZW50cyB3aXRob3V0IGFuIGluaXRyYW1mcy4gIFJlcXVpcmVzCiYjNDM7CQkJQ09ORklHX0ZTX1ZFUklUWSBhbmQgYSBjYXJyaWVyIGZpbGVzeXN0ZW0gd2l0aAomIzQzOwkJCWZzdmVyaXR5IHN1cHBvcnQuCiYjNDM7CiAJcm9vdHdhaXQJW0tOTF0gV2FpdCAoaW5kZWZpbml0ZWx5KSBmb3Igcm9vdCBkZXZpY2UgdG8gc2hvdyB1cC4KIAkJCVVzZWZ1bCBmb3IgZGV2aWNlcyB0aGF0IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseQogCQkJKGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCA5NWUwYjNhMGY3MTFiZC4uNGViNzkyYjI3NzA4NmQgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9kb19tb3VudHMuYwpAQCAtMjQsNiAmIzQzOzI0LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZnNfZnNfc2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZnNfbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYWlkL2RldGVjdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2hhc2hfaW5mby5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbW91bnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtkb19tb3VudHMuaCYjMzQ7CkBAIC0xMjIsMTMgJiM0MzsxMjUsNTkgQEAgX19zZXR1cCgmIzM0O3Jvb3RmbGFncz0mIzM0Oywgcm9vdF9kYXRhX3NldHVwKTsKIF9fc2V0dXAoJiMzNDtyb290ZnN0eXBlPSYjMzQ7LCBmc19uYW1lc19zZXR1cCk7CiBfX3NldHVwKCYjMzQ7cm9vdGRlbGF5PSYjMzQ7LCByb290X2RlbGF5X3NldHVwKTsKIAomIzQzOy8qCiYjNDM7ICogcm9vdGltYWdlPSBtb3VudHMgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSBhbiBpbWFnZSBmaWxlIGxvY2F0ZWQKJiM0MzsgKiBvbiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0gaW5zdGVhZCBvZiB1c2luZyB0aGF0IGZpbGVzeXN0ZW0KJiM0MzsgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZTsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CXJvb3RfaW1hZ2UgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9mc19uYW1lczsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CXJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpCiYjNDM7ewomIzQzOwlyb290X2ltYWdlX21vdW50X2RhdGEgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9zcmNkaXI7CiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV92ZXJpdHk7CiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV92ZXJpdHlfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlPSYjMzQ7LCByb290X2ltYWdlX3NldHVwKTsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlZnN0eXBlPSYjMzQ7LCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlZmxhZ3M9JiMzNDssIHJvb3RfaW1hZ2VfZGF0YV9zZXR1cCk7CiYjNDM7X19zZXR1cCgmIzM0O3Jvb3RpbWFnZXNyY2Rpcj0mIzM0Oywgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXApOwomIzQzO19fc2V0dXAoJiMzNDtyb290aW1hZ2V2ZXJpdHk9JiMzNDssIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTsKJiM0MzsKIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovCi1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSwgY2hhciAqbmFtZXMpCiB7CiAJaW50IGNvdW50ID0gMTsKIAljaGFyICpwID0gcGFnZTsKIAotCXN0cnNjcHkocCwgcm9vdF9mc19uYW1lcywgc2l6ZSk7CiYjNDM7CXN0cnNjcHkocCwgbmFtZXMsIHNpemUpOwogCXdoaWxlICgqcCYjNDM7JiM0MzspIHsKIAkJaWYgKHBbLTFdID09ICYjMzk7LCYjMzk7KSB7CiAJCQlwWy0xXSA9ICYjMzk7XDAmIzM5OzsKQEAgLTEzOSw4ICYjNDM7MTg4LDkgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLAotCQkJCSBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7c3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkaXIsCiYjNDM7CQkJCSBjb25zdCBjaGFyICpmcywgY29uc3QgaW50IGZsYWdzLAomIzQzOwkJCQkgY29uc3Qgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CiAJY2hhciAqZGF0YV9wYWdlID0gTlVMTDsKQEAgLTE1NCwxMSAmIzQzOzIwNCwxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLAogCQlzdHJzY3B5X3BhZChkYXRhX3BhZ2UsIGRhdGEsIFBBR0VfU0laRSk7CiAJfQogCi0JcmV0ID0gaW5pdF9tb3VudChuYW1lLCAmIzM0Oy9yb290JiMzNDssIGZzLCBmbGFncywgZGF0YV9wYWdlKTsKJiM0MzsJcmV0ID0gaW5pdF9tb3VudChuYW1lLCBkaXIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWluaXRfY2hkaXIoJiMzNDsvcm9vdCYjMzQ7KTsKJiM0MzsJaW5pdF9jaGRpcihkaXIpOwogCXMgPSBjdXJyZW50LSZndDtmcy0mZ3Q7cHdkLmRlbnRyeS0mZ3Q7ZF9zYjsKIAlST09UX0RFViA9IHMtJmd0O3NfZGV2OwogCXByaW50ayhLRVJOX0lORk8KQEAgLTE4NSw3ICYjNDM7MjM1LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpCiAJc2NucHJpbnRmKGIsIEJERVZOQU1FX1NJWkUsICYjMzQ7dW5rbm93bi1ibG9jaygldSwldSkmIzM0OywKIAkJICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7CiAJaWYgKHJvb3RfZnNfbmFtZXMpCi0JCW51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpOwomIzQzOwkJbnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwgcm9vdF9mc19uYW1lcyk7CiAJZWxzZQogCQludW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7CiByZXRyeToKQEAgLTE5NCw3ICYjNDM7MjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpCiAKIAkJaWYgKCEqcCkKIAkJCWNvbnRpbnVlOwotCQllcnIgPSBkb19tb3VudF9yb290KG5hbWUsIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpOwomIzQzOwkJZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCAmIzM0Oy9yb290JiMzNDssIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpOwogCQlzd2l0Y2ggKGVycikgewogCQkJY2FzZSAwOgogCQkJCWdvdG8gb3V0OwpAQCAtMjY2LDcgJiM0MzszMTYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfbmZzX3Jvb3Qodm9pZCkKIAkgKi8KIAl0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjsKIAlmb3IgKHRyeSA9IDE7IDsgdHJ5JiM0MzsmIzQzOykgewotCQlpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsICYjMzQ7bmZzJiMzNDssIHJvb3RfbW91bnRmbGFncywgcm9vdF9kYXRhKSkKJiM0MzsJCWlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgJiMzNDsvcm9vdCYjMzQ7LCAmIzM0O25mcyYjMzQ7LCByb290X21vdW50ZmxhZ3MsCiYjNDM7CQkJCSAgIHJvb3RfZGF0YSkpCiAJCQlyZXR1cm47CiAJCWlmICh0cnkgJmd0OyBORlNST09UX1JFVFJZX01BWCkKIAkJCWJyZWFrOwpAQCAtMzAzLDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfY2lmc19yb290KHZvaWQpCiAKIAl0aW1lb3V0ID0gQ0lGU1JPT1RfVElNRU9VVF9NSU47CiAJZm9yICh0cnkgPSAxOyA7IHRyeSYjNDM7JiM0MzspIHsKLQkJaWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCAmIzM0O2NpZnMmIzM0Oywgcm9vdF9tb3VudGZsYWdzLAomIzQzOwkJaWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCAmIzM0Oy9yb290JiMzNDssICYjMzQ7Y2lmcyYjMzQ7LCByb290X21vdW50ZmxhZ3MsCiAJCQkJICAgcm9vdF9kYXRhKSkKIAkJCXJldHVybjsKIAkJaWYgKHRyeSAmZ3Q7IENJRlNST09UX1JFVFJZX01BWCkKQEAgLTM0NSw3ICYjNDM7Mzk2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKQogCWZzX25hbWVzID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZnNfbmFtZXMpCiAJCXJldHVybiAtRUlOVkFMOwotCW51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpOwomIzQzOwludW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTsKIAogCWZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpICZsdDsgbnVtX2ZzOwogCSAgICAgaSYjNDM7JiM0MzssIGZzdHlwZSAmIzQzOz0gc3RybGVuKGZzdHlwZSkgJiM0MzsgMSkgewpAQCAtMzUzLDggJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKCFmc19pc19ub2Rldihmc3R5cGUpKQogCQkJY29udGludWU7Ci0JCWVyciA9IGRvX21vdW50X3Jvb3Qocm9vdF9kZXZpY2VfbmFtZSwgZnN0eXBlLCByb290X21vdW50ZmxhZ3MsCi0JCQkJICAgIHJvb3RfbW91bnRfZGF0YSk7CiYjNDM7CQllcnIgPSBkb19tb3VudF9yb290KHJvb3RfZGV2aWNlX25hbWUsICYjMzQ7L3Jvb3QmIzM0OywgZnN0eXBlLAomIzQzOwkJCQkgICAgcm9vdF9tb3VudGZsYWdzLCByb290X21vdW50X2RhdGEpOwogCQlpZiAoIWVycikKIAkJCWJyZWFrOwogCX0KQEAgLTQwMiw2ICYjNDM7NDUzLDE0OCBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpCiAJfQogfQogCiYjNDM7I2lmZGVmIENPTkZJR19GU19WRVJJVFkKJiM0MzsvKgomIzQzOyAqIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2UgdG8gY2FycnkgdGhlIGZzdmVyaXR5IGZpbGUgZGlnZXN0IGdpdmVuIGJ5CiYjNDM7ICogcm9vdGltYWdldmVyaXR5PSZsdDtoYXNoIGFsZ29yaXRobSZndDs6Jmx0O2hleCBkaWdlc3QmZ3Q7LiAgQGZpbGUgbXVzdCBoYXZlIGJlZW4KJiM0MzsgKiBvcGVuZWQgc28gdGhhdCBpdHMgZnN2ZXJpdHkgaW5mb3JtYXRpb24gaXMgbG9hZGVkLiAgQW55IGRldmlhdGlvbgomIzQzOyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZQomIzQzOyAqIGltYWdlIGNvbnRlbnRzLCB3aGljaCBmc3Zlcml0eSBrZWVwcyB2ZXJpZnlpbmcgYWdhaW5zdCB0aGUgaW1hZ2UmIzM5O3MKJiM0MzsgKiBNZXJrbGUgdHJlZSBhcyB0aGV5IGFyZSByZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXU4IHdhbnRbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV0sIGdvdFtGU19WRVJJVFlfTUFYX0RJR0VTVF9TSVpFXTsKJiM0MzsJZW51bSBoYXNoX2FsZ28gd2FudF9hbGdvLCBnb3RfYWxnbzsKJiM0MzsJaW50IHdhbnRfc2l6ZSwgZ290X3NpemUsIGk7CiYjNDM7CWNoYXIgKmhleDsKJiM0MzsKJiM0MzsJaGV4ID0gc3RyY2hyKHJvb3RfaW1hZ2VfdmVyaXR5LCAmIzM5OzomIzM5Oyk7CiYjNDM7CWlmICghaGV4KQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT0gZXhwZWN0cyAmbHQ7YWxnb3JpdGhtJmd0OzombHQ7aGV4IGRpZ2VzdCZndDsmIzM0Oyk7CiYjNDM7CSpoZXgmIzQzOyYjNDM7ID0gJiMzOTtcMCYjMzk7OwomIzQzOwlpID0gbWF0Y2hfc3RyaW5nKGhhc2hfYWxnb19uYW1lLCBIQVNIX0FMR09fX0xBU1QsIHJvb3RfaW1hZ2VfdmVyaXR5KTsKJiM0MzsJaWYgKGkgJmx0OyAwKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXCYjMzQ7JXNcJiMzNDsmIzM0OywKJiM0MzsJCSAgICAgIHJvb3RfaW1hZ2VfdmVyaXR5KTsKJiM0MzsJd2FudF9hbGdvID0gaTsKJiM0MzsJd2FudF9zaXplID0gaGFzaF9kaWdlc3Rfc2l6ZVt3YW50X2FsZ29dOwomIzQzOwlpZiAoc3RybGVuKGhleCkgIT0gMiAqIHdhbnRfc2l6ZSB8fCBoZXgyYmluKHdhbnQsIGhleCwgd2FudF9zaXplKSkKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3QmIzM0OywKJiM0MzsJCSAgICAgIHdhbnRfc2l6ZSk7CiYjNDM7CiYjNDM7CWdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsICZhbXA7Z290X2FsZ28pOwomIzQzOwlpZiAoIWdvdF9zaXplKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3QgaW1hZ2UgZG9lcyBub3QgaGF2ZSBmc3Zlcml0eSBlbmFibGVkJiMzNDspOwomIzQzOwlpZiAoZ290X2FsZ28gIT0gd2FudF9hbGdvIHx8IGdvdF9zaXplICE9IHdhbnRfc2l6ZSB8fAomIzQzOwkgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSkKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290IGltYWdlIGZzdmVyaXR5IGRpZ2VzdCBtaXNtYXRjaDogZXhwZWN0ZWQgJXM6JSpwaE4sIGdvdCAlczolKnBoTiYjMzQ7LAomIzQzOwkJICAgICAgaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50LAomIzQzOwkJICAgICAgaGFzaF9hbGdvX25hbWVbZ290X2FsZ29dLCBnb3Rfc2l6ZSwgZ290KTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1ZGUzogdmVyaWZpZWQgcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgJXM6JSpwaE5cbiYjMzQ7LAomIzQzOwkJaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50KTsKJiM0Mzt9CiYjNDM7I2Vsc2UgLyogIUNPTkZJR19GU19WRVJJVFkgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlwYW5pYygmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZJiMzNDspOwomIzQzO30KJiM0MzsjZW5kaWYgLyogIUNPTkZJR19GU19WRVJJVFkgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhlIGltYWdlIGZpbGUgcm9vdGltYWdlPSBvbiB0aGUKJiM0MzsgKiBmaWxlc3lzdGVtIHRoYXQgd2FzIGp1c3QgbW91bnRlZCBmcm9tIHJvb3Q9ICh0aGUgJiMzNDtjYXJyaWVyJiMzNDspLCBzbyB0aGF0CiYjNDM7ICogaW1hZ2UtYmFzZWQgc3lzdGVtcyBjYW4gYm9vdCB3aXRob3V0IGFuIGluaXRyYW1mcy4KJiM0MzsgKgomIzQzOyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2UKJiM0MzsgKiBpcyBhbHdheXMgbW91bnRlZCByZWFkLW9ubHk7ICYjMzQ7cm8mIzM0Oy8mIzM0O3J3JiMzNDsvcm9vdGZsYWdzPSBrZWVwIGFwcGx5aW5nIHRvIHRoZQomIzQzOyAqIGNhcnJpZXIuICBPbiBzdWNjZXNzIHRoZSBjd2QgaXMgdGhlIGltYWdlJiMzOTtzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3QKJiM0MzsgKiBpbiBwcmVwYXJlX25hbWVzcGFjZSgpLiAgVGhlIGNhcnJpZXIgbW91bnQgaXMgbW92ZWQgdG8gcm9vdGltYWdlc3JjZGlyPQomIzQzOyAqIGluc2lkZSB0aGUgaW1hZ2UgaWYgc2V0LCBhbmQgZGV0YWNoZWQgb3RoZXJ3aXNlOyBlaXRoZXIgd2F5IHRoZSBpbWFnZQomIzQzOyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9yb290X2ltYWdlKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzID0gTVNfUkRPTkxZIHwgTVNfU0lMRU5UOwomIzQzOwljaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKJiM0MzsJaW50IG51bV9mcywgaSwgZXJyOwomIzQzOwomIzQzOwlpZiAocm9vdF9pbWFnZVswXSAhPSAmIzM5Oy8mIzM5OykKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCYjMzQ7KTsKJiM0MzsKJiM0MzsJcGF0aCA9IGttYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOwomIzQzOwlmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwYXRoIHx8ICFmc19uYW1lcykKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZTogbm90IGVub3VnaCBtZW1vcnkmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgJiMzNDsvcm9vdCVzJiMzNDssIHJvb3RfaW1hZ2UpICZndDs9IFBBVEhfTUFYKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlCiYjNDM7CSAqIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiB0aGlzIG9wZW4gYW5kIHRoZSBtb3VudCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CiYjNDM7CWlmIChJU19FUlIoZmlsZSkpCiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkJiMzNDssCiYjNDM7CQkgICAgICByb290X2ltYWdlLCBQVFJfRVJSKGZpbGUpKTsKJiM0MzsKJiM0MzsJaWYgKHJvb3RfaW1hZ2VfdmVyaXR5KQomIzQzOwkJdmVyaWZ5X3Jvb3RfaW1hZ2UoZmlsZSk7CiYjNDM7CiYjNDM7CWVyciA9IGluaXRfbWtkaXIoJiMzNDsvaW1hZ2UmIzM0OywgMDcwMCk7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FRVhJU1QpCiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIGNyZWF0ZSAvaW1hZ2U6IGVycm9yICVkJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWlmIChyb290X2ltYWdlX2ZzX25hbWVzKQomIzQzOwkJbnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwKJiM0MzsJCQkJCXJvb3RfaW1hZ2VfZnNfbmFtZXMpOwomIzQzOwllbHNlCiYjNDM7CQludW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDAsIHAgPSBmc19uYW1lczsgaSAmbHQ7IG51bV9mczsgaSYjNDM7JiM0MzssIHAgJiM0Mzs9IHN0cmxlbihwKSAmIzQzOyAxKSB7CiYjNDM7CQlpZiAoISpwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJZXJyID0gZG9fbW91bnRfcm9vdChwYXRoLCAmIzM0Oy9pbWFnZSYjMzQ7LCBwLCBmbGFncywKJiM0MzsJCQkJICAgIHJvb3RfaW1hZ2VfbW91bnRfZGF0YSk7CiYjNDM7CQlzd2l0Y2ggKGVycikgewomIzQzOwkJY2FzZSAwOgomIzQzOwkJCWdvdG8gbW91bnRlZDsKJiM0MzsJCWNhc2UgLUVBQ0NFUzoKJiM0MzsJCWNhc2UgLUVJTlZBTDoKJiM0MzsJCWNhc2UgLUVOT1RCTEs6CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkJiMzNDssCiYjNDM7CQkgICAgICByb290X2ltYWdlLCBlcnIpOwomIzQzOwl9CiYjNDM7CXBhbmljKCYjMzQ7VkZTOiBubyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QgaW1hZ2UgJXMmIzM0Oywgcm9vdF9pbWFnZSk7CiYjNDM7CiYjNDM7bW91bnRlZDoKJiM0MzsJZnB1dChmaWxlKTsKJiM0MzsKJiM0MzsJaWYgKHJvb3RfaW1hZ2Vfc3JjZGlyKSB7CiYjNDM7CQlpZiAocm9vdF9pbWFnZV9zcmNkaXJbMF0gIT0gJiMzOTsvJiMzOTspCiYjNDM7CQkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoJiMzNDspOwomIzQzOwkJaWYgKHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAmIzM0Oy4lcyYjMzQ7LCByb290X2ltYWdlX3NyY2RpcikgJmd0Oz0KJiM0MzsJCSAgICBQQVRIX01BWCkKJiM0MzsJCQlwYW5pYygmIzM0O1ZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nJiMzNDspOwomIzQzOwkJZXJyID0gaW5pdF9tb3VudCgmIzM0Oy9yb290JiMzNDssIHBhdGgsIE5VTEwsIE1TX01PVkUsIE5VTEwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlwcl9lcnIoJiMzNDtWRlM6IGZhaWxlZCB0byBtb3ZlIHRoZSByb290IGltYWdlJiMzOTtzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKGVycikKJiM0MzsJCWluaXRfdW1vdW50KCYjMzQ7L3Jvb3QmIzM0OywgTU5UX0RFVEFDSCk7CiYjNDM7CiYjNDM7CWtmcmVlKHBhdGgpOwomIzQzOwlrZnJlZShmc19uYW1lcyk7CiYjNDM7fQomIzQzOwogLyogd2FpdCBmb3IgYW55IGFzeW5jaHJvbm91cyBzY2FubmluZyB0byBjb21wbGV0ZSAqLwogc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSkKIHsKQEAgLTQ4MSw2ICYjNDM7Njc0LDggQEAgdm9pZCBfX2luaXQgcHJlcGFyZV9uYW1lc3BhY2Uodm9pZCkKIAlpZiAocm9vdF93YWl0KQogCQl3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7CiAJbW91bnRfcm9vdChzYXZlZF9yb290X25hbWUpOwomIzQzOwlpZiAocm9vdF9pbWFnZSkKJiM0MzsJCW1vdW50X3Jvb3RfaW1hZ2UoKTsKIAlkZXZ0bXBmc19tb3VudCgpOwogCiAJaWYgKGluaXRfcGl2b3Rfcm9vdCgmIzM0Oy4mIzM0OywgJiMzNDsuJiMzNDspKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDAKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiAxMDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IGByb290aW1hZ2U9YCBLZXJuZWwgUGFyYW1ldGVyIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgYHJvb3RpbWFnZT1gIGtlcm5lbCBwYXJhbWV0ZXIuIEl0IGxvb2tzIGxpa2UgaXQgYWxsb3dzIGJvb3RpbmcgZnJvbSBhbiBpbWFnZSBmaWxlIHNwZWNpZmllZCBvbiB0aGUgYHJvb3Q9YCBmaWxlc3lzdGVtLCBvZmZlcmluZyBhIHdheSBmb3IgaW1hZ2UtYmFzZWQgc3lzdGVtcyB0byBib290IHdpdGhvdXQgbmVlZGluZyBhbiBpbml0cmFtZnMuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgcmVsYXRlZCBwYXJhbWV0ZXJzIGxpa2UgYHJvb3RpbWFnZWZsYWdzPWAsIGByb290aW1hZ2Vmc3R5cGU9YCwgYHJvb3RpbWFnZXNyY2Rpcj1gLCBhbmQgYHJvb3RpbWFnZXZlcml0eT1gLiBJdCBtb2RpZmllcyBgaW5pdC9kb19tb3VudHMuY2AsIGFkZGluZyBmdW5jdGlvbnMgbGlrZSBgbW91bnRfcm9vdF9pbWFnZSgpYCAoY2FsbGVkIGZyb20gYHByZXBhcmVfbmFtZXNwYWNlKClgKSBhbmQgYHZlcmlmeV9yb290X2ltYWdlKClgLCB3aGljaCB1c2VzIGBmc3Zlcml0eV9nZXRfZGlnZXN0KClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGVhcmx5IGJvb3QgY29kZSwgZGVhbGluZyB3aXRoIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBhbmQgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4gU3l6a2FsbGVyLCBteSB0eXBpY2FsIHRvb2wsIHByaW1hcmlseSBmb2N1c2VzIG9uIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQsIHVzdWFsbHkgdGhyb3VnaCBzeXN0ZW0gY2FsbHMuIEkga25vdyBTeXprYWxsZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZnV6eiBib290IHBhcmFtZXRlcnMsIGJ1dCB0aGF0JiMzOTtzIG5vdCBpdHMgcHJpbWFyeSBmb2N1cywgYW5kIGl0IHR5cGljYWxseSBkb2VzbiYjMzk7dCByZWJvb3QgZm9yIGVhY2ggdGVzdCBjYXNlIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQgcG9wcyB1cDogaXMgdGhpcyBjb2RlIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IEl0JiMzOTtzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBib290IGFuZCB0aGVuIGZyZWVkLiBCb3RoIGBtb3VudF9yb290X2ltYWdlYCBhbmQgYHZlcmlmeV9yb290X2ltYWdlYCBhcmUgYF9faW5pdGAuIFRoaXMgbWVhbnMgaXQgY2Fubm90IGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJiMzOTtzICpub3JtYWwqIGZ1enppbmcgcHJvY2VkdXJlLCB3aGljaCBvcGVyYXRlcyBwb3N0LWJvb3QuIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGlzIGJhc2VkIG9uIHN5c2NhbGxzLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb25nIGdvbmUgYnkgdGhlbi4KCkxldCBtZSBkb3VibGUtY2hlY2sgU3l6a2FsbGVyJiMzOTtzIGNvbW1hbmQgbGluZSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhleSBhcmUgbGltaXRlZCBhbmQgbm90IHRoZSB1c3VhbCBtb2RlIG9mIG9wZXJhdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gVGhpcyBgX19pbml0YCBjb2RlIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LgoKU28sIHNpbmNlIHRoZSBjb2RlIHJ1bnMgb25seSBkdXJpbmcgYm9vdCwgYW5kIFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZnV6eiB0aGlzIHBhcnQsIHRoaXMgaXNuJiMzOTt0IGZ1enphYmxlIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gSXQmIzM5O3MgY29kZSB0aGF0IHJ1bnMgb25jZSBhbmQgaXMgdGhlbiBkaXNjYXJkZWQsIG91dHNpZGUgdGhlIHNjb3BlIG9mIHN5c2NhbGwtYmFzZWQgZnV6emluZy4gU2luY2UgYHByZXBhcmVfbmFtZXNwYWNlYCBpcyBjYWxsZWQgZnJvbSBga2VybmVsX2luaXRfZnJlZWFibGVgLCB3aGljaCBpcyBgX19pbml0YCB0b28sIGl0IGZ1cnRoZXIgdmFsaWRhdGVzIG15IGNvbmNsdXNpb24uIGBtb3VudF9yb290X2ltYWdlYCwgYHZlcmlmeV9yb290X2ltYWdlYCwgYHNwbGl0X2ZzX25hbWVzYCBhbmQgYGRvX21vdW50X3Jvb3RgIGFyZSBhbGwgYWxzbyBgX19pbml0YC4KClRoZXJlZm9yZSwgbXkgZmluYWwgYXNzZXNzbWVudCBpczoKCldvcnRoRnV6emluZzogZmFsc2UKUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhjbHVzaXZlbHkgYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgX19pbml0ZGF0YWAgdmFyaWFibGVzIGluIGBpbml0L2RvX21vdW50cy5jYCB0byBlbmFibGUgYm9vdGluZyBmcm9tIGEgcm9vdCBpbWFnZSBmaWxlLiBUaGlzIGNvZGUgZXhlY3V0ZXMgb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IGFuZCBpcyBmcmVlZCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0IGNhbm5vdCBiZSBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscyBhZnRlciBib290LgoKRm9jdXNTeW1ib2xzOiBbXQpFbmFibGVDb25maWdzOiBbXQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC4zMzkyMzY0MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MTE3MTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC4zMzkyNDMzNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODc2NDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzNTJmZTQ0NWJlOTMyMTVkNmNkY2MzNDA3Yjg0YzIyMjM3ZDNmZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMTk6NDk6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi4xMDVlYmIxNzE4YmIzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTY2OTksNiArNjY5OSw0OCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0cm9vdGZzdHlwZT1cXHRbS05MXSBTZXQgcm9vdCBmaWxlc3lzdGVtIHR5cGVcXG4gXFxuK1xcdHJvb3RpbWFnZT1cXHRbS05MXSBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoaXNcXG4rXFx0XFx0XFx0ZmlsZXN5c3RlbSBpbWFnZSBmaWxlIChhYnNvbHV0ZSBwYXRoKSBsb2NhdGVkIG9uIHRoZVxcbitcXHRcXHRcXHRmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSwgaW5zdGVhZCBvZiB1c2luZyB0aGF0XFxuK1xcdFxcdFxcdGZpbGVzeXN0ZW0gYXMgdGhlIHJvb3QgZGlyZWN0bHkuICBUaGlzIGFsbG93c1xcbitcXHRcXHRcXHRpbWFnZS1iYXNlZCBzeXN0ZW1zIHRoYXQga2VlcCB0aGVpciAodHlwaWNhbGx5XFxuK1xcdFxcdFxcdHJlYWQtb25seSwgZS5nLiBlcm9mcykgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhc1xcbitcXHRcXHRcXHRwbGFpbiBmaWxlcyBvbiBhIGNhcnJpZXIgZmlsZXN5c3RlbSB0byBib290IHdpdGhvdXRcXG4rXFx0XFx0XFx0YW4gaW5pdHJhbWZzLiAgVGhlIGltYWdlIGlzIG1vdW50ZWQgcmVhZC1vbmx5IHZpYVxcbitcXHRcXHRcXHR0aGUgZmlsZXN5c3RlbSdzIGZpbGUtYmFja2VkIG1vdW50IHN1cHBvcnQgKG5vIGxvb3BcXG4rXFx0XFx0XFx0ZGV2aWNlIGlzIHNldCB1cCk7IFxcXCJyb1xcXCIsIFxcXCJyd1xcXCIgYW5kIHJvb3RmbGFncz0ga2VlcFxcbitcXHRcXHRcXHRhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2VcXG4rXFx0XFx0XFx0aXMgbW91bnRlZCwgdGhlIGNhcnJpZXIgbW91bnQgaXMgZGV0YWNoZWQgKGJ1dCBrZXB0XFxuK1xcdFxcdFxcdGJ1c3kgYnkgdGhlIGltYWdlIG1vdW50IGl0c2VsZikgdW5sZXNzXFxuK1xcdFxcdFxcdHJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi5cXG4rXFxuK1xcdHJvb3RpbWFnZWZsYWdzPVxcdFtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gbW91bnQgb3B0aW9uIHN0cmluZyxcXG4rXFx0XFx0XFx0dXNlZCB0b2dldGhlciB3aXRoIHJvb3RpbWFnZT0uXFxuK1xcbitcXHRyb290aW1hZ2Vmc3R5cGU9IFtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gdHlwZSwgdXNlZCB0b2dldGhlclxcbitcXHRcXHRcXHR3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXNcXG4rXFx0XFx0XFx0a25vd24gdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBtb3VudCBhIGJsb2NrIGRldmljZSBvclxcbitcXHRcXHRcXHRhbiBpbWFnZSBmaWxlLlxcbitcXG4rXFx0cm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdFxcbitcXHRcXHRcXHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxcbitcXHRcXHRcXHRob2xkaW5nIHRoZSBpbWFnZSAoaS5lLiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnlcXG4rXFx0XFx0XFx0cm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWRcXG4rXFx0XFx0XFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxcbitcXG4rXFx0cm9vdGltYWdldmVyaXR5PSBbS05MXSBSZXF1aXJlIHRoZSByb290IGltYWdlIHNwZWNpZmllZCBieVxcbitcXHRcXHRcXHRyb290aW1hZ2U9IHRvIGhhdmUgZnN2ZXJpdHkgZW5hYmxlZCB3aXRoIHRoaXMgZmlsZVxcbitcXHRcXHRcXHRkaWdlc3QsIGdpdmVuIGFzIFxcdTAwM2NoYXNoIGFsZ29yaXRobVxcdTAwM2U6XFx1MDAzY2hleCBkaWdlc3RcXHUwMDNlLFxcbitcXHRcXHRcXHRlLmcuIHNoYTI1NjpkZDFiM2ZhOS4uLiAgVGhlIGJvb3QgaXMgYWJvcnRlZCBpZiB0aGVcXG4rXFx0XFx0XFx0aW1hZ2UgY2FycmllcyBubyBvciBhIGRpZmZlcmVudCBmc3Zlcml0eSBkaWdlc3QuXFxuK1xcdFxcdFxcdEJlY2F1c2UgZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGRhdGEgcmVhZCBmcm9tIHRoZVxcbitcXHRcXHRcXHRpbWFnZSBhZ2FpbnN0IGl0cyBNZXJrbGUgdHJlZSBhdCBydW50aW1lLCBhIHRydXN0ZWRcXG4rXFx0XFx0XFx0KGUuZy4gc2lnbmVkIG9yIFRQTS1tZWFzdXJlZCkga2VybmVsIGNvbW1hbmQgbGluZVxcbitcXHRcXHRcXHRleHRlbmRzIHRoZSBjaGFpbiBvZiB0cnVzdCB0byB0aGUgY29tcGxldGUgcm9vdFxcbitcXHRcXHRcXHRmaWxlc3lzdGVtIGNvbnRlbnRzIHdpdGhvdXQgYW4gaW5pdHJhbWZzLiAgUmVxdWlyZXNcXG4rXFx0XFx0XFx0Q09ORklHX0ZTX1ZFUklUWSBhbmQgYSBjYXJyaWVyIGZpbGVzeXN0ZW0gd2l0aFxcbitcXHRcXHRcXHRmc3Zlcml0eSBzdXBwb3J0LlxcbitcXG4gXFx0cm9vdHdhaXRcXHRbS05MXSBXYWl0IChpbmRlZmluaXRlbHkpIGZvciByb290IGRldmljZSB0byBzaG93IHVwLlxcbiBcXHRcXHRcXHRVc2VmdWwgZm9yIGRldmljZXMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHlcXG4gXFx0XFx0XFx0KGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuXFxuZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jXFxuaW5kZXggOTVlMGIzYTBmNzExYmQuLjRlYjc5MmIyNzcwODZkIDEwMDY0NFxcbi0tLSBhL2luaXQvZG9fbW91bnRzLmNcXG4rKysgYi9pbml0L2RvX21vdW50cy5jXFxuQEAgLTI0LDYgKzI0LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25mc19mc19zYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmZzX21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYWlkL2RldGVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2hhc2hfaW5mby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tb3VudC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImRvX21vdW50cy5oXFxcIlxcbkBAIC0xMjIsMTMgKzEyNSw1OSBAQCBfX3NldHVwKFxcXCJyb290ZmxhZ3M9XFxcIiwgcm9vdF9kYXRhX3NldHVwKTtcXG4gX19zZXR1cChcXFwicm9vdGZzdHlwZT1cXFwiLCBmc19uYW1lc19zZXR1cCk7XFxuIF9fc2V0dXAoXFxcInJvb3RkZWxheT1cXFwiLCByb290X2RlbGF5X3NldHVwKTtcXG4gXFxuKy8qXFxuKyAqIHJvb3RpbWFnZT0gbW91bnRzIHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gYW4gaW1hZ2UgZmlsZSBsb2NhdGVkXFxuKyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxcbisgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS5cXG4rICovXFxuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cilcXG4re1xcbitcXHRyb290X2ltYWdlID0gc3RyO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfZnNfbmFtZXM7XFxuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZnNfbmFtZXNfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhO1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2RhdGFfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2VfbW91bnRfZGF0YSA9IHN0cjtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcXG4rc3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2Vfc3JjZGlyID0gc3RyO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfdmVyaXR5O1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3Zlcml0eV9zZXR1cChjaGFyICpzdHIpXFxuK3tcXG4rXFx0cm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitfX3NldHVwKFxcXCJyb290aW1hZ2U9XFxcIiwgcm9vdF9pbWFnZV9zZXR1cCk7XFxuK19fc2V0dXAoXFxcInJvb3RpbWFnZWZzdHlwZT1cXFwiLCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdlZmxhZ3M9XFxcIiwgcm9vdF9pbWFnZV9kYXRhX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdlc3JjZGlyPVxcXCIsIHJvb3RfaW1hZ2Vfc3JjZGlyX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdldmVyaXR5PVxcXCIsIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTtcXG4rXFxuIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovXFxuLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplKVxcbitzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSwgY2hhciAqbmFtZXMpXFxuIHtcXG4gXFx0aW50IGNvdW50ID0gMTtcXG4gXFx0Y2hhciAqcCA9IHBhZ2U7XFxuIFxcbi1cXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xcbitcXHRzdHJzY3B5KHAsIG5hbWVzLCBzaXplKTtcXG4gXFx0d2hpbGUgKCpwKyspIHtcXG4gXFx0XFx0aWYgKHBbLTFdID09ICcsJykge1xcbiBcXHRcXHRcXHRwWy0xXSA9ICdcXFxcMCc7XFxuQEAgLTEzOSw4ICsxODgsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSlcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLFxcbi1cXHRcXHRcXHRcXHQgY29uc3QgaW50IGZsYWdzLCBjb25zdCB2b2lkICpkYXRhKVxcbitzdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRpcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmZzLCBjb25zdCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqcztcXG4gXFx0Y2hhciAqZGF0YV9wYWdlID0gTlVMTDtcXG5AQCAtMTU0LDExICsyMDQsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmcyxcXG4gXFx0XFx0c3Ryc2NweV9wYWQoZGF0YV9wYWdlLCBkYXRhLCBQQUdFX1NJWkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBpbml0X21vdW50KG5hbWUsIFxcXCIvcm9vdFxcXCIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcXG4rXFx0cmV0ID0gaW5pdF9tb3VudChuYW1lLCBkaXIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpbml0X2NoZGlyKFxcXCIvcm9vdFxcXCIpO1xcbitcXHRpbml0X2NoZGlyKGRpcik7XFxuIFxcdHMgPSBjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcHdkLmRlbnRyeS1cXHUwMDNlZF9zYjtcXG4gXFx0Uk9PVF9ERVYgPSBzLVxcdTAwM2VzX2RldjtcXG4gXFx0cHJpbnRrKEtFUk5fSU5GT1xcbkBAIC0xODUsNyArMjM1LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXFxuIFxcdHNjbnByaW50ZihiLCBCREVWTkFNRV9TSVpFLCBcXFwidW5rbm93bi1ibG9jaygldSwldSlcXFwiLFxcbiBcXHRcXHQgIE1BSk9SKFJPT1RfREVWKSwgTUlOT1IoUk9PVF9ERVYpKTtcXG4gXFx0aWYgKHJvb3RfZnNfbmFtZXMpXFxuLVxcdFxcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xcbitcXHRcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XFxuIHJldHJ5OlxcbkBAIC0xOTQsNyArMjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXFxuIFxcbiBcXHRcXHRpZiAoISpwKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcXG4rXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCBcXFwiL3Jvb3RcXFwiLCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcXG4gXFx0XFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0XFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjY2LDcgKzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0dGltZW91dCA9IE5GU1JPT1RfVElNRU9VVF9NSU47XFxuIFxcdGZvciAodHJ5ID0gMTsgOyB0cnkrKykge1xcbi1cXHRcXHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFxcXCJuZnNcXFwiLCByb290X21vdW50ZmxhZ3MsIHJvb3RfZGF0YSkpXFxuK1xcdFxcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXFxcIi9yb290XFxcIiwgXFxcIm5mc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgcm9vdF9kYXRhKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAodHJ5IFxcdTAwM2UgTkZTUk9PVF9SRVRSWV9NQVgpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zMDMsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1vdW50X2NpZnNfcm9vdCh2b2lkKVxcbiBcXG4gXFx0dGltZW91dCA9IENJRlNST09UX1RJTUVPVVRfTUlOO1xcbiBcXHRmb3IgKHRyeSA9IDE7IDsgdHJ5KyspIHtcXG4tXFx0XFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcXFwiY2lmc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4rXFx0XFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcXFwiL3Jvb3RcXFwiLCBcXFwiY2lmc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICAgcm9vdF9kYXRhKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAodHJ5IFxcdTAwM2UgQ0lGU1JPT1RfUkVUUllfTUFYKVxcbkBAIC0zNDUsNyArMzk2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFmc19uYW1lcylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xcbitcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpIFxcdTAwM2MgbnVtX2ZzO1xcbiBcXHQgICAgIGkrKywgZnN0eXBlICs9IHN0cmxlbihmc3R5cGUpICsgMSkge1xcbkBAIC0zNTMsOCArNDA0LDggQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFmc19pc19ub2Rldihmc3R5cGUpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcXG4tXFx0XFx0XFx0XFx0ICAgIHJvb3RfbW91bnRfZGF0YSk7XFxuK1xcdFxcdGVyciA9IGRvX21vdW50X3Jvb3Qocm9vdF9kZXZpY2VfbmFtZSwgXFxcIi9yb290XFxcIiwgZnN0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgcm9vdF9tb3VudGZsYWdzLCByb290X21vdW50X2RhdGEpO1xcbiBcXHRcXHRpZiAoIWVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtNDAyLDYgKzQ1MywxNDggQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHR9XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXFxuKy8qXFxuKyAqIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2UgdG8gY2FycnkgdGhlIGZzdmVyaXR5IGZpbGUgZGlnZXN0IGdpdmVuIGJ5XFxuKyAqIHJvb3RpbWFnZXZlcml0eT1cXHUwMDNjaGFzaCBhbGdvcml0aG1cXHUwMDNlOlxcdTAwM2NoZXggZGlnZXN0XFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXFxuKyAqIG9wZW5lZCBzbyB0aGF0IGl0cyBmc3Zlcml0eSBpbmZvcm1hdGlvbiBpcyBsb2FkZWQuICBBbnkgZGV2aWF0aW9uXFxuKyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZVxcbisgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJ3NcXG4rICogTWVya2xlIHRyZWUgYXMgdGhleSBhcmUgcmVhZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XFxuK1xcdGVudW0gaGFzaF9hbGdvIHdhbnRfYWxnbywgZ290X2FsZ287XFxuK1xcdGludCB3YW50X3NpemUsIGdvdF9zaXplLCBpO1xcbitcXHRjaGFyICpoZXg7XFxuK1xcbitcXHRoZXggPSBzdHJjaHIocm9vdF9pbWFnZV92ZXJpdHksICc6Jyk7XFxuK1xcdGlmICghaGV4KVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9IGV4cGVjdHMgXFx1MDAzY2FsZ29yaXRobVxcdTAwM2U6XFx1MDAzY2hleCBkaWdlc3RcXHUwMDNlXFxcIik7XFxuK1xcdCpoZXgrKyA9ICdcXFxcMCc7XFxuK1xcdGkgPSBtYXRjaF9zdHJpbmcoaGFzaF9hbGdvX25hbWUsIEhBU0hfQUxHT19fTEFTVCwgcm9vdF9pbWFnZV92ZXJpdHkpO1xcbitcXHRpZiAoaSBcXHUwMDNjIDApXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXFxcXFxcXCIlc1xcXFxcXFwiXFxcIixcXG4rXFx0XFx0ICAgICAgcm9vdF9pbWFnZV92ZXJpdHkpO1xcbitcXHR3YW50X2FsZ28gPSBpO1xcbitcXHR3YW50X3NpemUgPSBoYXNoX2RpZ2VzdF9zaXplW3dhbnRfYWxnb107XFxuK1xcdGlmIChzdHJsZW4oaGV4KSAhPSAyICogd2FudF9zaXplIHx8IGhleDJiaW4od2FudCwgaGV4LCB3YW50X3NpemUpKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3RcXFwiLFxcbitcXHRcXHQgICAgICB3YW50X3NpemUpO1xcbitcXG4rXFx0Z290X3NpemUgPSBmc3Zlcml0eV9nZXRfZGlnZXN0KGZpbGVfaW5vZGUoZmlsZSksIGdvdCwgTlVMTCwgXFx1MDAyNmdvdF9hbGdvKTtcXG4rXFx0aWYgKCFnb3Rfc2l6ZSlcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdCBpbWFnZSBkb2VzIG5vdCBoYXZlIGZzdmVyaXR5IGVuYWJsZWRcXFwiKTtcXG4rXFx0aWYgKGdvdF9hbGdvICE9IHdhbnRfYWxnbyB8fCBnb3Rfc2l6ZSAhPSB3YW50X3NpemUgfHxcXG4rXFx0ICAgIG1lbWNtcCh3YW50LCBnb3QsIHdhbnRfc2l6ZSkpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0IG1pc21hdGNoOiBleHBlY3RlZCAlczolKnBoTiwgZ290ICVzOiUqcGhOXFxcIixcXG4rXFx0XFx0ICAgICAgaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50LFxcbitcXHRcXHQgICAgICBoYXNoX2FsZ29fbmFtZVtnb3RfYWxnb10sIGdvdF9zaXplLCBnb3QpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiVkZTOiB2ZXJpZmllZCByb290IGltYWdlIGZzdmVyaXR5IGRpZ2VzdCAlczolKnBoTlxcXFxuXFxcIixcXG4rXFx0XFx0aGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50KTtcXG4rfVxcbisjZWxzZSAvKiAhQ09ORklHX0ZTX1ZFUklUWSAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZXFxcIik7XFxuK31cXG4rI2VuZGlmIC8qICFDT05GSUdfRlNfVkVSSVRZICovXFxuK1xcbisvKlxcbisgKiBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoZSBpbWFnZSBmaWxlIHJvb3RpbWFnZT0gb24gdGhlXFxuKyAqIGZpbGVzeXN0ZW0gdGhhdCB3YXMganVzdCBtb3VudGVkIGZyb20gcm9vdD0gKHRoZSBcXFwiY2FycmllclxcXCIpLCBzbyB0aGF0XFxuKyAqIGltYWdlLWJhc2VkIHN5c3RlbXMgY2FuIGJvb3Qgd2l0aG91dCBhbiBpbml0cmFtZnMuXFxuKyAqXFxuKyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2VcXG4rICogaXMgYWx3YXlzIG1vdW50ZWQgcmVhZC1vbmx5OyBcXFwicm9cXFwiL1xcXCJyd1xcXCIvcm9vdGZsYWdzPSBrZWVwIGFwcGx5aW5nIHRvIHRoZVxcbisgKiBjYXJyaWVyLiAgT24gc3VjY2VzcyB0aGUgY3dkIGlzIHRoZSBpbWFnZSdzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3RcXG4rICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cXG4rICogaW5zaWRlIHRoZSBpbWFnZSBpZiBzZXQsIGFuZCBkZXRhY2hlZCBvdGhlcndpc2U7IGVpdGhlciB3YXkgdGhlIGltYWdlXFxuKyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfaW1hZ2Uodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gTVNfUkRPTkxZIHwgTVNfU0lMRU5UO1xcbitcXHRjaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4rXFx0aW50IG51bV9mcywgaSwgZXJyO1xcbitcXG4rXFx0aWYgKHJvb3RfaW1hZ2VbMF0gIT0gJy8nKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFxcXCIpO1xcbitcXG4rXFx0cGF0aCA9IGttYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbitcXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwYXRoIHx8ICFmc19uYW1lcylcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2U6IG5vdCBlbm91Z2ggbWVtb3J5XFxcIik7XFxuK1xcbitcXHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFxcXCIvcm9vdCVzXFxcIiwgcm9vdF9pbWFnZSkgXFx1MDAzZT0gUEFUSF9NQVgpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZ1xcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXFxuK1xcdCAqIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiB0aGlzIG9wZW4gYW5kIHRoZSBtb3VudCBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XFxuK1xcdGlmIChJU19FUlIoZmlsZSkpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHVuYWJsZSB0byBvcGVuIHJvb3QgaW1hZ2UgJXM6IGVycm9yICVsZFxcXCIsXFxuK1xcdFxcdCAgICAgIHJvb3RfaW1hZ2UsIFBUUl9FUlIoZmlsZSkpO1xcbitcXG4rXFx0aWYgKHJvb3RfaW1hZ2VfdmVyaXR5KVxcbitcXHRcXHR2ZXJpZnlfcm9vdF9pbWFnZShmaWxlKTtcXG4rXFxuK1xcdGVyciA9IGluaXRfbWtkaXIoXFxcIi9pbWFnZVxcXCIsIDA3MDApO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVFWElTVClcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIGNyZWF0ZSAvaW1hZ2U6IGVycm9yICVkXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGlmIChyb290X2ltYWdlX2ZzX25hbWVzKVxcbitcXHRcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRyb290X2ltYWdlX2ZzX25hbWVzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXFx1MDAzYyBudW1fZnM7IGkrKywgcCArPSBzdHJsZW4ocCkgKyAxKSB7XFxuK1xcdFxcdGlmICghKnApXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRlcnIgPSBkb19tb3VudF9yb290KHBhdGgsIFxcXCIvaW1hZ2VcXFwiLCBwLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgIHJvb3RfaW1hZ2VfbW91bnRfZGF0YSk7XFxuK1xcdFxcdHN3aXRjaCAoZXJyKSB7XFxuK1xcdFxcdGNhc2UgMDpcXG4rXFx0XFx0XFx0Z290byBtb3VudGVkO1xcbitcXHRcXHRjYXNlIC1FQUNDRVM6XFxuK1xcdFxcdGNhc2UgLUVJTlZBTDpcXG4rXFx0XFx0Y2FzZSAtRU5PVEJMSzpcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkXFxcIixcXG4rXFx0XFx0ICAgICAgcm9vdF9pbWFnZSwgZXJyKTtcXG4rXFx0fVxcbitcXHRwYW5pYyhcXFwiVkZTOiBubyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QgaW1hZ2UgJXNcXFwiLCByb290X2ltYWdlKTtcXG4rXFxuK21vdW50ZWQ6XFxuK1xcdGZwdXQoZmlsZSk7XFxuK1xcbitcXHRpZiAocm9vdF9pbWFnZV9zcmNkaXIpIHtcXG4rXFx0XFx0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyWzBdICE9ICcvJylcXG4rXFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhcXFwiKTtcXG4rXFx0XFx0aWYgKHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBcXFwiLiVzXFxcIiwgcm9vdF9pbWFnZV9zcmNkaXIpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICBQQVRIX01BWClcXG4rXFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nXFxcIik7XFxuK1xcdFxcdGVyciA9IGluaXRfbW91bnQoXFxcIi9yb290XFxcIiwgcGF0aCwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHByX2VycihcXFwiVkZTOiBmYWlsZWQgdG8gbW92ZSB0aGUgcm9vdCBpbWFnZSdzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpbml0X3Vtb3VudChcXFwiL3Jvb3RcXFwiLCBNTlRfREVUQUNIKTtcXG4rXFxuK1xcdGtmcmVlKHBhdGgpO1xcbitcXHRrZnJlZShmc19uYW1lcyk7XFxuK31cXG4rXFxuIC8qIHdhaXQgZm9yIGFueSBhc3luY2hyb25vdXMgc2Nhbm5pbmcgdG8gY29tcGxldGUgKi9cXG4gc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSlcXG4ge1xcbkBAIC00ODEsNiArNjc0LDggQEAgdm9pZCBfX2luaXQgcHJlcGFyZV9uYW1lc3BhY2Uodm9pZClcXG4gXFx0aWYgKHJvb3Rfd2FpdClcXG4gXFx0XFx0d2FpdF9mb3Jfcm9vdChzYXZlZF9yb290X25hbWUpO1xcbiBcXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XFxuK1xcdGlmIChyb290X2ltYWdlKVxcbitcXHRcXHRtb3VudF9yb290X2ltYWdlKCk7XFxuIFxcdGRldnRtcGZzX21vdW50KCk7XFxuIFxcbiBcXHRpZiAoaW5pdF9waXZvdF9yb290KFxcXCIuXFxcIiwgXFxcIi5cXFwiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC45Nzg4NDk1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTExNTQ4MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTM1MmZlNDQ1YmU5MzIxNWQ2Y2RjYzM0MDdiODRjMjIyMzdkM2ZkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDE5OjQ5OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjEwNWViYjE3MThiYjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNjY5OSw2ICs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHRyb290ZnN0eXBlPVx0W0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSB0eXBlXG4gXG4rXHRyb290aW1hZ2U9XHRbS05MXSBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoaXNcbitcdFx0XHRmaWxlc3lzdGVtIGltYWdlIGZpbGUgKGFic29sdXRlIHBhdGgpIGxvY2F0ZWQgb24gdGhlXG4rXHRcdFx0ZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0sIGluc3RlYWQgb2YgdXNpbmcgdGhhdFxuK1x0XHRcdGZpbGVzeXN0ZW0gYXMgdGhlIHJvb3QgZGlyZWN0bHkuICBUaGlzIGFsbG93c1xuK1x0XHRcdGltYWdlLWJhc2VkIHN5c3RlbXMgdGhhdCBrZWVwIHRoZWlyICh0eXBpY2FsbHlcbitcdFx0XHRyZWFkLW9ubHksIGUuZy4gZXJvZnMpIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgYXNcbitcdFx0XHRwbGFpbiBmaWxlcyBvbiBhIGNhcnJpZXIgZmlsZXN5c3RlbSB0byBib290IHdpdGhvdXRcbitcdFx0XHRhbiBpbml0cmFtZnMuICBUaGUgaW1hZ2UgaXMgbW91bnRlZCByZWFkLW9ubHkgdmlhXG4rXHRcdFx0dGhlIGZpbGVzeXN0ZW0ncyBmaWxlLWJhY2tlZCBtb3VudCBzdXBwb3J0IChubyBsb29wXG4rXHRcdFx0ZGV2aWNlIGlzIHNldCB1cCk7IFwicm9cIiwgXCJyd1wiIGFuZCByb290ZmxhZ3M9IGtlZXBcbitcdFx0XHRhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2VcbitcdFx0XHRpcyBtb3VudGVkLCB0aGUgY2FycmllciBtb3VudCBpcyBkZXRhY2hlZCAoYnV0IGtlcHRcbitcdFx0XHRidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzc1xuK1x0XHRcdHJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi5cbitcbitcdHJvb3RpbWFnZWZsYWdzPVx0W0tOTF0gU2V0IHJvb3QgaW1hZ2UgZmlsZXN5c3RlbSBtb3VudCBvcHRpb24gc3RyaW5nLFxuK1x0XHRcdHVzZWQgdG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuK1xuK1x0cm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXJcbitcdFx0XHR3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXNcbitcdFx0XHRrbm93biB0byB0aGUga2VybmVsIHRoYXQgY2FuIG1vdW50IGEgYmxvY2sgZGV2aWNlIG9yXG4rXHRcdFx0YW4gaW1hZ2UgZmlsZS5cbitcbitcdHJvb3RpbWFnZXNyY2Rpcj0gW0tOTF0gRGlyZWN0b3J5IChhYnNvbHV0ZSBwYXRoKSBpbnNpZGUgdGhlIHJvb3RcbitcdFx0XHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxuK1x0XHRcdGhvbGRpbmcgdGhlIGltYWdlIChpLmUuIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieVxuK1x0XHRcdHJvb3Q9KSBpcyBtb3ZlZCB0bywgaW5zdGVhZCBvZiBkZXRhY2hpbmcgaXQuICBVc2VkXG4rXHRcdFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuK1xuK1x0cm9vdGltYWdldmVyaXR5PSBbS05MXSBSZXF1aXJlIHRoZSByb290IGltYWdlIHNwZWNpZmllZCBieVxuK1x0XHRcdHJvb3RpbWFnZT0gdG8gaGF2ZSBmc3Zlcml0eSBlbmFibGVkIHdpdGggdGhpcyBmaWxlXG4rXHRcdFx0ZGlnZXN0LCBnaXZlbiBhcyBcdTAwM2NoYXNoIGFsZ29yaXRobVx1MDAzZTpcdTAwM2NoZXggZGlnZXN0XHUwMDNlLFxuK1x0XHRcdGUuZy4gc2hhMjU2OmRkMWIzZmE5Li4uICBUaGUgYm9vdCBpcyBhYm9ydGVkIGlmIHRoZVxuK1x0XHRcdGltYWdlIGNhcnJpZXMgbm8gb3IgYSBkaWZmZXJlbnQgZnN2ZXJpdHkgZGlnZXN0LlxuK1x0XHRcdEJlY2F1c2UgZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGRhdGEgcmVhZCBmcm9tIHRoZVxuK1x0XHRcdGltYWdlIGFnYWluc3QgaXRzIE1lcmtsZSB0cmVlIGF0IHJ1bnRpbWUsIGEgdHJ1c3RlZFxuK1x0XHRcdChlLmcuIHNpZ25lZCBvciBUUE0tbWVhc3VyZWQpIGtlcm5lbCBjb21tYW5kIGxpbmVcbitcdFx0XHRleHRlbmRzIHRoZSBjaGFpbiBvZiB0cnVzdCB0byB0aGUgY29tcGxldGUgcm9vdFxuK1x0XHRcdGZpbGVzeXN0ZW0gY29udGVudHMgd2l0aG91dCBhbiBpbml0cmFtZnMuICBSZXF1aXJlc1xuK1x0XHRcdENPTkZJR19GU19WRVJJVFkgYW5kIGEgY2FycmllciBmaWxlc3lzdGVtIHdpdGhcbitcdFx0XHRmc3Zlcml0eSBzdXBwb3J0LlxuK1xuIFx0cm9vdHdhaXRcdFtLTkxdIFdhaXQgKGluZGVmaW5pdGVseSkgZm9yIHJvb3QgZGV2aWNlIHRvIHNob3cgdXAuXG4gXHRcdFx0VXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5XG4gXHRcdFx0KGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuXG5kaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmNcbmluZGV4IDk1ZTBiM2EwZjcxMWJkLi40ZWI3OTJiMjc3MDg2ZCAxMDA2NDRcbi0tLSBhL2luaXQvZG9fbW91bnRzLmNcbisrKyBiL2luaXQvZG9fbW91bnRzLmNcbkBAIC0yNCw2ICsyNCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmZzX2ZzX3NiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZnNfbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhaWQvZGV0ZWN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vaGFzaF9pbmZvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21vdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImRvX21vdW50cy5oXCJcbkBAIC0xMjIsMTMgKzEyNSw1OSBAQCBfX3NldHVwKFwicm9vdGZsYWdzPVwiLCByb290X2RhdGFfc2V0dXApO1xuIF9fc2V0dXAoXCJyb290ZnN0eXBlPVwiLCBmc19uYW1lc19zZXR1cCk7XG4gX19zZXR1cChcInJvb3RkZWxheT1cIiwgcm9vdF9kZWxheV9zZXR1cCk7XG4gXG4rLypcbisgKiByb290aW1hZ2U9IG1vdW50cyB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIGFuIGltYWdlIGZpbGUgbG9jYXRlZFxuKyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxuKyAqIGFzIHRoZSByb290IGRpcmVjdGx5LlxuKyAqL1xuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2Vfc2V0dXAoY2hhciAqc3RyKVxuK3tcbitcdHJvb3RfaW1hZ2UgPSBzdHI7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfZnNfbmFtZXM7XG4rc3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9mc19uYW1lc19zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9mc19uYW1lcyA9IHN0cjtcbitcdHJldHVybiAxO1xuK31cbitcbitzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhO1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9tb3VudF9kYXRhID0gc3RyO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NyY2Rpcl9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfdmVyaXR5O1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKGNoYXIgKnN0cilcbit7XG4rXHRyb290X2ltYWdlX3Zlcml0eSA9IHN0cjtcbitcdHJldHVybiAxO1xuK31cbitcbitfX3NldHVwKFwicm9vdGltYWdlPVwiLCByb290X2ltYWdlX3NldHVwKTtcbitfX3NldHVwKFwicm9vdGltYWdlZnN0eXBlPVwiLCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTtcbitfX3NldHVwKFwicm9vdGltYWdlZmxhZ3M9XCIsIHJvb3RfaW1hZ2VfZGF0YV9zZXR1cCk7XG4rX19zZXR1cChcInJvb3RpbWFnZXNyY2Rpcj1cIiwgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXApO1xuK19fc2V0dXAoXCJyb290aW1hZ2V2ZXJpdHk9XCIsIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTtcbitcbiAvKiBUaGlzIGNhbiByZXR1cm4gemVybyBsZW5ndGggc3RyaW5ncy4gQ2FsbGVyIHNob3VsZCBjaGVjayAqL1xuLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplKVxuK3N0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplLCBjaGFyICpuYW1lcylcbiB7XG4gXHRpbnQgY291bnQgPSAxO1xuIFx0Y2hhciAqcCA9IHBhZ2U7XG4gXG4tXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xuK1x0c3Ryc2NweShwLCBuYW1lcywgc2l6ZSk7XG4gXHR3aGlsZSAoKnArKykge1xuIFx0XHRpZiAocFstMV0gPT0gJywnKSB7XG4gXHRcdFx0cFstMV0gPSAnXFwwJztcbkBAIC0xMzksOCArMTg4LDkgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4tXHRcdFx0XHQgY29uc3QgaW50IGZsYWdzLCBjb25zdCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyLFxuK1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZzLCBjb25zdCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7XG4gXHRjaGFyICpkYXRhX3BhZ2UgPSBOVUxMO1xuQEAgLTE1NCwxMSArMjA0LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4gXHRcdHN0cnNjcHlfcGFkKGRhdGFfcGFnZSwgZGF0YSwgUEFHRV9TSVpFKTtcbiBcdH1cbiBcbi1cdHJldCA9IGluaXRfbW91bnQobmFtZSwgXCIvcm9vdFwiLCBmcywgZmxhZ3MsIGRhdGFfcGFnZSk7XG4rXHRyZXQgPSBpbml0X21vdW50KG5hbWUsIGRpciwgZnMsIGZsYWdzLCBkYXRhX3BhZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpbml0X2NoZGlyKFwiL3Jvb3RcIik7XG4rXHRpbml0X2NoZGlyKGRpcik7XG4gXHRzID0gY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vwd2QuZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRST09UX0RFViA9IHMtXHUwMDNlc19kZXY7XG4gXHRwcmludGsoS0VSTl9JTkZPXG5AQCAtMTg1LDcgKzIzNSw3IEBAIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfZ2VuZXJpYyhjaGFyICpuYW1lLCBjaGFyICpwcmV0dHlfbmFtZSwgaW50IGZsYWdzKVxuIFx0c2NucHJpbnRmKGIsIEJERVZOQU1FX1NJWkUsIFwidW5rbm93bi1ibG9jaygldSwldSlcIixcbiBcdFx0ICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7XG4gXHRpZiAocm9vdF9mc19uYW1lcylcbi1cdFx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXHRcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUsIHJvb3RfZnNfbmFtZXMpO1xuIFx0ZWxzZVxuIFx0XHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4gcmV0cnk6XG5AQCAtMTk0LDcgKzI0NCw3IEBAIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfZ2VuZXJpYyhjaGFyICpuYW1lLCBjaGFyICpwcmV0dHlfbmFtZSwgaW50IGZsYWdzKVxuIFxuIFx0XHRpZiAoISpwKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpO1xuK1x0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIFwiL3Jvb3RcIiwgcCwgZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4gXHRcdHN3aXRjaCAoZXJyKSB7XG4gXHRcdFx0Y2FzZSAwOlxuIFx0XHRcdFx0Z290byBvdXQ7XG5AQCAtMjY2LDcgKzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxuIFx0ICovXG4gXHR0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjtcbiBcdGZvciAodHJ5ID0gMTsgOyB0cnkrKykge1xuLVx0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwibmZzXCIsIHJvb3RfbW91bnRmbGFncywgcm9vdF9kYXRhKSlcbitcdFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcIi9yb290XCIsIFwibmZzXCIsIHJvb3RfbW91bnRmbGFncyxcbitcdFx0XHRcdCAgIHJvb3RfZGF0YSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRpZiAodHJ5IFx1MDAzZSBORlNST09UX1JFVFJZX01BWClcbiBcdFx0XHRicmVhaztcbkBAIC0zMDMsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1vdW50X2NpZnNfcm9vdCh2b2lkKVxuIFxuIFx0dGltZW91dCA9IENJRlNST09UX1RJTUVPVVRfTUlOO1xuIFx0Zm9yICh0cnkgPSAxOyA7IHRyeSsrKSB7XG4tXHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCJjaWZzXCIsIHJvb3RfbW91bnRmbGFncyxcbitcdFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcIi9yb290XCIsIFwiY2lmc1wiLCByb290X21vdW50ZmxhZ3MsXG4gXHRcdFx0XHQgICByb290X2RhdGEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHRyeSBcdTAwM2UgQ0lGU1JPT1RfUkVUUllfTUFYKVxuQEAgLTM0NSw3ICszOTYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZnNfbmFtZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcbiBcbiBcdGZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpIFx1MDAzYyBudW1fZnM7XG4gXHQgICAgIGkrKywgZnN0eXBlICs9IHN0cmxlbihmc3R5cGUpICsgMSkge1xuQEAgLTM1Myw4ICs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghZnNfaXNfbm9kZXYoZnN0eXBlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcbi1cdFx0XHRcdCAgICByb290X21vdW50X2RhdGEpO1xuK1x0XHRlcnIgPSBkb19tb3VudF9yb290KHJvb3RfZGV2aWNlX25hbWUsIFwiL3Jvb3RcIiwgZnN0eXBlLFxuK1x0XHRcdFx0ICAgIHJvb3RfbW91bnRmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcbiBcdFx0aWYgKCFlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDAyLDYgKzQ1MywxNDggQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxuIFx0fVxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuKy8qXG4rICogUmVxdWlyZSB0aGUgcm9vdCBpbWFnZSB0byBjYXJyeSB0aGUgZnN2ZXJpdHkgZmlsZSBkaWdlc3QgZ2l2ZW4gYnlcbisgKiByb290aW1hZ2V2ZXJpdHk9XHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXG4rICogb3BlbmVkIHNvIHRoYXQgaXRzIGZzdmVyaXR5IGluZm9ybWF0aW9uIGlzIGxvYWRlZC4gIEFueSBkZXZpYXRpb25cbisgKiBmYWlscyB0aGUgYm9vdDogd2l0aCBhIHRydXN0ZWQgY29tbWFuZCBsaW5lIHRoaXMgcGlucyB0aGUgY29tcGxldGVcbisgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJ3NcbisgKiBNZXJrbGUgdHJlZSBhcyB0aGV5IGFyZSByZWFkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XG4rXHRlbnVtIGhhc2hfYWxnbyB3YW50X2FsZ28sIGdvdF9hbGdvO1xuK1x0aW50IHdhbnRfc2l6ZSwgZ290X3NpemUsIGk7XG4rXHRjaGFyICpoZXg7XG4rXG4rXHRoZXggPSBzdHJjaHIocm9vdF9pbWFnZV92ZXJpdHksICc6Jyk7XG4rXHRpZiAoIWhleClcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXZlcml0eT0gZXhwZWN0cyBcdTAwM2NhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZVwiKTtcbitcdCpoZXgrKyA9ICdcXDAnO1xuK1x0aSA9IG1hdGNoX3N0cmluZyhoYXNoX2FsZ29fbmFtZSwgSEFTSF9BTEdPX19MQVNULCByb290X2ltYWdlX3Zlcml0eSk7XG4rXHRpZiAoaSBcdTAwM2MgMClcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXFxcIiVzXFxcIlwiLFxuK1x0XHQgICAgICByb290X2ltYWdlX3Zlcml0eSk7XG4rXHR3YW50X2FsZ28gPSBpO1xuK1x0d2FudF9zaXplID0gaGFzaF9kaWdlc3Rfc2l6ZVt3YW50X2FsZ29dO1xuK1x0aWYgKHN0cmxlbihoZXgpICE9IDIgKiB3YW50X3NpemUgfHwgaGV4MmJpbih3YW50LCBoZXgsIHdhbnRfc2l6ZSkpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3RcIixcbitcdFx0ICAgICAgd2FudF9zaXplKTtcbitcbitcdGdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsIFx1MDAyNmdvdF9hbGdvKTtcbitcdGlmICghZ290X3NpemUpXG4rXHRcdHBhbmljKFwiVkZTOiByb290IGltYWdlIGRvZXMgbm90IGhhdmUgZnN2ZXJpdHkgZW5hYmxlZFwiKTtcbitcdGlmIChnb3RfYWxnbyAhPSB3YW50X2FsZ28gfHwgZ290X3NpemUgIT0gd2FudF9zaXplIHx8XG4rXHQgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSlcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0IG1pc21hdGNoOiBleHBlY3RlZCAlczolKnBoTiwgZ290ICVzOiUqcGhOXCIsXG4rXHRcdCAgICAgIGhhc2hfYWxnb19uYW1lW3dhbnRfYWxnb10sIHdhbnRfc2l6ZSwgd2FudCxcbitcdFx0ICAgICAgaGFzaF9hbGdvX25hbWVbZ290X2FsZ29dLCBnb3Rfc2l6ZSwgZ290KTtcbitcbitcdHByX2luZm8oXCJWRlM6IHZlcmlmaWVkIHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0ICVzOiUqcGhOXFxuXCIsXG4rXHRcdGhhc2hfYWxnb19uYW1lW3dhbnRfYWxnb10sIHdhbnRfc2l6ZSwgd2FudCk7XG4rfVxuKyNlbHNlIC8qICFDT05GSUdfRlNfVkVSSVRZICovXG4rc3RhdGljIHZvaWQgX19pbml0IHZlcmlmeV9yb290X2ltYWdlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHBhbmljKFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9IHJlcXVpcmVzIENPTkZJR19GU19WRVJJVFlcIik7XG4rfVxuKyNlbmRpZiAvKiAhQ09ORklHX0ZTX1ZFUklUWSAqL1xuK1xuKy8qXG4rICogTW91bnQgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSB0aGUgaW1hZ2UgZmlsZSByb290aW1hZ2U9IG9uIHRoZVxuKyAqIGZpbGVzeXN0ZW0gdGhhdCB3YXMganVzdCBtb3VudGVkIGZyb20gcm9vdD0gKHRoZSBcImNhcnJpZXJcIiksIHNvIHRoYXRcbisgKiBpbWFnZS1iYXNlZCBzeXN0ZW1zIGNhbiBib290IHdpdGhvdXQgYW4gaW5pdHJhbWZzLlxuKyAqXG4rICogQ2FsbGVkIHdpdGggdGhlIGNhcnJpZXIgbW91bnRlZCBhdCAvcm9vdCBhbmQgdGhlIGN3ZCB0aGVyZS4gIFRoZSBpbWFnZVxuKyAqIGlzIGFsd2F5cyBtb3VudGVkIHJlYWQtb25seTsgXCJyb1wiL1wicndcIi9yb290ZmxhZ3M9IGtlZXAgYXBwbHlpbmcgdG8gdGhlXG4rICogY2Fycmllci4gIE9uIHN1Y2Nlc3MgdGhlIGN3ZCBpcyB0aGUgaW1hZ2UncyByb290LCByZWFkeSBmb3IgdGhlIHBpdm90XG4rICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cbisgKiBpbnNpZGUgdGhlIGltYWdlIGlmIHNldCwgYW5kIGRldGFjaGVkIG90aGVyd2lzZTsgZWl0aGVyIHdheSB0aGUgaW1hZ2VcbisgKiBtb3VudCBrZWVwcyB0aGUgY2FycmllciBzdXBlcmJsb2NrIHBpbm5lZC5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9pbWFnZSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBNU19SRE9OTFkgfCBNU19TSUxFTlQ7XG4rXHRjaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwO1xuK1x0c3RydWN0IGZpbGUgKmZpbGU7XG4rXHRpbnQgbnVtX2ZzLCBpLCBlcnI7XG4rXG4rXHRpZiAocm9vdF9pbWFnZVswXSAhPSAnLycpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFwiKTtcbitcbitcdHBhdGggPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbitcdGZzX25hbWVzID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwYXRoIHx8ICFmc19uYW1lcylcbitcdFx0cGFuaWMoXCJWRlM6IHVuYWJsZSB0byBtb3VudCByb290IGltYWdlOiBub3QgZW5vdWdoIG1lbW9yeVwiKTtcbitcbitcdGlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCIvcm9vdCVzXCIsIHJvb3RfaW1hZ2UpIFx1MDAzZT0gUEFUSF9NQVgpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2U9IHBhdGggdG9vIGxvbmdcIik7XG4rXG4rXHQvKlxuK1x0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXG4rXHQgKiBjYW5ub3QgY2hhbmdlIGJldHdlZW4gdGhpcyBvcGVuIGFuZCB0aGUgbW91bnQgYmVsb3cuXG4rXHQgKi9cbitcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XG4rXHRpZiAoSVNfRVJSKGZpbGUpKVxuK1x0XHRwYW5pYyhcIlZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkXCIsXG4rXHRcdCAgICAgIHJvb3RfaW1hZ2UsIFBUUl9FUlIoZmlsZSkpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2VfdmVyaXR5KVxuK1x0XHR2ZXJpZnlfcm9vdF9pbWFnZShmaWxlKTtcbitcbitcdGVyciA9IGluaXRfbWtkaXIoXCIvaW1hZ2VcIiwgMDcwMCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbitcdFx0cGFuaWMoXCJWRlM6IHVuYWJsZSB0byBjcmVhdGUgL2ltYWdlOiBlcnJvciAlZFwiLCBlcnIpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2VfZnNfbmFtZXMpXG4rXHRcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUsXG4rXHRcdFx0XHRcdHJvb3RfaW1hZ2VfZnNfbmFtZXMpO1xuK1x0ZWxzZVxuK1x0XHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXG4rXHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXHUwMDNjIG51bV9mczsgaSsrLCBwICs9IHN0cmxlbihwKSArIDEpIHtcbitcdFx0aWYgKCEqcClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZXJyID0gZG9fbW91bnRfcm9vdChwYXRoLCBcIi9pbWFnZVwiLCBwLCBmbGFncyxcbitcdFx0XHRcdCAgICByb290X2ltYWdlX21vdW50X2RhdGEpO1xuK1x0XHRzd2l0Y2ggKGVycikge1xuK1x0XHRjYXNlIDA6XG4rXHRcdFx0Z290byBtb3VudGVkO1xuK1x0XHRjYXNlIC1FQUNDRVM6XG4rXHRcdGNhc2UgLUVJTlZBTDpcbitcdFx0Y2FzZSAtRU5PVEJMSzpcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRwYW5pYyhcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkXCIsXG4rXHRcdCAgICAgIHJvb3RfaW1hZ2UsIGVycik7XG4rXHR9XG4rXHRwYW5pYyhcIlZGUzogbm8gZmlsZXN5c3RlbSBjb3VsZCBtb3VudCByb290IGltYWdlICVzXCIsIHJvb3RfaW1hZ2UpO1xuK1xuK21vdW50ZWQ6XG4rXHRmcHV0KGZpbGUpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyKSB7XG4rXHRcdGlmIChyb290X2ltYWdlX3NyY2RpclswXSAhPSAnLycpXG4rXHRcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoXCIpO1xuK1x0XHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwiLiVzXCIsIHJvb3RfaW1hZ2Vfc3JjZGlyKSBcdTAwM2U9XG4rXHRcdCAgICBQQVRIX01BWClcbitcdFx0XHRwYW5pYyhcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nXCIpO1xuK1x0XHRlcnIgPSBpbml0X21vdW50KFwiL3Jvb3RcIiwgcGF0aCwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cHJfZXJyKFwiVkZTOiBmYWlsZWQgdG8gbW92ZSB0aGUgcm9vdCBpbWFnZSdzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXG5cIixcbitcdFx0XHQgICAgICAgcm9vdF9pbWFnZV9zcmNkaXIsIGVycik7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKGVycilcbitcdFx0aW5pdF91bW91bnQoXCIvcm9vdFwiLCBNTlRfREVUQUNIKTtcbitcbitcdGtmcmVlKHBhdGgpO1xuK1x0a2ZyZWUoZnNfbmFtZXMpO1xuK31cbitcbiAvKiB3YWl0IGZvciBhbnkgYXN5bmNocm9ub3VzIHNjYW5uaW5nIHRvIGNvbXBsZXRlICovXG4gc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSlcbiB7XG5AQCAtNDgxLDYgKzY3NCw4IEBAIHZvaWQgX19pbml0IHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpXG4gXHRpZiAocm9vdF93YWl0KVxuIFx0XHR3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4gXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4rXHRpZiAocm9vdF9pbWFnZSlcbitcdFx0bW91bnRfcm9vdF9pbWFnZSgpO1xuIFx0ZGV2dG1wZnNfbW91bnQoKTtcbiBcbiBcdGlmIChpbml0X3Bpdm90X3Jvb3QoXCIuXCIsIFwiLlwiKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTk6NTA6MDAuOTc4ODU4MTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MTE1MDAyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogYHJvb3RpbWFnZT1gIEtlcm5lbCBQYXJhbWV0ZXIgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBgcm9vdGltYWdlPWAga2VybmVsIHBhcmFtZXRlci4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgYm9vdGluZyBmcm9tIGFuIGltYWdlIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBgcm9vdD1gIGZpbGVzeXN0ZW0sIG9mZmVyaW5nIGEgd2F5IGZvciBpbWFnZS1iYXNlZCBzeXN0ZW1zIHRvIGJvb3Qgd2l0aG91dCBuZWVkaW5nIGFuIGluaXRyYW1mcy4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyByZWxhdGVkIHBhcmFtZXRlcnMgbGlrZSBgcm9vdGltYWdlZmxhZ3M9YCwgYHJvb3RpbWFnZWZzdHlwZT1gLCBgcm9vdGltYWdlc3JjZGlyPWAsIGFuZCBgcm9vdGltYWdldmVyaXR5PWAuIEl0IG1vZGlmaWVzIGBpbml0L2RvX21vdW50cy5jYCwgYWRkaW5nIGZ1bmN0aW9ucyBsaWtlIGBtb3VudF9yb290X2ltYWdlKClgIChjYWxsZWQgZnJvbSBgcHJlcGFyZV9uYW1lc3BhY2UoKWApIGFuZCBgdmVyaWZ5X3Jvb3RfaW1hZ2UoKWAsIHdoaWNoIHVzZXMgYGZzdmVyaXR5X2dldF9kaWdlc3QoKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJdCdzIGVhcmx5IGJvb3QgY29kZSwgZGVhbGluZyB3aXRoIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBhbmQgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4gU3l6a2FsbGVyLCBteSB0eXBpY2FsIHRvb2wsIHByaW1hcmlseSBmb2N1c2VzIG9uIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQsIHVzdWFsbHkgdGhyb3VnaCBzeXN0ZW0gY2FsbHMuIEkga25vdyBTeXprYWxsZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZnV6eiBib290IHBhcmFtZXRlcnMsIGJ1dCB0aGF0J3Mgbm90IGl0cyBwcmltYXJ5IGZvY3VzLCBhbmQgaXQgdHlwaWNhbGx5IGRvZXNuJ3QgcmVib290IGZvciBlYWNoIHRlc3QgY2FzZSB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkLlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgcG9wcyB1cDogaXMgdGhpcyBjb2RlIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IEl0J3MgbWFya2VkIGFzIGBfX2luaXRgLCBtZWFuaW5nIGl0J3Mgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgdGhlbiBmcmVlZC4gQm90aCBgbW91bnRfcm9vdF9pbWFnZWAgYW5kIGB2ZXJpZnlfcm9vdF9pbWFnZWAgYXJlIGBfX2luaXRgLiBUaGlzIG1lYW5zIGl0IGNhbm5vdCBiZSByZWFjaGVkIGJ5IHN5emthbGxlcidzICpub3JtYWwqIGZ1enppbmcgcHJvY2VkdXJlLCB3aGljaCBvcGVyYXRlcyBwb3N0LWJvb3QuIFN5emthbGxlcidzIGZ1enppbmcgaXMgYmFzZWQgb24gc3lzY2FsbHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGxvbmcgZ29uZSBieSB0aGVuLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIFN5emthbGxlcidzIGNvbW1hbmQgbGluZSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhleSBhcmUgbGltaXRlZCBhbmQgbm90IHRoZSB1c3VhbCBtb2RlIG9mIG9wZXJhdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGBfX2luaXRgIGNvZGUgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblNvLCBzaW5jZSB0aGUgY29kZSBydW5zIG9ubHkgZHVyaW5nIGJvb3QsIGFuZCBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZnV6eiB0aGlzIHBhcnQsIHRoaXMgaXNuJ3QgZnV6emFibGUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCdzIGNvZGUgdGhhdCBydW5zIG9uY2UgYW5kIGlzIHRoZW4gZGlzY2FyZGVkLCBvdXRzaWRlIHRoZSBzY29wZSBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcuIFNpbmNlIGBwcmVwYXJlX25hbWVzcGFjZWAgaXMgY2FsbGVkIGZyb20gYGtlcm5lbF9pbml0X2ZyZWVhYmxlYCwgd2hpY2ggaXMgYF9faW5pdGAgdG9vLCBpdCBmdXJ0aGVyIHZhbGlkYXRlcyBteSBjb25jbHVzaW9uLiBgbW91bnRfcm9vdF9pbWFnZWAsIGB2ZXJpZnlfcm9vdF9pbWFnZWAsIGBzcGxpdF9mc19uYW1lc2AgYW5kIGBkb19tb3VudF9yb290YCBhcmUgYWxsIGFsc28gYF9faW5pdGAuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgYXNzZXNzbWVudCBpczpcblxuV29ydGhGdXp6aW5nOiBmYWxzZVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhjbHVzaXZlbHkgYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgX19pbml0ZGF0YWAgdmFyaWFibGVzIGluIGBpbml0L2RvX21vdW50cy5jYCB0byBlbmFibGUgYm9vdGluZyBmcm9tIGEgcm9vdCBpbWFnZSBmaWxlLiBUaGlzIGNvZGUgZXhlY3V0ZXMgb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IGFuZCBpcyBmcmVlZCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0IGNhbm5vdCBiZSBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscyBhZnRlciBib290LlxuXG5Gb2N1c1N5bWJvbHM6IFtdXG5FbmFibGVDb25maWdzOiBbXVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQwLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE5OjUwOjEzLjg5MDM2MTAyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowl9dkz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 19:26:30 +0000 UTC FinishedAt: 2026-07-18 19:50:15 +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+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyBhbmQgX19pbml0ZGF0YSB2YXJpYWJsZXMgaW4gaW5pdC9kb19tb3VudHMuYyB0byBzdXBwb3J0IG5ldyBib290IHBhcmFtZXRlcnMgKHJvb3RpbWFnZT0sIGV0Yy4pLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBib290LCBiZWZvcmUgdGhlIGZ1enplciBzdGFydHMsIGFuZCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCB2aWEgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzNTJmZTQ0NWJlOTMyMTVkNmNkY2MzNDA3Yjg0YzIyMjM3ZDNmZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAxOTo0OTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTA1ZWJiMTcxOGJiM2UgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC02Njk5LDYgJiM0Mzs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHRyb290ZnN0eXBlPVx0W0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSB0eXBlXG4gXG4mIzQzO1x0cm9vdGltYWdlPVx0W0tOTF0gTW91bnQgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSB0aGlzXG4mIzQzO1x0XHRcdGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZSAoYWJzb2x1dGUgcGF0aCkgbG9jYXRlZCBvbiB0aGVcbiYjNDM7XHRcdFx0ZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0sIGluc3RlYWQgb2YgdXNpbmcgdGhhdFxuJiM0MztcdFx0XHRmaWxlc3lzdGVtIGFzIHRoZSByb290IGRpcmVjdGx5LiAgVGhpcyBhbGxvd3NcbiYjNDM7XHRcdFx0aW1hZ2UtYmFzZWQgc3lzdGVtcyB0aGF0IGtlZXAgdGhlaXIgKHR5cGljYWxseVxuJiM0MztcdFx0XHRyZWFkLW9ubHksIGUuZy4gZXJvZnMpIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgYXNcbiYjNDM7XHRcdFx0cGxhaW4gZmlsZXMgb24gYSBjYXJyaWVyIGZpbGVzeXN0ZW0gdG8gYm9vdCB3aXRob3V0XG4mIzQzO1x0XHRcdGFuIGluaXRyYW1mcy4gIFRoZSBpbWFnZSBpcyBtb3VudGVkIHJlYWQtb25seSB2aWFcbiYjNDM7XHRcdFx0dGhlIGZpbGVzeXN0ZW0mIzM5O3MgZmlsZS1iYWNrZWQgbW91bnQgc3VwcG9ydCAobm8gbG9vcFxuJiM0MztcdFx0XHRkZXZpY2UgaXMgc2V0IHVwKTsgXCYjMzQ7cm9cJiMzNDssIFwmIzM0O3J3XCYjMzQ7IGFuZCByb290ZmxhZ3M9IGtlZXBcbiYjNDM7XHRcdFx0YXBwbHlpbmcgdG8gdGhlIGNhcnJpZXIgZmlsZXN5c3RlbS4gIE9uY2UgdGhlIGltYWdlXG4mIzQzO1x0XHRcdGlzIG1vdW50ZWQsIHRoZSBjYXJyaWVyIG1vdW50IGlzIGRldGFjaGVkIChidXQga2VwdFxuJiM0MztcdFx0XHRidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzc1xuJiM0MztcdFx0XHRyb290aW1hZ2VzcmNkaXI9IGlzIGFsc28gZ2l2ZW4uXG4mIzQzO1xuJiM0MztcdHJvb3RpbWFnZWZsYWdzPVx0W0tOTF0gU2V0IHJvb3QgaW1hZ2UgZmlsZXN5c3RlbSBtb3VudCBvcHRpb24gc3RyaW5nLFxuJiM0MztcdFx0XHR1c2VkIHRvZ2V0aGVyIHdpdGggcm9vdGltYWdlPS5cbiYjNDM7XG4mIzQzO1x0cm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXJcbiYjNDM7XHRcdFx0d2l0aCByb290aW1hZ2U9LiAgRGVmYXVsdCBpcyB0byB0cnkgYWxsIGZpbGVzeXN0ZW1zXG4mIzQzO1x0XHRcdGtub3duIHRvIHRoZSBrZXJuZWwgdGhhdCBjYW4gbW91bnQgYSBibG9jayBkZXZpY2Ugb3JcbiYjNDM7XHRcdFx0YW4gaW1hZ2UgZmlsZS5cbiYjNDM7XG4mIzQzO1x0cm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdFxuJiM0MztcdFx0XHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxuJiM0MztcdFx0XHRob2xkaW5nIHRoZSBpbWFnZSAoaS5lLiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnlcbiYjNDM7XHRcdFx0cm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWRcbiYjNDM7XHRcdFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuJiM0MztcbiYjNDM7XHRyb290aW1hZ2V2ZXJpdHk9IFtLTkxdIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2Ugc3BlY2lmaWVkIGJ5XG4mIzQzO1x0XHRcdHJvb3RpbWFnZT0gdG8gaGF2ZSBmc3Zlcml0eSBlbmFibGVkIHdpdGggdGhpcyBmaWxlXG4mIzQzO1x0XHRcdGRpZ2VzdCwgZ2l2ZW4gYXMgXHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZSxcbiYjNDM7XHRcdFx0ZS5nLiBzaGEyNTY6ZGQxYjNmYTkuLi4gIFRoZSBib290IGlzIGFib3J0ZWQgaWYgdGhlXG4mIzQzO1x0XHRcdGltYWdlIGNhcnJpZXMgbm8gb3IgYSBkaWZmZXJlbnQgZnN2ZXJpdHkgZGlnZXN0LlxuJiM0MztcdFx0XHRCZWNhdXNlIGZzdmVyaXR5IGtlZXBzIHZlcmlmeWluZyBkYXRhIHJlYWQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0aW1hZ2UgYWdhaW5zdCBpdHMgTWVya2xlIHRyZWUgYXQgcnVudGltZSwgYSB0cnVzdGVkXG4mIzQzO1x0XHRcdChlLmcuIHNpZ25lZCBvciBUUE0tbWVhc3VyZWQpIGtlcm5lbCBjb21tYW5kIGxpbmVcbiYjNDM7XHRcdFx0ZXh0ZW5kcyB0aGUgY2hhaW4gb2YgdHJ1c3QgdG8gdGhlIGNvbXBsZXRlIHJvb3RcbiYjNDM7XHRcdFx0ZmlsZXN5c3RlbSBjb250ZW50cyB3aXRob3V0IGFuIGluaXRyYW1mcy4gIFJlcXVpcmVzXG4mIzQzO1x0XHRcdENPTkZJR19GU19WRVJJVFkgYW5kIGEgY2FycmllciBmaWxlc3lzdGVtIHdpdGhcbiYjNDM7XHRcdFx0ZnN2ZXJpdHkgc3VwcG9ydC5cbiYjNDM7XG4gXHRyb290d2FpdFx0W0tOTF0gV2FpdCAoaW5kZWZpbml0ZWx5KSBmb3Igcm9vdCBkZXZpY2UgdG8gc2hvdyB1cC5cbiBcdFx0XHRVc2VmdWwgZm9yIGRldmljZXMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHlcbiBcdFx0XHQoZS5nLiBVU0IgYW5kIE1NQyBkZXZpY2VzKS5cbmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuY1xuaW5kZXggOTVlMGIzYTBmNzExYmQuLjRlYjc5MmIyNzcwODZkIDEwMDY0NFxuLS0tIGEvaW5pdC9kb19tb3VudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9kb19tb3VudHMuY1xuQEAgLTI0LDYgJiM0MzsyNCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmZzX2ZzX3NiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZnNfbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhaWQvZGV0ZWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9oZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NjcnlwdG8vaGFzaF9pbmZvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21vdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtkb19tb3VudHMuaFwmIzM0O1xuQEAgLTEyMiwxMyAmIzQzOzEyNSw1OSBAQCBfX3NldHVwKFwmIzM0O3Jvb3RmbGFncz1cJiMzNDssIHJvb3RfZGF0YV9zZXR1cCk7XG4gX19zZXR1cChcJiMzNDtyb290ZnN0eXBlPVwmIzM0OywgZnNfbmFtZXNfc2V0dXApO1xuIF9fc2V0dXAoXCYjMzQ7cm9vdGRlbGF5PVwmIzM0Oywgcm9vdF9kZWxheV9zZXR1cCk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIHJvb3RpbWFnZT0gbW91bnRzIHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gYW4gaW1hZ2UgZmlsZSBsb2NhdGVkXG4mIzQzOyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxuJiM0MzsgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJvb3RfaW1hZ2UgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX2ZzX25hbWVzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX21vdW50X2RhdGE7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpXG4mIzQzO3tcbiYjNDM7XHRyb290X2ltYWdlX21vdW50X2RhdGEgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0cm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3Zlcml0eTtcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV92ZXJpdHlfc2V0dXAoY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0cm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlPVwmIzM0Oywgcm9vdF9pbWFnZV9zZXR1cCk7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlZnN0eXBlPVwmIzM0Oywgcm9vdF9pbWFnZV9mc19uYW1lc19zZXR1cCk7XG4mIzQzO19fc2V0dXAoXCYjMzQ7cm9vdGltYWdlZmxhZ3M9XCYjMzQ7LCByb290X2ltYWdlX2RhdGFfc2V0dXApO1xuJiM0MztfX3NldHVwKFwmIzM0O3Jvb3RpbWFnZXNyY2Rpcj1cJiMzNDssIHJvb3RfaW1hZ2Vfc3JjZGlyX3NldHVwKTtcbiYjNDM7X19zZXR1cChcJiMzNDtyb290aW1hZ2V2ZXJpdHk9XCYjMzQ7LCByb290X2ltYWdlX3Zlcml0eV9zZXR1cCk7XG4mIzQzO1xuIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovXG4tc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplLCBjaGFyICpuYW1lcylcbiB7XG4gXHRpbnQgY291bnQgPSAxO1xuIFx0Y2hhciAqcCA9IHBhZ2U7XG4gXG4tXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xuJiM0MztcdHN0cnNjcHkocCwgbmFtZXMsIHNpemUpO1xuIFx0d2hpbGUgKCpwJiM0MzsmIzQzOykge1xuIFx0XHRpZiAocFstMV0gPT0gJiMzOTssJiMzOTspIHtcbiBcdFx0XHRwWy0xXSA9ICYjMzk7XFwwJiMzOTs7XG5AQCAtMTM5LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSlcbiBcdHJldHVybiBjb3VudDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmcyxcbi1cdFx0XHRcdCBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IHZvaWQgKmRhdGEpXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyLFxuJiM0MztcdFx0XHRcdCBjb25zdCBjaGFyICpmcywgY29uc3QgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdCBjb25zdCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqcztcbiBcdGNoYXIgKmRhdGFfcGFnZSA9IE5VTEw7XG5AQCAtMTU0LDExICYjNDM7MjA0LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4gXHRcdHN0cnNjcHlfcGFkKGRhdGFfcGFnZSwgZGF0YSwgUEFHRV9TSVpFKTtcbiBcdH1cbiBcbi1cdHJldCA9IGluaXRfbW91bnQobmFtZSwgXCYjMzQ7L3Jvb3RcJiMzNDssIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcbiYjNDM7XHRyZXQgPSBpbml0X21vdW50KG5hbWUsIGRpciwgZnMsIGZsYWdzLCBkYXRhX3BhZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpbml0X2NoZGlyKFwmIzM0Oy9yb290XCYjMzQ7KTtcbiYjNDM7XHRpbml0X2NoZGlyKGRpcik7XG4gXHRzID0gY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vwd2QuZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRST09UX0RFViA9IHMtXHUwMDNlc19kZXY7XG4gXHRwcmludGsoS0VSTl9JTkZPXG5AQCAtMTg1LDcgJiM0MzsyMzUsNyBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290X2dlbmVyaWMoY2hhciAqbmFtZSwgY2hhciAqcHJldHR5X25hbWUsIGludCBmbGFncylcbiBcdHNjbnByaW50ZihiLCBCREVWTkFNRV9TSVpFLCBcJiMzNDt1bmtub3duLWJsb2NrKCV1LCV1KVwmIzM0OyxcbiBcdFx0ICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7XG4gXHRpZiAocm9vdF9mc19uYW1lcylcbi1cdFx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcbiBcdGVsc2VcbiBcdFx0bnVtX2ZzID0gbGlzdF9iZGV2X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xuIHJldHJ5OlxuQEAgLTE5NCw3ICYjNDM7MjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXG4gXG4gXHRcdGlmICghKnApXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGVyciA9IGRvX21vdW50X3Jvb3QobmFtZSwgcCwgZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4mIzQzO1x0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIFwmIzM0Oy9yb290XCYjMzQ7LCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0XHRjYXNlIDA6XG4gXHRcdFx0XHRnb3RvIG91dDtcbkBAIC0yNjYsNyAmIzQzOzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxuIFx0ICovXG4gXHR0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjtcbiBcdGZvciAodHJ5ID0gMTsgOyB0cnkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCYjMzQ7bmZzXCYjMzQ7LCByb290X21vdW50ZmxhZ3MsIHJvb3RfZGF0YSkpXG4mIzQzO1x0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwmIzM0Oy9yb290XCYjMzQ7LCBcJiMzNDtuZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiYjNDM7XHRcdFx0XHQgICByb290X2RhdGEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHRyeSBcdTAwM2UgTkZTUk9PVF9SRVRSWV9NQVgpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMzAzLDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfY2lmc19yb290KHZvaWQpXG4gXG4gXHR0aW1lb3V0ID0gQ0lGU1JPT1RfVElNRU9VVF9NSU47XG4gXHRmb3IgKHRyeSA9IDE7IDsgdHJ5JiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwmIzM0O2NpZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiYjNDM7XHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCYjMzQ7L3Jvb3RcJiMzNDssIFwmIzM0O2NpZnNcJiMzNDssIHJvb3RfbW91bnRmbGFncyxcbiBcdFx0XHRcdCAgIHJvb3RfZGF0YSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRpZiAodHJ5IFx1MDAzZSBDSUZTUk9PVF9SRVRSWV9NQVgpXG5AQCAtMzQ1LDcgJiM0MzszOTYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZnNfbmFtZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4mIzQzO1x0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwgcm9vdF9mc19uYW1lcyk7XG4gXG4gXHRmb3IgKGkgPSAwLCBmc3R5cGUgPSBmc19uYW1lczsgaSBcdTAwM2MgbnVtX2ZzO1xuIFx0ICAgICBpJiM0MzsmIzQzOywgZnN0eXBlICYjNDM7PSBzdHJsZW4oZnN0eXBlKSAmIzQzOyAxKSB7XG5AQCAtMzUzLDggJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghZnNfaXNfbm9kZXYoZnN0eXBlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcbi1cdFx0XHRcdCAgICByb290X21vdW50X2RhdGEpO1xuJiM0MztcdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBcJiMzNDsvcm9vdFwmIzM0OywgZnN0eXBlLFxuJiM0MztcdFx0XHRcdCAgICByb290X21vdW50ZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQwMiw2ICYjNDM7NDUzLDE0OCBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHR9XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MzsvKlxuJiM0MzsgKiBSZXF1aXJlIHRoZSByb290IGltYWdlIHRvIGNhcnJ5IHRoZSBmc3Zlcml0eSBmaWxlIGRpZ2VzdCBnaXZlbiBieVxuJiM0MzsgKiByb290aW1hZ2V2ZXJpdHk9XHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXG4mIzQzOyAqIG9wZW5lZCBzbyB0aGF0IGl0cyBmc3Zlcml0eSBpbmZvcm1hdGlvbiBpcyBsb2FkZWQuICBBbnkgZGV2aWF0aW9uXG4mIzQzOyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZVxuJiM0MzsgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJiMzOTtzXG4mIzQzOyAqIE1lcmtsZSB0cmVlIGFzIHRoZXkgYXJlIHJlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XG4mIzQzO1x0ZW51bSBoYXNoX2FsZ28gd2FudF9hbGdvLCBnb3RfYWxnbztcbiYjNDM7XHRpbnQgd2FudF9zaXplLCBnb3Rfc2l6ZSwgaTtcbiYjNDM7XHRjaGFyICpoZXg7XG4mIzQzO1xuJiM0MztcdGhleCA9IHN0cmNocihyb290X2ltYWdlX3Zlcml0eSwgJiMzOTs6JiMzOTspO1xuJiM0MztcdGlmICghaGV4KVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290aW1hZ2V2ZXJpdHk9IGV4cGVjdHMgXHUwMDNjYWxnb3JpdGhtXHUwMDNlOlx1MDAzY2hleCBkaWdlc3RcdTAwM2VcJiMzNDspO1xuJiM0MztcdCpoZXgmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRpID0gbWF0Y2hfc3RyaW5nKGhhc2hfYWxnb19uYW1lLCBIQVNIX0FMR09fX0xBU1QsIHJvb3RfaW1hZ2VfdmVyaXR5KTtcbiYjNDM7XHRpZiAoaSBcdTAwM2MgMClcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PTogdW5rbm93biBoYXNoIGFsZ29yaXRobSBcXFwmIzM0OyVzXFxcJiMzNDtcJiMzNDssXG4mIzQzO1x0XHQgICAgICByb290X2ltYWdlX3Zlcml0eSk7XG4mIzQzO1x0d2FudF9hbGdvID0gaTtcbiYjNDM7XHR3YW50X3NpemUgPSBoYXNoX2RpZ2VzdF9zaXplW3dhbnRfYWxnb107XG4mIzQzO1x0aWYgKHN0cmxlbihoZXgpICE9IDIgKiB3YW50X3NpemUgfHwgaGV4MmJpbih3YW50LCBoZXgsIHdhbnRfc2l6ZSkpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT06IGV4cGVjdGVkICVkLWJ5dGUgaGV4IGRpZ2VzdFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIHdhbnRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsIFx1MDAyNmdvdF9hbGdvKTtcbiYjNDM7XHRpZiAoIWdvdF9zaXplKVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290IGltYWdlIGRvZXMgbm90IGhhdmUgZnN2ZXJpdHkgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKGdvdF9hbGdvICE9IHdhbnRfYWxnbyB8fCBnb3Rfc2l6ZSAhPSB3YW50X3NpemUgfHxcbiYjNDM7XHQgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgbWlzbWF0Y2g6IGV4cGVjdGVkICVzOiUqcGhOLCBnb3QgJXM6JSpwaE5cJiMzNDssXG4mIzQzO1x0XHQgICAgICBoYXNoX2FsZ29fbmFtZVt3YW50X2FsZ29dLCB3YW50X3NpemUsIHdhbnQsXG4mIzQzO1x0XHQgICAgICBoYXNoX2FsZ29fbmFtZVtnb3RfYWxnb10sIGdvdF9zaXplLCBnb3QpO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1ZGUzogdmVyaWZpZWQgcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgJXM6JSpwaE5cXG5cJiMzNDssXG4mIzQzO1x0XHRoYXNoX2FsZ29fbmFtZVt3YW50X2FsZ29dLCB3YW50X3NpemUsIHdhbnQpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlIC8qICFDT05GSUdfRlNfVkVSSVRZICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHBhbmljKFwmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogIUNPTkZJR19GU19WRVJJVFkgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhlIGltYWdlIGZpbGUgcm9vdGltYWdlPSBvbiB0aGVcbiYjNDM7ICogZmlsZXN5c3RlbSB0aGF0IHdhcyBqdXN0IG1vdW50ZWQgZnJvbSByb290PSAodGhlIFwmIzM0O2NhcnJpZXJcJiMzNDspLCBzbyB0aGF0XG4mIzQzOyAqIGltYWdlLWJhc2VkIHN5c3RlbXMgY2FuIGJvb3Qgd2l0aG91dCBhbiBpbml0cmFtZnMuXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2VcbiYjNDM7ICogaXMgYWx3YXlzIG1vdW50ZWQgcmVhZC1vbmx5OyBcJiMzNDtyb1wmIzM0Oy9cJiMzNDtyd1wmIzM0Oy9yb290ZmxhZ3M9IGtlZXAgYXBwbHlpbmcgdG8gdGhlXG4mIzQzOyAqIGNhcnJpZXIuICBPbiBzdWNjZXNzIHRoZSBjd2QgaXMgdGhlIGltYWdlJiMzOTtzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3RcbiYjNDM7ICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cbiYjNDM7ICogaW5zaWRlIHRoZSBpbWFnZSBpZiBzZXQsIGFuZCBkZXRhY2hlZCBvdGhlcndpc2U7IGVpdGhlciB3YXkgdGhlIGltYWdlXG4mIzQzOyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfaW1hZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBNU19SRE9OTFkgfCBNU19TSUxFTlQ7XG4mIzQzO1x0Y2hhciAqcGF0aCwgKmZzX25hbWVzLCAqcDtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiYjNDM7XHRpbnQgbnVtX2ZzLCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBhdGggPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBhdGggfHwgIWZzX25hbWVzKVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZTogbm90IGVub3VnaCBtZW1vcnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwmIzM0Oy9yb290JXNcJiMzNDssIHJvb3RfaW1hZ2UpIFx1MDAzZT0gUEFUSF9NQVgpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXG4mIzQzO1x0ICogY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHRoaXMgb3BlbiBhbmQgdGhlIG1vdW50IGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihmaWxlKSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O1ZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgcm9vdF9pbWFnZSwgUFRSX0VSUihmaWxlKSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlX3Zlcml0eSlcbiYjNDM7XHRcdHZlcmlmeV9yb290X2ltYWdlKGZpbGUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpbml0X21rZGlyKFwmIzM0Oy9pbWFnZVwmIzM0OywgMDcwMCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtWRlM6IHVuYWJsZSB0byBjcmVhdGUgL2ltYWdlOiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJvb3RfaW1hZ2VfZnNfbmFtZXMpXG4mIzQzO1x0XHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdFx0cm9vdF9pbWFnZV9mc19uYW1lcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bnVtX2ZzID0gbGlzdF9iZGV2X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXHUwMDNjIG51bV9mczsgaSYjNDM7JiM0MzssIHAgJiM0Mzs9IHN0cmxlbihwKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRpZiAoISpwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGVyciA9IGRvX21vdW50X3Jvb3QocGF0aCwgXCYjMzQ7L2ltYWdlXCYjMzQ7LCBwLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgcm9vdF9pbWFnZV9tb3VudF9kYXRhKTtcbiYjNDM7XHRcdHN3aXRjaCAoZXJyKSB7XG4mIzQzO1x0XHRjYXNlIDA6XG4mIzQzO1x0XHRcdGdvdG8gbW91bnRlZDtcbiYjNDM7XHRcdGNhc2UgLUVBQ0NFUzpcbiYjNDM7XHRcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRcdGNhc2UgLUVOT1RCTEs6XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGFuaWMoXCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZSAlczogZXJyb3IgJWRcJiMzNDssXG4mIzQzO1x0XHQgICAgICByb290X2ltYWdlLCBlcnIpO1xuJiM0MztcdH1cbiYjNDM7XHRwYW5pYyhcJiMzNDtWRlM6IG5vIGZpbGVzeXN0ZW0gY291bGQgbW91bnQgcm9vdCBpbWFnZSAlc1wmIzM0Oywgcm9vdF9pbWFnZSk7XG4mIzQzO1xuJiM0Mzttb3VudGVkOlxuJiM0MztcdGZwdXQoZmlsZSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb290X2ltYWdlX3NyY2Rpcikge1xuJiM0MztcdFx0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCYjMzQ7LiVzXCYjMzQ7LCByb290X2ltYWdlX3NyY2RpcikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIFBBVEhfTUFYKVxuJiM0MztcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gcGF0aCB0b28gbG9uZ1wmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSBpbml0X21vdW50KFwmIzM0Oy9yb290XCYjMzQ7LCBwYXRoLCBOVUxMLCBNU19NT1ZFLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtWRlM6IGZhaWxlZCB0byBtb3ZlIHRoZSByb290IGltYWdlJiMzOTtzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGluaXRfdW1vdW50KFwmIzM0Oy9yb290XCYjMzQ7LCBNTlRfREVUQUNIKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocGF0aCk7XG4mIzQzO1x0a2ZyZWUoZnNfbmFtZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHdhaXQgZm9yIGFueSBhc3luY2hyb25vdXMgc2Nhbm5pbmcgdG8gY29tcGxldGUgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgd2FpdF9mb3Jfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxuIHtcbkBAIC00ODEsNiAmIzQzOzY3NCw4IEBAIHZvaWQgX19pbml0IHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpXG4gXHRpZiAocm9vdF93YWl0KVxuIFx0XHR3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4gXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4mIzQzO1x0aWYgKHJvb3RfaW1hZ2UpXG4mIzQzO1x0XHRtb3VudF9yb290X2ltYWdlKCk7XG4gXHRkZXZ0bXBmc19tb3VudCgpO1xuIFxuIFx0aWYgKGluaXRfcGl2b3Rfcm9vdChcJiMzNDsuXCYjMzQ7LCBcJiMzNDsuXCYjMzQ7KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyBhbmQgX19pbml0ZGF0YSB2YXJpYWJsZXMgaW4gaW5pdC9kb19tb3VudHMuYyB0byBzdXBwb3J0IG5ldyBib290IHBhcmFtZXRlcnMgKHJvb3RpbWFnZT0sIGV0Yy4pLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYXJseSBib290LCBiZWZvcmUgdGhlIGZ1enplciBzdGFydHMsIGFuZCBpcyBzdWJzZXF1ZW50bHkgZnJlZWQuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIGZ1enplZCB2aWEgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTM1MmZlNDQ1YmU5MzIxNWQ2Y2RjYzM0MDdiODRjMjIyMzdkM2ZkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDE4IDE5OjQ5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNTQ5M2E3ZjhmMjI4MS4uMTA1ZWJiMTcxOGJiM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC02Njk5LDYgJiM0Mzs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzCiAKIAlyb290ZnN0eXBlPQlbS05MXSBTZXQgcm9vdCBmaWxlc3lzdGVtIHR5cGUKIAomIzQzOwlyb290aW1hZ2U9CVtLTkxdIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhpcwomIzQzOwkJCWZpbGVzeXN0ZW0gaW1hZ2UgZmlsZSAoYWJzb2x1dGUgcGF0aCkgbG9jYXRlZCBvbiB0aGUKJiM0MzsJCQlmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSwgaW5zdGVhZCBvZiB1c2luZyB0aGF0CiYjNDM7CQkJZmlsZXN5c3RlbSBhcyB0aGUgcm9vdCBkaXJlY3RseS4gIFRoaXMgYWxsb3dzCiYjNDM7CQkJaW1hZ2UtYmFzZWQgc3lzdGVtcyB0aGF0IGtlZXAgdGhlaXIgKHR5cGljYWxseQomIzQzOwkJCXJlYWQtb25seSwgZS5nLiBlcm9mcykgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhcwomIzQzOwkJCXBsYWluIGZpbGVzIG9uIGEgY2FycmllciBmaWxlc3lzdGVtIHRvIGJvb3Qgd2l0aG91dAomIzQzOwkJCWFuIGluaXRyYW1mcy4gIFRoZSBpbWFnZSBpcyBtb3VudGVkIHJlYWQtb25seSB2aWEKJiM0MzsJCQl0aGUgZmlsZXN5c3RlbSYjMzk7cyBmaWxlLWJhY2tlZCBtb3VudCBzdXBwb3J0IChubyBsb29wCiYjNDM7CQkJZGV2aWNlIGlzIHNldCB1cCk7ICYjMzQ7cm8mIzM0OywgJiMzNDtydyYjMzQ7IGFuZCByb290ZmxhZ3M9IGtlZXAKJiM0MzsJCQlhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2UKJiM0MzsJCQlpcyBtb3VudGVkLCB0aGUgY2FycmllciBtb3VudCBpcyBkZXRhY2hlZCAoYnV0IGtlcHQKJiM0MzsJCQlidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzcwomIzQzOwkJCXJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi4KJiM0MzsKJiM0MzsJcm9vdGltYWdlZmxhZ3M9CVtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gbW91bnQgb3B0aW9uIHN0cmluZywKJiM0MzsJCQl1c2VkIHRvZ2V0aGVyIHdpdGggcm9vdGltYWdlPS4KJiM0MzsKJiM0MzsJcm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXIKJiM0MzsJCQl3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXMKJiM0MzsJCQlrbm93biB0byB0aGUga2VybmVsIHRoYXQgY2FuIG1vdW50IGEgYmxvY2sgZGV2aWNlIG9yCiYjNDM7CQkJYW4gaW1hZ2UgZmlsZS4KJiM0MzsKJiM0MzsJcm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdAomIzQzOwkJCWltYWdlIHdoZXJlIHRoZSBtb3VudCBvZiB0aGUgY2FycmllciBmaWxlc3lzdGVtCiYjNDM7CQkJaG9sZGluZyB0aGUgaW1hZ2UgKGkuZS4gdGhlIGZpbGVzeXN0ZW0gc3BlY2lmaWVkIGJ5CiYjNDM7CQkJcm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWQKJiM0MzsJCQl0b2dldGhlciB3aXRoIHJvb3RpbWFnZT0uCiYjNDM7CiYjNDM7CXJvb3RpbWFnZXZlcml0eT0gW0tOTF0gUmVxdWlyZSB0aGUgcm9vdCBpbWFnZSBzcGVjaWZpZWQgYnkKJiM0MzsJCQlyb290aW1hZ2U9IHRvIGhhdmUgZnN2ZXJpdHkgZW5hYmxlZCB3aXRoIHRoaXMgZmlsZQomIzQzOwkJCWRpZ2VzdCwgZ2l2ZW4gYXMgJmx0O2hhc2ggYWxnb3JpdGhtJmd0OzombHQ7aGV4IGRpZ2VzdCZndDssCiYjNDM7CQkJZS5nLiBzaGEyNTY6ZGQxYjNmYTkuLi4gIFRoZSBib290IGlzIGFib3J0ZWQgaWYgdGhlCiYjNDM7CQkJaW1hZ2UgY2FycmllcyBubyBvciBhIGRpZmZlcmVudCBmc3Zlcml0eSBkaWdlc3QuCiYjNDM7CQkJQmVjYXVzZSBmc3Zlcml0eSBrZWVwcyB2ZXJpZnlpbmcgZGF0YSByZWFkIGZyb20gdGhlCiYjNDM7CQkJaW1hZ2UgYWdhaW5zdCBpdHMgTWVya2xlIHRyZWUgYXQgcnVudGltZSwgYSB0cnVzdGVkCiYjNDM7CQkJKGUuZy4gc2lnbmVkIG9yIFRQTS1tZWFzdXJlZCkga2VybmVsIGNvbW1hbmQgbGluZQomIzQzOwkJCWV4dGVuZHMgdGhlIGNoYWluIG9mIHRydXN0IHRvIHRoZSBjb21wbGV0ZSByb290CiYjNDM7CQkJZmlsZXN5c3RlbSBjb250ZW50cyB3aXRob3V0IGFuIGluaXRyYW1mcy4gIFJlcXVpcmVzCiYjNDM7CQkJQ09ORklHX0ZTX1ZFUklUWSBhbmQgYSBjYXJyaWVyIGZpbGVzeXN0ZW0gd2l0aAomIzQzOwkJCWZzdmVyaXR5IHN1cHBvcnQuCiYjNDM7CiAJcm9vdHdhaXQJW0tOTF0gV2FpdCAoaW5kZWZpbml0ZWx5KSBmb3Igcm9vdCBkZXZpY2UgdG8gc2hvdyB1cC4KIAkJCVVzZWZ1bCBmb3IgZGV2aWNlcyB0aGF0IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseQogCQkJKGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCA5NWUwYjNhMGY3MTFiZC4uNGViNzkyYjI3NzA4NmQgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9kb19tb3VudHMuYwpAQCAtMjQsNiAmIzQzOzI0LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZnNfZnNfc2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZnNfbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYWlkL2RldGVjdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2hhc2hfaW5mby5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbW91bnQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtkb19tb3VudHMuaCYjMzQ7CkBAIC0xMjIsMTMgJiM0MzsxMjUsNTkgQEAgX19zZXR1cCgmIzM0O3Jvb3RmbGFncz0mIzM0Oywgcm9vdF9kYXRhX3NldHVwKTsKIF9fc2V0dXAoJiMzNDtyb290ZnN0eXBlPSYjMzQ7LCBmc19uYW1lc19zZXR1cCk7CiBfX3NldHVwKCYjMzQ7cm9vdGRlbGF5PSYjMzQ7LCByb290X2RlbGF5X3NldHVwKTsKIAomIzQzOy8qCiYjNDM7ICogcm9vdGltYWdlPSBtb3VudHMgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSBhbiBpbWFnZSBmaWxlIGxvY2F0ZWQKJiM0MzsgKiBvbiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0gaW5zdGVhZCBvZiB1c2luZyB0aGF0IGZpbGVzeXN0ZW0KJiM0MzsgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZTsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CXJvb3RfaW1hZ2UgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9mc19uYW1lczsKJiM0MztzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CXJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpCiYjNDM7ewomIzQzOwlyb290X2ltYWdlX21vdW50X2RhdGEgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9zcmNkaXI7CiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV92ZXJpdHk7CiYjNDM7c3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV92ZXJpdHlfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlPSYjMzQ7LCByb290X2ltYWdlX3NldHVwKTsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlZnN0eXBlPSYjMzQ7LCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTsKJiM0MztfX3NldHVwKCYjMzQ7cm9vdGltYWdlZmxhZ3M9JiMzNDssIHJvb3RfaW1hZ2VfZGF0YV9zZXR1cCk7CiYjNDM7X19zZXR1cCgmIzM0O3Jvb3RpbWFnZXNyY2Rpcj0mIzM0Oywgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXApOwomIzQzO19fc2V0dXAoJiMzNDtyb290aW1hZ2V2ZXJpdHk9JiMzNDssIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTsKJiM0MzsKIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovCi1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSwgY2hhciAqbmFtZXMpCiB7CiAJaW50IGNvdW50ID0gMTsKIAljaGFyICpwID0gcGFnZTsKIAotCXN0cnNjcHkocCwgcm9vdF9mc19uYW1lcywgc2l6ZSk7CiYjNDM7CXN0cnNjcHkocCwgbmFtZXMsIHNpemUpOwogCXdoaWxlICgqcCYjNDM7JiM0MzspIHsKIAkJaWYgKHBbLTFdID09ICYjMzk7LCYjMzk7KSB7CiAJCQlwWy0xXSA9ICYjMzk7XDAmIzM5OzsKQEAgLTEzOSw4ICYjNDM7MTg4LDkgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLAotCQkJCSBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7c3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkaXIsCiYjNDM7CQkJCSBjb25zdCBjaGFyICpmcywgY29uc3QgaW50IGZsYWdzLAomIzQzOwkJCQkgY29uc3Qgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CiAJY2hhciAqZGF0YV9wYWdlID0gTlVMTDsKQEAgLTE1NCwxMSAmIzQzOzIwNCwxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLAogCQlzdHJzY3B5X3BhZChkYXRhX3BhZ2UsIGRhdGEsIFBBR0VfU0laRSk7CiAJfQogCi0JcmV0ID0gaW5pdF9tb3VudChuYW1lLCAmIzM0Oy9yb290JiMzNDssIGZzLCBmbGFncywgZGF0YV9wYWdlKTsKJiM0MzsJcmV0ID0gaW5pdF9tb3VudChuYW1lLCBkaXIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWluaXRfY2hkaXIoJiMzNDsvcm9vdCYjMzQ7KTsKJiM0MzsJaW5pdF9jaGRpcihkaXIpOwogCXMgPSBjdXJyZW50LSZndDtmcy0mZ3Q7cHdkLmRlbnRyeS0mZ3Q7ZF9zYjsKIAlST09UX0RFViA9IHMtJmd0O3NfZGV2OwogCXByaW50ayhLRVJOX0lORk8KQEAgLTE4NSw3ICYjNDM7MjM1LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpCiAJc2NucHJpbnRmKGIsIEJERVZOQU1FX1NJWkUsICYjMzQ7dW5rbm93bi1ibG9jaygldSwldSkmIzM0OywKIAkJICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7CiAJaWYgKHJvb3RfZnNfbmFtZXMpCi0JCW51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpOwomIzQzOwkJbnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwgcm9vdF9mc19uYW1lcyk7CiAJZWxzZQogCQludW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7CiByZXRyeToKQEAgLTE5NCw3ICYjNDM7MjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpCiAKIAkJaWYgKCEqcCkKIAkJCWNvbnRpbnVlOwotCQllcnIgPSBkb19tb3VudF9yb290KG5hbWUsIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpOwomIzQzOwkJZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCAmIzM0Oy9yb290JiMzNDssIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpOwogCQlzd2l0Y2ggKGVycikgewogCQkJY2FzZSAwOgogCQkJCWdvdG8gb3V0OwpAQCAtMjY2LDcgJiM0MzszMTYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfbmZzX3Jvb3Qodm9pZCkKIAkgKi8KIAl0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjsKIAlmb3IgKHRyeSA9IDE7IDsgdHJ5JiM0MzsmIzQzOykgewotCQlpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsICYjMzQ7bmZzJiMzNDssIHJvb3RfbW91bnRmbGFncywgcm9vdF9kYXRhKSkKJiM0MzsJCWlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgJiMzNDsvcm9vdCYjMzQ7LCAmIzM0O25mcyYjMzQ7LCByb290X21vdW50ZmxhZ3MsCiYjNDM7CQkJCSAgIHJvb3RfZGF0YSkpCiAJCQlyZXR1cm47CiAJCWlmICh0cnkgJmd0OyBORlNST09UX1JFVFJZX01BWCkKIAkJCWJyZWFrOwpAQCAtMzAzLDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfY2lmc19yb290KHZvaWQpCiAKIAl0aW1lb3V0ID0gQ0lGU1JPT1RfVElNRU9VVF9NSU47CiAJZm9yICh0cnkgPSAxOyA7IHRyeSYjNDM7JiM0MzspIHsKLQkJaWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCAmIzM0O2NpZnMmIzM0Oywgcm9vdF9tb3VudGZsYWdzLAomIzQzOwkJaWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCAmIzM0Oy9yb290JiMzNDssICYjMzQ7Y2lmcyYjMzQ7LCByb290X21vdW50ZmxhZ3MsCiAJCQkJICAgcm9vdF9kYXRhKSkKIAkJCXJldHVybjsKIAkJaWYgKHRyeSAmZ3Q7IENJRlNST09UX1JFVFJZX01BWCkKQEAgLTM0NSw3ICYjNDM7Mzk2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKQogCWZzX25hbWVzID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZnNfbmFtZXMpCiAJCXJldHVybiAtRUlOVkFMOwotCW51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpOwomIzQzOwludW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTsKIAogCWZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpICZsdDsgbnVtX2ZzOwogCSAgICAgaSYjNDM7JiM0MzssIGZzdHlwZSAmIzQzOz0gc3RybGVuKGZzdHlwZSkgJiM0MzsgMSkgewpAQCAtMzUzLDggJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKCFmc19pc19ub2Rldihmc3R5cGUpKQogCQkJY29udGludWU7Ci0JCWVyciA9IGRvX21vdW50X3Jvb3Qocm9vdF9kZXZpY2VfbmFtZSwgZnN0eXBlLCByb290X21vdW50ZmxhZ3MsCi0JCQkJICAgIHJvb3RfbW91bnRfZGF0YSk7CiYjNDM7CQllcnIgPSBkb19tb3VudF9yb290KHJvb3RfZGV2aWNlX25hbWUsICYjMzQ7L3Jvb3QmIzM0OywgZnN0eXBlLAomIzQzOwkJCQkgICAgcm9vdF9tb3VudGZsYWdzLCByb290X21vdW50X2RhdGEpOwogCQlpZiAoIWVycikKIAkJCWJyZWFrOwogCX0KQEAgLTQwMiw2ICYjNDM7NDUzLDE0OCBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpCiAJfQogfQogCiYjNDM7I2lmZGVmIENPTkZJR19GU19WRVJJVFkKJiM0MzsvKgomIzQzOyAqIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2UgdG8gY2FycnkgdGhlIGZzdmVyaXR5IGZpbGUgZGlnZXN0IGdpdmVuIGJ5CiYjNDM7ICogcm9vdGltYWdldmVyaXR5PSZsdDtoYXNoIGFsZ29yaXRobSZndDs6Jmx0O2hleCBkaWdlc3QmZ3Q7LiAgQGZpbGUgbXVzdCBoYXZlIGJlZW4KJiM0MzsgKiBvcGVuZWQgc28gdGhhdCBpdHMgZnN2ZXJpdHkgaW5mb3JtYXRpb24gaXMgbG9hZGVkLiAgQW55IGRldmlhdGlvbgomIzQzOyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZQomIzQzOyAqIGltYWdlIGNvbnRlbnRzLCB3aGljaCBmc3Zlcml0eSBrZWVwcyB2ZXJpZnlpbmcgYWdhaW5zdCB0aGUgaW1hZ2UmIzM5O3MKJiM0MzsgKiBNZXJrbGUgdHJlZSBhcyB0aGV5IGFyZSByZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXU4IHdhbnRbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV0sIGdvdFtGU19WRVJJVFlfTUFYX0RJR0VTVF9TSVpFXTsKJiM0MzsJZW51bSBoYXNoX2FsZ28gd2FudF9hbGdvLCBnb3RfYWxnbzsKJiM0MzsJaW50IHdhbnRfc2l6ZSwgZ290X3NpemUsIGk7CiYjNDM7CWNoYXIgKmhleDsKJiM0MzsKJiM0MzsJaGV4ID0gc3RyY2hyKHJvb3RfaW1hZ2VfdmVyaXR5LCAmIzM5OzomIzM5Oyk7CiYjNDM7CWlmICghaGV4KQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT0gZXhwZWN0cyAmbHQ7YWxnb3JpdGhtJmd0OzombHQ7aGV4IGRpZ2VzdCZndDsmIzM0Oyk7CiYjNDM7CSpoZXgmIzQzOyYjNDM7ID0gJiMzOTtcMCYjMzk7OwomIzQzOwlpID0gbWF0Y2hfc3RyaW5nKGhhc2hfYWxnb19uYW1lLCBIQVNIX0FMR09fX0xBU1QsIHJvb3RfaW1hZ2VfdmVyaXR5KTsKJiM0MzsJaWYgKGkgJmx0OyAwKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXCYjMzQ7JXNcJiMzNDsmIzM0OywKJiM0MzsJCSAgICAgIHJvb3RfaW1hZ2VfdmVyaXR5KTsKJiM0MzsJd2FudF9hbGdvID0gaTsKJiM0MzsJd2FudF9zaXplID0gaGFzaF9kaWdlc3Rfc2l6ZVt3YW50X2FsZ29dOwomIzQzOwlpZiAoc3RybGVuKGhleCkgIT0gMiAqIHdhbnRfc2l6ZSB8fCBoZXgyYmluKHdhbnQsIGhleCwgd2FudF9zaXplKSkKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3QmIzM0OywKJiM0MzsJCSAgICAgIHdhbnRfc2l6ZSk7CiYjNDM7CiYjNDM7CWdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsICZhbXA7Z290X2FsZ28pOwomIzQzOwlpZiAoIWdvdF9zaXplKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3QgaW1hZ2UgZG9lcyBub3QgaGF2ZSBmc3Zlcml0eSBlbmFibGVkJiMzNDspOwomIzQzOwlpZiAoZ290X2FsZ28gIT0gd2FudF9hbGdvIHx8IGdvdF9zaXplICE9IHdhbnRfc2l6ZSB8fAomIzQzOwkgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSkKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290IGltYWdlIGZzdmVyaXR5IGRpZ2VzdCBtaXNtYXRjaDogZXhwZWN0ZWQgJXM6JSpwaE4sIGdvdCAlczolKnBoTiYjMzQ7LAomIzQzOwkJICAgICAgaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50LAomIzQzOwkJICAgICAgaGFzaF9hbGdvX25hbWVbZ290X2FsZ29dLCBnb3Rfc2l6ZSwgZ290KTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1ZGUzogdmVyaWZpZWQgcm9vdCBpbWFnZSBmc3Zlcml0eSBkaWdlc3QgJXM6JSpwaE5cbiYjMzQ7LAomIzQzOwkJaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50KTsKJiM0Mzt9CiYjNDM7I2Vsc2UgLyogIUNPTkZJR19GU19WRVJJVFkgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlwYW5pYygmIzM0O1ZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZJiMzNDspOwomIzQzO30KJiM0MzsjZW5kaWYgLyogIUNPTkZJR19GU19WRVJJVFkgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1vdW50IHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gdGhlIGltYWdlIGZpbGUgcm9vdGltYWdlPSBvbiB0aGUKJiM0MzsgKiBmaWxlc3lzdGVtIHRoYXQgd2FzIGp1c3QgbW91bnRlZCBmcm9tIHJvb3Q9ICh0aGUgJiMzNDtjYXJyaWVyJiMzNDspLCBzbyB0aGF0CiYjNDM7ICogaW1hZ2UtYmFzZWQgc3lzdGVtcyBjYW4gYm9vdCB3aXRob3V0IGFuIGluaXRyYW1mcy4KJiM0MzsgKgomIzQzOyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2UKJiM0MzsgKiBpcyBhbHdheXMgbW91bnRlZCByZWFkLW9ubHk7ICYjMzQ7cm8mIzM0Oy8mIzM0O3J3JiMzNDsvcm9vdGZsYWdzPSBrZWVwIGFwcGx5aW5nIHRvIHRoZQomIzQzOyAqIGNhcnJpZXIuICBPbiBzdWNjZXNzIHRoZSBjd2QgaXMgdGhlIGltYWdlJiMzOTtzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3QKJiM0MzsgKiBpbiBwcmVwYXJlX25hbWVzcGFjZSgpLiAgVGhlIGNhcnJpZXIgbW91bnQgaXMgbW92ZWQgdG8gcm9vdGltYWdlc3JjZGlyPQomIzQzOyAqIGluc2lkZSB0aGUgaW1hZ2UgaWYgc2V0LCBhbmQgZGV0YWNoZWQgb3RoZXJ3aXNlOyBlaXRoZXIgd2F5IHRoZSBpbWFnZQomIzQzOyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9yb290X2ltYWdlKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzID0gTVNfUkRPTkxZIHwgTVNfU0lMRU5UOwomIzQzOwljaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwOwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKJiM0MzsJaW50IG51bV9mcywgaSwgZXJyOwomIzQzOwomIzQzOwlpZiAocm9vdF9pbWFnZVswXSAhPSAmIzM5Oy8mIzM5OykKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCYjMzQ7KTsKJiM0MzsKJiM0MzsJcGF0aCA9IGttYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOwomIzQzOwlmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwYXRoIHx8ICFmc19uYW1lcykKJiM0MzsJCXBhbmljKCYjMzQ7VkZTOiB1bmFibGUgdG8gbW91bnQgcm9vdCBpbWFnZTogbm90IGVub3VnaCBtZW1vcnkmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgJiMzNDsvcm9vdCVzJiMzNDssIHJvb3RfaW1hZ2UpICZndDs9IFBBVEhfTUFYKQomIzQzOwkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlCiYjNDM7CSAqIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiB0aGlzIG9wZW4gYW5kIHRoZSBtb3VudCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7CiYjNDM7CWlmIChJU19FUlIoZmlsZSkpCiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkJiMzNDssCiYjNDM7CQkgICAgICByb290X2ltYWdlLCBQVFJfRVJSKGZpbGUpKTsKJiM0MzsKJiM0MzsJaWYgKHJvb3RfaW1hZ2VfdmVyaXR5KQomIzQzOwkJdmVyaWZ5X3Jvb3RfaW1hZ2UoZmlsZSk7CiYjNDM7CiYjNDM7CWVyciA9IGluaXRfbWtkaXIoJiMzNDsvaW1hZ2UmIzM0OywgMDcwMCk7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJyICE9IC1FRVhJU1QpCiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIGNyZWF0ZSAvaW1hZ2U6IGVycm9yICVkJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWlmIChyb290X2ltYWdlX2ZzX25hbWVzKQomIzQzOwkJbnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSwKJiM0MzsJCQkJCXJvb3RfaW1hZ2VfZnNfbmFtZXMpOwomIzQzOwllbHNlCiYjNDM7CQludW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDAsIHAgPSBmc19uYW1lczsgaSAmbHQ7IG51bV9mczsgaSYjNDM7JiM0MzssIHAgJiM0Mzs9IHN0cmxlbihwKSAmIzQzOyAxKSB7CiYjNDM7CQlpZiAoISpwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJZXJyID0gZG9fbW91bnRfcm9vdChwYXRoLCAmIzM0Oy9pbWFnZSYjMzQ7LCBwLCBmbGFncywKJiM0MzsJCQkJICAgIHJvb3RfaW1hZ2VfbW91bnRfZGF0YSk7CiYjNDM7CQlzd2l0Y2ggKGVycikgewomIzQzOwkJY2FzZSAwOgomIzQzOwkJCWdvdG8gbW91bnRlZDsKJiM0MzsJCWNhc2UgLUVBQ0NFUzoKJiM0MzsJCWNhc2UgLUVJTlZBTDoKJiM0MzsJCWNhc2UgLUVOT1RCTEs6CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlwYW5pYygmIzM0O1ZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkJiMzNDssCiYjNDM7CQkgICAgICByb290X2ltYWdlLCBlcnIpOwomIzQzOwl9CiYjNDM7CXBhbmljKCYjMzQ7VkZTOiBubyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QgaW1hZ2UgJXMmIzM0Oywgcm9vdF9pbWFnZSk7CiYjNDM7CiYjNDM7bW91bnRlZDoKJiM0MzsJZnB1dChmaWxlKTsKJiM0MzsKJiM0MzsJaWYgKHJvb3RfaW1hZ2Vfc3JjZGlyKSB7CiYjNDM7CQlpZiAocm9vdF9pbWFnZV9zcmNkaXJbMF0gIT0gJiMzOTsvJiMzOTspCiYjNDM7CQkJcGFuaWMoJiMzNDtWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoJiMzNDspOwomIzQzOwkJaWYgKHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAmIzM0Oy4lcyYjMzQ7LCByb290X2ltYWdlX3NyY2RpcikgJmd0Oz0KJiM0MzsJCSAgICBQQVRIX01BWCkKJiM0MzsJCQlwYW5pYygmIzM0O1ZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nJiMzNDspOwomIzQzOwkJZXJyID0gaW5pdF9tb3VudCgmIzM0Oy9yb290JiMzNDssIHBhdGgsIE5VTEwsIE1TX01PVkUsIE5VTEwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlwcl9lcnIoJiMzNDtWRlM6IGZhaWxlZCB0byBtb3ZlIHRoZSByb290IGltYWdlJiMzOTtzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJaWYgKGVycikKJiM0MzsJCWluaXRfdW1vdW50KCYjMzQ7L3Jvb3QmIzM0OywgTU5UX0RFVEFDSCk7CiYjNDM7CiYjNDM7CWtmcmVlKHBhdGgpOwomIzQzOwlrZnJlZShmc19uYW1lcyk7CiYjNDM7fQomIzQzOwogLyogd2FpdCBmb3IgYW55IGFzeW5jaHJvbm91cyBzY2FubmluZyB0byBjb21wbGV0ZSAqLwogc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSkKIHsKQEAgLTQ4MSw2ICYjNDM7Njc0LDggQEAgdm9pZCBfX2luaXQgcHJlcGFyZV9uYW1lc3BhY2Uodm9pZCkKIAlpZiAocm9vdF93YWl0KQogCQl3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7CiAJbW91bnRfcm9vdChzYXZlZF9yb290X25hbWUpOwomIzQzOwlpZiAocm9vdF9pbWFnZSkKJiM0MzsJCW1vdW50X3Jvb3RfaW1hZ2UoKTsKIAlkZXZ0bXBmc19tb3VudCgpOwogCiAJaWYgKGluaXRfcGl2b3Rfcm9vdCgmIzM0Oy4mIzM0OywgJiMzNDsuJiMzNDspKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDAKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiAxMDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IGByb290aW1hZ2U9YCBLZXJuZWwgUGFyYW1ldGVyIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgYHJvb3RpbWFnZT1gIGtlcm5lbCBwYXJhbWV0ZXIuIEl0IGxvb2tzIGxpa2UgaXQgYWxsb3dzIGJvb3RpbmcgZnJvbSBhbiBpbWFnZSBmaWxlIHNwZWNpZmllZCBvbiB0aGUgYHJvb3Q9YCBmaWxlc3lzdGVtLCBvZmZlcmluZyBhIHdheSBmb3IgaW1hZ2UtYmFzZWQgc3lzdGVtcyB0byBib290IHdpdGhvdXQgbmVlZGluZyBhbiBpbml0cmFtZnMuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgcmVsYXRlZCBwYXJhbWV0ZXJzIGxpa2UgYHJvb3RpbWFnZWZsYWdzPWAsIGByb290aW1hZ2Vmc3R5cGU9YCwgYHJvb3RpbWFnZXNyY2Rpcj1gLCBhbmQgYHJvb3RpbWFnZXZlcml0eT1gLiBJdCBtb2RpZmllcyBgaW5pdC9kb19tb3VudHMuY2AsIGFkZGluZyBmdW5jdGlvbnMgbGlrZSBgbW91bnRfcm9vdF9pbWFnZSgpYCAoY2FsbGVkIGZyb20gYHByZXBhcmVfbmFtZXNwYWNlKClgKSBhbmQgYHZlcmlmeV9yb290X2ltYWdlKClgLCB3aGljaCB1c2VzIGBmc3Zlcml0eV9nZXRfZGlnZXN0KClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGVhcmx5IGJvb3QgY29kZSwgZGVhbGluZyB3aXRoIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBhbmQgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4gU3l6a2FsbGVyLCBteSB0eXBpY2FsIHRvb2wsIHByaW1hcmlseSBmb2N1c2VzIG9uIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQsIHVzdWFsbHkgdGhyb3VnaCBzeXN0ZW0gY2FsbHMuIEkga25vdyBTeXprYWxsZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZnV6eiBib290IHBhcmFtZXRlcnMsIGJ1dCB0aGF0JiMzOTtzIG5vdCBpdHMgcHJpbWFyeSBmb2N1cywgYW5kIGl0IHR5cGljYWxseSBkb2VzbiYjMzk7dCByZWJvb3QgZm9yIGVhY2ggdGVzdCBjYXNlIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQgcG9wcyB1cDogaXMgdGhpcyBjb2RlIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IEl0JiMzOTtzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBib290IGFuZCB0aGVuIGZyZWVkLiBCb3RoIGBtb3VudF9yb290X2ltYWdlYCBhbmQgYHZlcmlmeV9yb290X2ltYWdlYCBhcmUgYF9faW5pdGAuIFRoaXMgbWVhbnMgaXQgY2Fubm90IGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJiMzOTtzICpub3JtYWwqIGZ1enppbmcgcHJvY2VkdXJlLCB3aGljaCBvcGVyYXRlcyBwb3N0LWJvb3QuIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGlzIGJhc2VkIG9uIHN5c2NhbGxzLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb25nIGdvbmUgYnkgdGhlbi4KCkxldCBtZSBkb3VibGUtY2hlY2sgU3l6a2FsbGVyJiMzOTtzIGNvbW1hbmQgbGluZSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhleSBhcmUgbGltaXRlZCBhbmQgbm90IHRoZSB1c3VhbCBtb2RlIG9mIG9wZXJhdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gVGhpcyBgX19pbml0YCBjb2RlIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LgoKU28sIHNpbmNlIHRoZSBjb2RlIHJ1bnMgb25seSBkdXJpbmcgYm9vdCwgYW5kIFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZnV6eiB0aGlzIHBhcnQsIHRoaXMgaXNuJiMzOTt0IGZ1enphYmxlIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gSXQmIzM5O3MgY29kZSB0aGF0IHJ1bnMgb25jZSBhbmQgaXMgdGhlbiBkaXNjYXJkZWQsIG91dHNpZGUgdGhlIHNjb3BlIG9mIHN5c2NhbGwtYmFzZWQgZnV6emluZy4gU2luY2UgYHByZXBhcmVfbmFtZXNwYWNlYCBpcyBjYWxsZWQgZnJvbSBga2VybmVsX2luaXRfZnJlZWFibGVgLCB3aGljaCBpcyBgX19pbml0YCB0b28sIGl0IGZ1cnRoZXIgdmFsaWRhdGVzIG15IGNvbmNsdXNpb24uIGBtb3VudF9yb290X2ltYWdlYCwgYHZlcmlmeV9yb290X2ltYWdlYCwgYHNwbGl0X2ZzX25hbWVzYCBhbmQgYGRvX21vdW50X3Jvb3RgIGFyZSBhbGwgYWxzbyBgX19pbml0YC4KClRoZXJlZm9yZSwgbXkgZmluYWwgYXNzZXNzbWVudCBpczoKCldvcnRoRnV6emluZzogZmFsc2UKUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhjbHVzaXZlbHkgYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgX19pbml0ZGF0YWAgdmFyaWFibGVzIGluIGBpbml0L2RvX21vdW50cy5jYCB0byBlbmFibGUgYm9vdGluZyBmcm9tIGEgcm9vdCBpbWFnZSBmaWxlLiBUaGlzIGNvZGUgZXhlY3V0ZXMgb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IGFuZCBpcyBmcmVlZCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0IGNhbm5vdCBiZSBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscyBhZnRlciBib290LgoKRm9jdXNTeW1ib2xzOiBbXQpFbmFibGVDb25maWdzOiBbXQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC4zMzkyMzY0MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1MTE3MTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC4zMzkyNDMzNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODc2NDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzNTJmZTQ0NWJlOTMyMTVkNmNkY2MzNDA3Yjg0YzIyMjM3ZDNmZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMTk6NDk6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjgxLi4xMDVlYmIxNzE4YmIzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTY2OTksNiArNjY5OSw0OCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0cm9vdGZzdHlwZT1cXHRbS05MXSBTZXQgcm9vdCBmaWxlc3lzdGVtIHR5cGVcXG4gXFxuK1xcdHJvb3RpbWFnZT1cXHRbS05MXSBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoaXNcXG4rXFx0XFx0XFx0ZmlsZXN5c3RlbSBpbWFnZSBmaWxlIChhYnNvbHV0ZSBwYXRoKSBsb2NhdGVkIG9uIHRoZVxcbitcXHRcXHRcXHRmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSwgaW5zdGVhZCBvZiB1c2luZyB0aGF0XFxuK1xcdFxcdFxcdGZpbGVzeXN0ZW0gYXMgdGhlIHJvb3QgZGlyZWN0bHkuICBUaGlzIGFsbG93c1xcbitcXHRcXHRcXHRpbWFnZS1iYXNlZCBzeXN0ZW1zIHRoYXQga2VlcCB0aGVpciAodHlwaWNhbGx5XFxuK1xcdFxcdFxcdHJlYWQtb25seSwgZS5nLiBlcm9mcykgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhc1xcbitcXHRcXHRcXHRwbGFpbiBmaWxlcyBvbiBhIGNhcnJpZXIgZmlsZXN5c3RlbSB0byBib290IHdpdGhvdXRcXG4rXFx0XFx0XFx0YW4gaW5pdHJhbWZzLiAgVGhlIGltYWdlIGlzIG1vdW50ZWQgcmVhZC1vbmx5IHZpYVxcbitcXHRcXHRcXHR0aGUgZmlsZXN5c3RlbSdzIGZpbGUtYmFja2VkIG1vdW50IHN1cHBvcnQgKG5vIGxvb3BcXG4rXFx0XFx0XFx0ZGV2aWNlIGlzIHNldCB1cCk7IFxcXCJyb1xcXCIsIFxcXCJyd1xcXCIgYW5kIHJvb3RmbGFncz0ga2VlcFxcbitcXHRcXHRcXHRhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2VcXG4rXFx0XFx0XFx0aXMgbW91bnRlZCwgdGhlIGNhcnJpZXIgbW91bnQgaXMgZGV0YWNoZWQgKGJ1dCBrZXB0XFxuK1xcdFxcdFxcdGJ1c3kgYnkgdGhlIGltYWdlIG1vdW50IGl0c2VsZikgdW5sZXNzXFxuK1xcdFxcdFxcdHJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi5cXG4rXFxuK1xcdHJvb3RpbWFnZWZsYWdzPVxcdFtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gbW91bnQgb3B0aW9uIHN0cmluZyxcXG4rXFx0XFx0XFx0dXNlZCB0b2dldGhlciB3aXRoIHJvb3RpbWFnZT0uXFxuK1xcbitcXHRyb290aW1hZ2Vmc3R5cGU9IFtLTkxdIFNldCByb290IGltYWdlIGZpbGVzeXN0ZW0gdHlwZSwgdXNlZCB0b2dldGhlclxcbitcXHRcXHRcXHR3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXNcXG4rXFx0XFx0XFx0a25vd24gdG8gdGhlIGtlcm5lbCB0aGF0IGNhbiBtb3VudCBhIGJsb2NrIGRldmljZSBvclxcbitcXHRcXHRcXHRhbiBpbWFnZSBmaWxlLlxcbitcXG4rXFx0cm9vdGltYWdlc3JjZGlyPSBbS05MXSBEaXJlY3RvcnkgKGFic29sdXRlIHBhdGgpIGluc2lkZSB0aGUgcm9vdFxcbitcXHRcXHRcXHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxcbitcXHRcXHRcXHRob2xkaW5nIHRoZSBpbWFnZSAoaS5lLiB0aGUgZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnlcXG4rXFx0XFx0XFx0cm9vdD0pIGlzIG1vdmVkIHRvLCBpbnN0ZWFkIG9mIGRldGFjaGluZyBpdC4gIFVzZWRcXG4rXFx0XFx0XFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxcbitcXG4rXFx0cm9vdGltYWdldmVyaXR5PSBbS05MXSBSZXF1aXJlIHRoZSByb290IGltYWdlIHNwZWNpZmllZCBieVxcbitcXHRcXHRcXHRyb290aW1hZ2U9IHRvIGhhdmUgZnN2ZXJpdHkgZW5hYmxlZCB3aXRoIHRoaXMgZmlsZVxcbitcXHRcXHRcXHRkaWdlc3QsIGdpdmVuIGFzIFxcdTAwM2NoYXNoIGFsZ29yaXRobVxcdTAwM2U6XFx1MDAzY2hleCBkaWdlc3RcXHUwMDNlLFxcbitcXHRcXHRcXHRlLmcuIHNoYTI1NjpkZDFiM2ZhOS4uLiAgVGhlIGJvb3QgaXMgYWJvcnRlZCBpZiB0aGVcXG4rXFx0XFx0XFx0aW1hZ2UgY2FycmllcyBubyBvciBhIGRpZmZlcmVudCBmc3Zlcml0eSBkaWdlc3QuXFxuK1xcdFxcdFxcdEJlY2F1c2UgZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGRhdGEgcmVhZCBmcm9tIHRoZVxcbitcXHRcXHRcXHRpbWFnZSBhZ2FpbnN0IGl0cyBNZXJrbGUgdHJlZSBhdCBydW50aW1lLCBhIHRydXN0ZWRcXG4rXFx0XFx0XFx0KGUuZy4gc2lnbmVkIG9yIFRQTS1tZWFzdXJlZCkga2VybmVsIGNvbW1hbmQgbGluZVxcbitcXHRcXHRcXHRleHRlbmRzIHRoZSBjaGFpbiBvZiB0cnVzdCB0byB0aGUgY29tcGxldGUgcm9vdFxcbitcXHRcXHRcXHRmaWxlc3lzdGVtIGNvbnRlbnRzIHdpdGhvdXQgYW4gaW5pdHJhbWZzLiAgUmVxdWlyZXNcXG4rXFx0XFx0XFx0Q09ORklHX0ZTX1ZFUklUWSBhbmQgYSBjYXJyaWVyIGZpbGVzeXN0ZW0gd2l0aFxcbitcXHRcXHRcXHRmc3Zlcml0eSBzdXBwb3J0LlxcbitcXG4gXFx0cm9vdHdhaXRcXHRbS05MXSBXYWl0IChpbmRlZmluaXRlbHkpIGZvciByb290IGRldmljZSB0byBzaG93IHVwLlxcbiBcXHRcXHRcXHRVc2VmdWwgZm9yIGRldmljZXMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHlcXG4gXFx0XFx0XFx0KGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuXFxuZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jXFxuaW5kZXggOTVlMGIzYTBmNzExYmQuLjRlYjc5MmIyNzcwODZkIDEwMDY0NFxcbi0tLSBhL2luaXQvZG9fbW91bnRzLmNcXG4rKysgYi9pbml0L2RvX21vdW50cy5jXFxuQEAgLTI0LDYgKzI0LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25mc19mc19zYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmZzX21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYWlkL2RldGVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2hhc2hfaW5mby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tb3VudC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImRvX21vdW50cy5oXFxcIlxcbkBAIC0xMjIsMTMgKzEyNSw1OSBAQCBfX3NldHVwKFxcXCJyb290ZmxhZ3M9XFxcIiwgcm9vdF9kYXRhX3NldHVwKTtcXG4gX19zZXR1cChcXFwicm9vdGZzdHlwZT1cXFwiLCBmc19uYW1lc19zZXR1cCk7XFxuIF9fc2V0dXAoXFxcInJvb3RkZWxheT1cXFwiLCByb290X2RlbGF5X3NldHVwKTtcXG4gXFxuKy8qXFxuKyAqIHJvb3RpbWFnZT0gbW91bnRzIHRoZSBhY3R1YWwgcm9vdCBmaWxlc3lzdGVtIGZyb20gYW4gaW1hZ2UgZmlsZSBsb2NhdGVkXFxuKyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxcbisgKiBhcyB0aGUgcm9vdCBkaXJlY3RseS5cXG4rICovXFxuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NldHVwKGNoYXIgKnN0cilcXG4re1xcbitcXHRyb290X2ltYWdlID0gc3RyO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfZnNfbmFtZXM7XFxuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZnNfbmFtZXNfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2VfZnNfbmFtZXMgPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhO1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX2RhdGFfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2VfbW91bnRfZGF0YSA9IHN0cjtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcXG4rc3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJvb3RfaW1hZ2Vfc3JjZGlyID0gc3RyO1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfdmVyaXR5O1xcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3Zlcml0eV9zZXR1cChjaGFyICpzdHIpXFxuK3tcXG4rXFx0cm9vdF9pbWFnZV92ZXJpdHkgPSBzdHI7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitfX3NldHVwKFxcXCJyb290aW1hZ2U9XFxcIiwgcm9vdF9pbWFnZV9zZXR1cCk7XFxuK19fc2V0dXAoXFxcInJvb3RpbWFnZWZzdHlwZT1cXFwiLCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdlZmxhZ3M9XFxcIiwgcm9vdF9pbWFnZV9kYXRhX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdlc3JjZGlyPVxcXCIsIHJvb3RfaW1hZ2Vfc3JjZGlyX3NldHVwKTtcXG4rX19zZXR1cChcXFwicm9vdGltYWdldmVyaXR5PVxcXCIsIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTtcXG4rXFxuIC8qIFRoaXMgY2FuIHJldHVybiB6ZXJvIGxlbmd0aCBzdHJpbmdzLiBDYWxsZXIgc2hvdWxkIGNoZWNrICovXFxuLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplKVxcbitzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSwgY2hhciAqbmFtZXMpXFxuIHtcXG4gXFx0aW50IGNvdW50ID0gMTtcXG4gXFx0Y2hhciAqcCA9IHBhZ2U7XFxuIFxcbi1cXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xcbitcXHRzdHJzY3B5KHAsIG5hbWVzLCBzaXplKTtcXG4gXFx0d2hpbGUgKCpwKyspIHtcXG4gXFx0XFx0aWYgKHBbLTFdID09ICcsJykge1xcbiBcXHRcXHRcXHRwWy0xXSA9ICdcXFxcMCc7XFxuQEAgLTEzOSw4ICsxODgsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9mc19uYW1lcyhjaGFyICpwYWdlLCBzaXplX3Qgc2l6ZSlcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZzLFxcbi1cXHRcXHRcXHRcXHQgY29uc3QgaW50IGZsYWdzLCBjb25zdCB2b2lkICpkYXRhKVxcbitzdGF0aWMgaW50IF9faW5pdCBkb19tb3VudF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRpcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKmZzLCBjb25zdCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqcztcXG4gXFx0Y2hhciAqZGF0YV9wYWdlID0gTlVMTDtcXG5AQCAtMTU0LDExICsyMDQsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZG9fbW91bnRfcm9vdChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmcyxcXG4gXFx0XFx0c3Ryc2NweV9wYWQoZGF0YV9wYWdlLCBkYXRhLCBQQUdFX1NJWkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBpbml0X21vdW50KG5hbWUsIFxcXCIvcm9vdFxcXCIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcXG4rXFx0cmV0ID0gaW5pdF9tb3VudChuYW1lLCBkaXIsIGZzLCBmbGFncywgZGF0YV9wYWdlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpbml0X2NoZGlyKFxcXCIvcm9vdFxcXCIpO1xcbitcXHRpbml0X2NoZGlyKGRpcik7XFxuIFxcdHMgPSBjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcHdkLmRlbnRyeS1cXHUwMDNlZF9zYjtcXG4gXFx0Uk9PVF9ERVYgPSBzLVxcdTAwM2VzX2RldjtcXG4gXFx0cHJpbnRrKEtFUk5fSU5GT1xcbkBAIC0xODUsNyArMjM1LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXFxuIFxcdHNjbnByaW50ZihiLCBCREVWTkFNRV9TSVpFLCBcXFwidW5rbm93bi1ibG9jaygldSwldSlcXFwiLFxcbiBcXHRcXHQgIE1BSk9SKFJPT1RfREVWKSwgTUlOT1IoUk9PVF9ERVYpKTtcXG4gXFx0aWYgKHJvb3RfZnNfbmFtZXMpXFxuLVxcdFxcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xcbitcXHRcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XFxuIHJldHJ5OlxcbkBAIC0xOTQsNyArMjQ0LDcgQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9nZW5lcmljKGNoYXIgKm5hbWUsIGNoYXIgKnByZXR0eV9uYW1lLCBpbnQgZmxhZ3MpXFxuIFxcbiBcXHRcXHRpZiAoISpwKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcXG4rXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChuYW1lLCBcXFwiL3Jvb3RcXFwiLCBwLCBmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcXG4gXFx0XFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0XFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjY2LDcgKzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0dGltZW91dCA9IE5GU1JPT1RfVElNRU9VVF9NSU47XFxuIFxcdGZvciAodHJ5ID0gMTsgOyB0cnkrKykge1xcbi1cXHRcXHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFxcXCJuZnNcXFwiLCByb290X21vdW50ZmxhZ3MsIHJvb3RfZGF0YSkpXFxuK1xcdFxcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXFxcIi9yb290XFxcIiwgXFxcIm5mc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgcm9vdF9kYXRhKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAodHJ5IFxcdTAwM2UgTkZTUk9PVF9SRVRSWV9NQVgpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zMDMsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1vdW50X2NpZnNfcm9vdCh2b2lkKVxcbiBcXG4gXFx0dGltZW91dCA9IENJRlNST09UX1RJTUVPVVRfTUlOO1xcbiBcXHRmb3IgKHRyeSA9IDE7IDsgdHJ5KyspIHtcXG4tXFx0XFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcXFwiY2lmc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4rXFx0XFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcXFwiL3Jvb3RcXFwiLCBcXFwiY2lmc1xcXCIsIHJvb3RfbW91bnRmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICAgcm9vdF9kYXRhKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAodHJ5IFxcdTAwM2UgQ0lGU1JPT1RfUkVUUllfTUFYKVxcbkBAIC0zNDUsNyArMzk2LDcgQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFmc19uYW1lcylcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUpO1xcbitcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpIFxcdTAwM2MgbnVtX2ZzO1xcbiBcXHQgICAgIGkrKywgZnN0eXBlICs9IHN0cmxlbihmc3R5cGUpICsgMSkge1xcbkBAIC0zNTMsOCArNDA0LDggQEAgc3RhdGljIGludCBfX2luaXQgbW91bnRfbm9kZXZfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKCFmc19pc19ub2Rldihmc3R5cGUpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcXG4tXFx0XFx0XFx0XFx0ICAgIHJvb3RfbW91bnRfZGF0YSk7XFxuK1xcdFxcdGVyciA9IGRvX21vdW50X3Jvb3Qocm9vdF9kZXZpY2VfbmFtZSwgXFxcIi9yb290XFxcIiwgZnN0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgcm9vdF9tb3VudGZsYWdzLCByb290X21vdW50X2RhdGEpO1xcbiBcXHRcXHRpZiAoIWVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtNDAyLDYgKzQ1MywxNDggQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxcbiBcXHR9XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXFxuKy8qXFxuKyAqIFJlcXVpcmUgdGhlIHJvb3QgaW1hZ2UgdG8gY2FycnkgdGhlIGZzdmVyaXR5IGZpbGUgZGlnZXN0IGdpdmVuIGJ5XFxuKyAqIHJvb3RpbWFnZXZlcml0eT1cXHUwMDNjaGFzaCBhbGdvcml0aG1cXHUwMDNlOlxcdTAwM2NoZXggZGlnZXN0XFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXFxuKyAqIG9wZW5lZCBzbyB0aGF0IGl0cyBmc3Zlcml0eSBpbmZvcm1hdGlvbiBpcyBsb2FkZWQuICBBbnkgZGV2aWF0aW9uXFxuKyAqIGZhaWxzIHRoZSBib290OiB3aXRoIGEgdHJ1c3RlZCBjb21tYW5kIGxpbmUgdGhpcyBwaW5zIHRoZSBjb21wbGV0ZVxcbisgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJ3NcXG4rICogTWVya2xlIHRyZWUgYXMgdGhleSBhcmUgcmVhZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XFxuK1xcdGVudW0gaGFzaF9hbGdvIHdhbnRfYWxnbywgZ290X2FsZ287XFxuK1xcdGludCB3YW50X3NpemUsIGdvdF9zaXplLCBpO1xcbitcXHRjaGFyICpoZXg7XFxuK1xcbitcXHRoZXggPSBzdHJjaHIocm9vdF9pbWFnZV92ZXJpdHksICc6Jyk7XFxuK1xcdGlmICghaGV4KVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9IGV4cGVjdHMgXFx1MDAzY2FsZ29yaXRobVxcdTAwM2U6XFx1MDAzY2hleCBkaWdlc3RcXHUwMDNlXFxcIik7XFxuK1xcdCpoZXgrKyA9ICdcXFxcMCc7XFxuK1xcdGkgPSBtYXRjaF9zdHJpbmcoaGFzaF9hbGdvX25hbWUsIEhBU0hfQUxHT19fTEFTVCwgcm9vdF9pbWFnZV92ZXJpdHkpO1xcbitcXHRpZiAoaSBcXHUwMDNjIDApXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXFxcXFxcXCIlc1xcXFxcXFwiXFxcIixcXG4rXFx0XFx0ICAgICAgcm9vdF9pbWFnZV92ZXJpdHkpO1xcbitcXHR3YW50X2FsZ28gPSBpO1xcbitcXHR3YW50X3NpemUgPSBoYXNoX2RpZ2VzdF9zaXplW3dhbnRfYWxnb107XFxuK1xcdGlmIChzdHJsZW4oaGV4KSAhPSAyICogd2FudF9zaXplIHx8IGhleDJiaW4od2FudCwgaGV4LCB3YW50X3NpemUpKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3RcXFwiLFxcbitcXHRcXHQgICAgICB3YW50X3NpemUpO1xcbitcXG4rXFx0Z290X3NpemUgPSBmc3Zlcml0eV9nZXRfZGlnZXN0KGZpbGVfaW5vZGUoZmlsZSksIGdvdCwgTlVMTCwgXFx1MDAyNmdvdF9hbGdvKTtcXG4rXFx0aWYgKCFnb3Rfc2l6ZSlcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdCBpbWFnZSBkb2VzIG5vdCBoYXZlIGZzdmVyaXR5IGVuYWJsZWRcXFwiKTtcXG4rXFx0aWYgKGdvdF9hbGdvICE9IHdhbnRfYWxnbyB8fCBnb3Rfc2l6ZSAhPSB3YW50X3NpemUgfHxcXG4rXFx0ICAgIG1lbWNtcCh3YW50LCBnb3QsIHdhbnRfc2l6ZSkpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0IG1pc21hdGNoOiBleHBlY3RlZCAlczolKnBoTiwgZ290ICVzOiUqcGhOXFxcIixcXG4rXFx0XFx0ICAgICAgaGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50LFxcbitcXHRcXHQgICAgICBoYXNoX2FsZ29fbmFtZVtnb3RfYWxnb10sIGdvdF9zaXplLCBnb3QpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiVkZTOiB2ZXJpZmllZCByb290IGltYWdlIGZzdmVyaXR5IGRpZ2VzdCAlczolKnBoTlxcXFxuXFxcIixcXG4rXFx0XFx0aGFzaF9hbGdvX25hbWVbd2FudF9hbGdvXSwgd2FudF9zaXplLCB3YW50KTtcXG4rfVxcbisjZWxzZSAvKiAhQ09ORklHX0ZTX1ZFUklUWSAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgdmVyaWZ5X3Jvb3RfaW1hZ2Uoc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdldmVyaXR5PSByZXF1aXJlcyBDT05GSUdfRlNfVkVSSVRZXFxcIik7XFxuK31cXG4rI2VuZGlmIC8qICFDT05GSUdfRlNfVkVSSVRZICovXFxuK1xcbisvKlxcbisgKiBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoZSBpbWFnZSBmaWxlIHJvb3RpbWFnZT0gb24gdGhlXFxuKyAqIGZpbGVzeXN0ZW0gdGhhdCB3YXMganVzdCBtb3VudGVkIGZyb20gcm9vdD0gKHRoZSBcXFwiY2FycmllclxcXCIpLCBzbyB0aGF0XFxuKyAqIGltYWdlLWJhc2VkIHN5c3RlbXMgY2FuIGJvb3Qgd2l0aG91dCBhbiBpbml0cmFtZnMuXFxuKyAqXFxuKyAqIENhbGxlZCB3aXRoIHRoZSBjYXJyaWVyIG1vdW50ZWQgYXQgL3Jvb3QgYW5kIHRoZSBjd2QgdGhlcmUuICBUaGUgaW1hZ2VcXG4rICogaXMgYWx3YXlzIG1vdW50ZWQgcmVhZC1vbmx5OyBcXFwicm9cXFwiL1xcXCJyd1xcXCIvcm9vdGZsYWdzPSBrZWVwIGFwcGx5aW5nIHRvIHRoZVxcbisgKiBjYXJyaWVyLiAgT24gc3VjY2VzcyB0aGUgY3dkIGlzIHRoZSBpbWFnZSdzIHJvb3QsIHJlYWR5IGZvciB0aGUgcGl2b3RcXG4rICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cXG4rICogaW5zaWRlIHRoZSBpbWFnZSBpZiBzZXQsIGFuZCBkZXRhY2hlZCBvdGhlcndpc2U7IGVpdGhlciB3YXkgdGhlIGltYWdlXFxuKyAqIG1vdW50IGtlZXBzIHRoZSBjYXJyaWVyIHN1cGVyYmxvY2sgcGlubmVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfaW1hZ2Uodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gTVNfUkRPTkxZIHwgTVNfU0lMRU5UO1xcbitcXHRjaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwO1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4rXFx0aW50IG51bV9mcywgaSwgZXJyO1xcbitcXG4rXFx0aWYgKHJvb3RfaW1hZ2VbMF0gIT0gJy8nKVxcbitcXHRcXHRwYW5pYyhcXFwiVkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFxcXCIpO1xcbitcXG4rXFx0cGF0aCA9IGttYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbitcXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwYXRoIHx8ICFmc19uYW1lcylcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2U6IG5vdCBlbm91Z2ggbWVtb3J5XFxcIik7XFxuK1xcbitcXHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFxcXCIvcm9vdCVzXFxcIiwgcm9vdF9pbWFnZSkgXFx1MDAzZT0gUEFUSF9NQVgpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHJvb3RpbWFnZT0gcGF0aCB0b28gbG9uZ1xcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXFxuK1xcdCAqIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiB0aGlzIG9wZW4gYW5kIHRoZSBtb3VudCBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XFxuK1xcdGlmIChJU19FUlIoZmlsZSkpXFxuK1xcdFxcdHBhbmljKFxcXCJWRlM6IHVuYWJsZSB0byBvcGVuIHJvb3QgaW1hZ2UgJXM6IGVycm9yICVsZFxcXCIsXFxuK1xcdFxcdCAgICAgIHJvb3RfaW1hZ2UsIFBUUl9FUlIoZmlsZSkpO1xcbitcXG4rXFx0aWYgKHJvb3RfaW1hZ2VfdmVyaXR5KVxcbitcXHRcXHR2ZXJpZnlfcm9vdF9pbWFnZShmaWxlKTtcXG4rXFxuK1xcdGVyciA9IGluaXRfbWtkaXIoXFxcIi9pbWFnZVxcXCIsIDA3MDApO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVFWElTVClcXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIGNyZWF0ZSAvaW1hZ2U6IGVycm9yICVkXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGlmIChyb290X2ltYWdlX2ZzX25hbWVzKVxcbitcXHRcXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRyb290X2ltYWdlX2ZzX25hbWVzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXFx1MDAzYyBudW1fZnM7IGkrKywgcCArPSBzdHJsZW4ocCkgKyAxKSB7XFxuK1xcdFxcdGlmICghKnApXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRlcnIgPSBkb19tb3VudF9yb290KHBhdGgsIFxcXCIvaW1hZ2VcXFwiLCBwLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgIHJvb3RfaW1hZ2VfbW91bnRfZGF0YSk7XFxuK1xcdFxcdHN3aXRjaCAoZXJyKSB7XFxuK1xcdFxcdGNhc2UgMDpcXG4rXFx0XFx0XFx0Z290byBtb3VudGVkO1xcbitcXHRcXHRjYXNlIC1FQUNDRVM6XFxuK1xcdFxcdGNhc2UgLUVJTlZBTDpcXG4rXFx0XFx0Y2FzZSAtRU5PVEJMSzpcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGFuaWMoXFxcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkXFxcIixcXG4rXFx0XFx0ICAgICAgcm9vdF9pbWFnZSwgZXJyKTtcXG4rXFx0fVxcbitcXHRwYW5pYyhcXFwiVkZTOiBubyBmaWxlc3lzdGVtIGNvdWxkIG1vdW50IHJvb3QgaW1hZ2UgJXNcXFwiLCByb290X2ltYWdlKTtcXG4rXFxuK21vdW50ZWQ6XFxuK1xcdGZwdXQoZmlsZSk7XFxuK1xcbitcXHRpZiAocm9vdF9pbWFnZV9zcmNkaXIpIHtcXG4rXFx0XFx0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyWzBdICE9ICcvJylcXG4rXFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhcXFwiKTtcXG4rXFx0XFx0aWYgKHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBcXFwiLiVzXFxcIiwgcm9vdF9pbWFnZV9zcmNkaXIpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICBQQVRIX01BWClcXG4rXFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nXFxcIik7XFxuK1xcdFxcdGVyciA9IGluaXRfbW91bnQoXFxcIi9yb290XFxcIiwgcGF0aCwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHByX2VycihcXFwiVkZTOiBmYWlsZWQgdG8gbW92ZSB0aGUgcm9vdCBpbWFnZSdzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICByb290X2ltYWdlX3NyY2RpciwgZXJyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpbml0X3Vtb3VudChcXFwiL3Jvb3RcXFwiLCBNTlRfREVUQUNIKTtcXG4rXFxuK1xcdGtmcmVlKHBhdGgpO1xcbitcXHRrZnJlZShmc19uYW1lcyk7XFxuK31cXG4rXFxuIC8qIHdhaXQgZm9yIGFueSBhc3luY2hyb25vdXMgc2Nhbm5pbmcgdG8gY29tcGxldGUgKi9cXG4gc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSlcXG4ge1xcbkBAIC00ODEsNiArNjc0LDggQEAgdm9pZCBfX2luaXQgcHJlcGFyZV9uYW1lc3BhY2Uodm9pZClcXG4gXFx0aWYgKHJvb3Rfd2FpdClcXG4gXFx0XFx0d2FpdF9mb3Jfcm9vdChzYXZlZF9yb290X25hbWUpO1xcbiBcXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XFxuK1xcdGlmIChyb290X2ltYWdlKVxcbitcXHRcXHRtb3VudF9yb290X2ltYWdlKCk7XFxuIFxcdGRldnRtcGZzX21vdW50KCk7XFxuIFxcbiBcXHRpZiAoaW5pdF9waXZvdF9yb290KFxcXCIuXFxcIiwgXFxcIi5cXFwiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxOTo1MDowMC45Nzg4NDk1NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTExNTQ4MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTM1MmZlNDQ1YmU5MzIxNWQ2Y2RjYzM0MDdiODRjMjIyMzdkM2ZkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDE5OjQ5OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyODEuLjEwNWViYjE3MThiYjNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtNjY5OSw2ICs2Njk5LDQ4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXG4gXHRyb290ZnN0eXBlPVx0W0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSB0eXBlXG4gXG4rXHRyb290aW1hZ2U9XHRbS05MXSBNb3VudCB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIHRoaXNcbitcdFx0XHRmaWxlc3lzdGVtIGltYWdlIGZpbGUgKGFic29sdXRlIHBhdGgpIGxvY2F0ZWQgb24gdGhlXG4rXHRcdFx0ZmlsZXN5c3RlbSBzcGVjaWZpZWQgYnkgcm9vdD0sIGluc3RlYWQgb2YgdXNpbmcgdGhhdFxuK1x0XHRcdGZpbGVzeXN0ZW0gYXMgdGhlIHJvb3QgZGlyZWN0bHkuICBUaGlzIGFsbG93c1xuK1x0XHRcdGltYWdlLWJhc2VkIHN5c3RlbXMgdGhhdCBrZWVwIHRoZWlyICh0eXBpY2FsbHlcbitcdFx0XHRyZWFkLW9ubHksIGUuZy4gZXJvZnMpIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgYXNcbitcdFx0XHRwbGFpbiBmaWxlcyBvbiBhIGNhcnJpZXIgZmlsZXN5c3RlbSB0byBib290IHdpdGhvdXRcbitcdFx0XHRhbiBpbml0cmFtZnMuICBUaGUgaW1hZ2UgaXMgbW91bnRlZCByZWFkLW9ubHkgdmlhXG4rXHRcdFx0dGhlIGZpbGVzeXN0ZW0ncyBmaWxlLWJhY2tlZCBtb3VudCBzdXBwb3J0IChubyBsb29wXG4rXHRcdFx0ZGV2aWNlIGlzIHNldCB1cCk7IFwicm9cIiwgXCJyd1wiIGFuZCByb290ZmxhZ3M9IGtlZXBcbitcdFx0XHRhcHBseWluZyB0byB0aGUgY2FycmllciBmaWxlc3lzdGVtLiAgT25jZSB0aGUgaW1hZ2VcbitcdFx0XHRpcyBtb3VudGVkLCB0aGUgY2FycmllciBtb3VudCBpcyBkZXRhY2hlZCAoYnV0IGtlcHRcbitcdFx0XHRidXN5IGJ5IHRoZSBpbWFnZSBtb3VudCBpdHNlbGYpIHVubGVzc1xuK1x0XHRcdHJvb3RpbWFnZXNyY2Rpcj0gaXMgYWxzbyBnaXZlbi5cbitcbitcdHJvb3RpbWFnZWZsYWdzPVx0W0tOTF0gU2V0IHJvb3QgaW1hZ2UgZmlsZXN5c3RlbSBtb3VudCBvcHRpb24gc3RyaW5nLFxuK1x0XHRcdHVzZWQgdG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuK1xuK1x0cm9vdGltYWdlZnN0eXBlPSBbS05MXSBTZXQgcm9vdCBpbWFnZSBmaWxlc3lzdGVtIHR5cGUsIHVzZWQgdG9nZXRoZXJcbitcdFx0XHR3aXRoIHJvb3RpbWFnZT0uICBEZWZhdWx0IGlzIHRvIHRyeSBhbGwgZmlsZXN5c3RlbXNcbitcdFx0XHRrbm93biB0byB0aGUga2VybmVsIHRoYXQgY2FuIG1vdW50IGEgYmxvY2sgZGV2aWNlIG9yXG4rXHRcdFx0YW4gaW1hZ2UgZmlsZS5cbitcbitcdHJvb3RpbWFnZXNyY2Rpcj0gW0tOTF0gRGlyZWN0b3J5IChhYnNvbHV0ZSBwYXRoKSBpbnNpZGUgdGhlIHJvb3RcbitcdFx0XHRpbWFnZSB3aGVyZSB0aGUgbW91bnQgb2YgdGhlIGNhcnJpZXIgZmlsZXN5c3RlbVxuK1x0XHRcdGhvbGRpbmcgdGhlIGltYWdlIChpLmUuIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieVxuK1x0XHRcdHJvb3Q9KSBpcyBtb3ZlZCB0bywgaW5zdGVhZCBvZiBkZXRhY2hpbmcgaXQuICBVc2VkXG4rXHRcdFx0dG9nZXRoZXIgd2l0aCByb290aW1hZ2U9LlxuK1xuK1x0cm9vdGltYWdldmVyaXR5PSBbS05MXSBSZXF1aXJlIHRoZSByb290IGltYWdlIHNwZWNpZmllZCBieVxuK1x0XHRcdHJvb3RpbWFnZT0gdG8gaGF2ZSBmc3Zlcml0eSBlbmFibGVkIHdpdGggdGhpcyBmaWxlXG4rXHRcdFx0ZGlnZXN0LCBnaXZlbiBhcyBcdTAwM2NoYXNoIGFsZ29yaXRobVx1MDAzZTpcdTAwM2NoZXggZGlnZXN0XHUwMDNlLFxuK1x0XHRcdGUuZy4gc2hhMjU2OmRkMWIzZmE5Li4uICBUaGUgYm9vdCBpcyBhYm9ydGVkIGlmIHRoZVxuK1x0XHRcdGltYWdlIGNhcnJpZXMgbm8gb3IgYSBkaWZmZXJlbnQgZnN2ZXJpdHkgZGlnZXN0LlxuK1x0XHRcdEJlY2F1c2UgZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGRhdGEgcmVhZCBmcm9tIHRoZVxuK1x0XHRcdGltYWdlIGFnYWluc3QgaXRzIE1lcmtsZSB0cmVlIGF0IHJ1bnRpbWUsIGEgdHJ1c3RlZFxuK1x0XHRcdChlLmcuIHNpZ25lZCBvciBUUE0tbWVhc3VyZWQpIGtlcm5lbCBjb21tYW5kIGxpbmVcbitcdFx0XHRleHRlbmRzIHRoZSBjaGFpbiBvZiB0cnVzdCB0byB0aGUgY29tcGxldGUgcm9vdFxuK1x0XHRcdGZpbGVzeXN0ZW0gY29udGVudHMgd2l0aG91dCBhbiBpbml0cmFtZnMuICBSZXF1aXJlc1xuK1x0XHRcdENPTkZJR19GU19WRVJJVFkgYW5kIGEgY2FycmllciBmaWxlc3lzdGVtIHdpdGhcbitcdFx0XHRmc3Zlcml0eSBzdXBwb3J0LlxuK1xuIFx0cm9vdHdhaXRcdFtLTkxdIFdhaXQgKGluZGVmaW5pdGVseSkgZm9yIHJvb3QgZGV2aWNlIHRvIHNob3cgdXAuXG4gXHRcdFx0VXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5XG4gXHRcdFx0KGUuZy4gVVNCIGFuZCBNTUMgZGV2aWNlcykuXG5kaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmNcbmluZGV4IDk1ZTBiM2EwZjcxMWJkLi40ZWI3OTJiMjc3MDg2ZCAxMDA2NDRcbi0tLSBhL2luaXQvZG9fbW91bnRzLmNcbisrKyBiL2luaXQvZG9fbW91bnRzLmNcbkBAIC0yNCw2ICsyNCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmZzX2ZzX3NiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZnNfbW91bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhaWQvZGV0ZWN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vaGFzaF9pbmZvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21vdW50LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImRvX21vdW50cy5oXCJcbkBAIC0xMjIsMTMgKzEyNSw1OSBAQCBfX3NldHVwKFwicm9vdGZsYWdzPVwiLCByb290X2RhdGFfc2V0dXApO1xuIF9fc2V0dXAoXCJyb290ZnN0eXBlPVwiLCBmc19uYW1lc19zZXR1cCk7XG4gX19zZXR1cChcInJvb3RkZWxheT1cIiwgcm9vdF9kZWxheV9zZXR1cCk7XG4gXG4rLypcbisgKiByb290aW1hZ2U9IG1vdW50cyB0aGUgYWN0dWFsIHJvb3QgZmlsZXN5c3RlbSBmcm9tIGFuIGltYWdlIGZpbGUgbG9jYXRlZFxuKyAqIG9uIHRoZSBmaWxlc3lzdGVtIHNwZWNpZmllZCBieSByb290PSBpbnN0ZWFkIG9mIHVzaW5nIHRoYXQgZmlsZXN5c3RlbVxuKyAqIGFzIHRoZSByb290IGRpcmVjdGx5LlxuKyAqL1xuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlO1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2Vfc2V0dXAoY2hhciAqc3RyKVxuK3tcbitcdHJvb3RfaW1hZ2UgPSBzdHI7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfZnNfbmFtZXM7XG4rc3RhdGljIGludCBfX2luaXQgcm9vdF9pbWFnZV9mc19uYW1lc19zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9mc19uYW1lcyA9IHN0cjtcbitcdHJldHVybiAxO1xuK31cbitcbitzdGF0aWMgY2hhciAqIF9faW5pdGRhdGEgcm9vdF9pbWFnZV9tb3VudF9kYXRhO1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfZGF0YV9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9tb3VudF9kYXRhID0gc3RyO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBjaGFyICogX19pbml0ZGF0YSByb290X2ltYWdlX3NyY2RpcjtcbitzdGF0aWMgaW50IF9faW5pdCByb290X2ltYWdlX3NyY2Rpcl9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cm9vdF9pbWFnZV9zcmNkaXIgPSBzdHI7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGNoYXIgKiBfX2luaXRkYXRhIHJvb3RfaW1hZ2VfdmVyaXR5O1xuK3N0YXRpYyBpbnQgX19pbml0IHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKGNoYXIgKnN0cilcbit7XG4rXHRyb290X2ltYWdlX3Zlcml0eSA9IHN0cjtcbitcdHJldHVybiAxO1xuK31cbitcbitfX3NldHVwKFwicm9vdGltYWdlPVwiLCByb290X2ltYWdlX3NldHVwKTtcbitfX3NldHVwKFwicm9vdGltYWdlZnN0eXBlPVwiLCByb290X2ltYWdlX2ZzX25hbWVzX3NldHVwKTtcbitfX3NldHVwKFwicm9vdGltYWdlZmxhZ3M9XCIsIHJvb3RfaW1hZ2VfZGF0YV9zZXR1cCk7XG4rX19zZXR1cChcInJvb3RpbWFnZXNyY2Rpcj1cIiwgcm9vdF9pbWFnZV9zcmNkaXJfc2V0dXApO1xuK19fc2V0dXAoXCJyb290aW1hZ2V2ZXJpdHk9XCIsIHJvb3RfaW1hZ2VfdmVyaXR5X3NldHVwKTtcbitcbiAvKiBUaGlzIGNhbiByZXR1cm4gemVybyBsZW5ndGggc3RyaW5ncy4gQ2FsbGVyIHNob3VsZCBjaGVjayAqL1xuLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplKVxuK3N0YXRpYyBpbnQgX19pbml0IHNwbGl0X2ZzX25hbWVzKGNoYXIgKnBhZ2UsIHNpemVfdCBzaXplLCBjaGFyICpuYW1lcylcbiB7XG4gXHRpbnQgY291bnQgPSAxO1xuIFx0Y2hhciAqcCA9IHBhZ2U7XG4gXG4tXHRzdHJzY3B5KHAsIHJvb3RfZnNfbmFtZXMsIHNpemUpO1xuK1x0c3Ryc2NweShwLCBuYW1lcywgc2l6ZSk7XG4gXHR3aGlsZSAoKnArKykge1xuIFx0XHRpZiAocFstMV0gPT0gJywnKSB7XG4gXHRcdFx0cFstMV0gPSAnXFwwJztcbkBAIC0xMzksOCArMTg4LDkgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfZnNfbmFtZXMoY2hhciAqcGFnZSwgc2l6ZV90IHNpemUpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4tXHRcdFx0XHQgY29uc3QgaW50IGZsYWdzLCBjb25zdCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyLFxuK1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZzLCBjb25zdCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7XG4gXHRjaGFyICpkYXRhX3BhZ2UgPSBOVUxMO1xuQEAgLTE1NCwxMSArMjA0LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGRvX21vdW50X3Jvb3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnMsXG4gXHRcdHN0cnNjcHlfcGFkKGRhdGFfcGFnZSwgZGF0YSwgUEFHRV9TSVpFKTtcbiBcdH1cbiBcbi1cdHJldCA9IGluaXRfbW91bnQobmFtZSwgXCIvcm9vdFwiLCBmcywgZmxhZ3MsIGRhdGFfcGFnZSk7XG4rXHRyZXQgPSBpbml0X21vdW50KG5hbWUsIGRpciwgZnMsIGZsYWdzLCBkYXRhX3BhZ2UpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpbml0X2NoZGlyKFwiL3Jvb3RcIik7XG4rXHRpbml0X2NoZGlyKGRpcik7XG4gXHRzID0gY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vwd2QuZGVudHJ5LVx1MDAzZWRfc2I7XG4gXHRST09UX0RFViA9IHMtXHUwMDNlc19kZXY7XG4gXHRwcmludGsoS0VSTl9JTkZPXG5AQCAtMTg1LDcgKzIzNSw3IEBAIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfZ2VuZXJpYyhjaGFyICpuYW1lLCBjaGFyICpwcmV0dHlfbmFtZSwgaW50IGZsYWdzKVxuIFx0c2NucHJpbnRmKGIsIEJERVZOQU1FX1NJWkUsIFwidW5rbm93bi1ibG9jaygldSwldSlcIixcbiBcdFx0ICBNQUpPUihST09UX0RFViksIE1JTk9SKFJPT1RfREVWKSk7XG4gXHRpZiAocm9vdF9mc19uYW1lcylcbi1cdFx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXHRcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUsIHJvb3RfZnNfbmFtZXMpO1xuIFx0ZWxzZVxuIFx0XHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4gcmV0cnk6XG5AQCAtMTk0LDcgKzI0NCw3IEBAIHZvaWQgX19pbml0IG1vdW50X3Jvb3RfZ2VuZXJpYyhjaGFyICpuYW1lLCBjaGFyICpwcmV0dHlfbmFtZSwgaW50IGZsYWdzKVxuIFxuIFx0XHRpZiAoISpwKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIHAsIGZsYWdzLCByb290X21vdW50X2RhdGEpO1xuK1x0XHRlcnIgPSBkb19tb3VudF9yb290KG5hbWUsIFwiL3Jvb3RcIiwgcCwgZmxhZ3MsIHJvb3RfbW91bnRfZGF0YSk7XG4gXHRcdHN3aXRjaCAoZXJyKSB7XG4gXHRcdFx0Y2FzZSAwOlxuIFx0XHRcdFx0Z290byBvdXQ7XG5AQCAtMjY2LDcgKzMxNiw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtb3VudF9uZnNfcm9vdCh2b2lkKVxuIFx0ICovXG4gXHR0aW1lb3V0ID0gTkZTUk9PVF9USU1FT1VUX01JTjtcbiBcdGZvciAodHJ5ID0gMTsgOyB0cnkrKykge1xuLVx0XHRpZiAoIWRvX21vdW50X3Jvb3Qocm9vdF9kZXYsIFwibmZzXCIsIHJvb3RfbW91bnRmbGFncywgcm9vdF9kYXRhKSlcbitcdFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcIi9yb290XCIsIFwibmZzXCIsIHJvb3RfbW91bnRmbGFncyxcbitcdFx0XHRcdCAgIHJvb3RfZGF0YSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRpZiAodHJ5IFx1MDAzZSBORlNST09UX1JFVFJZX01BWClcbiBcdFx0XHRicmVhaztcbkBAIC0zMDMsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1vdW50X2NpZnNfcm9vdCh2b2lkKVxuIFxuIFx0dGltZW91dCA9IENJRlNST09UX1RJTUVPVVRfTUlOO1xuIFx0Zm9yICh0cnkgPSAxOyA7IHRyeSsrKSB7XG4tXHRcdGlmICghZG9fbW91bnRfcm9vdChyb290X2RldiwgXCJjaWZzXCIsIHJvb3RfbW91bnRmbGFncyxcbitcdFx0aWYgKCFkb19tb3VudF9yb290KHJvb3RfZGV2LCBcIi9yb290XCIsIFwiY2lmc1wiLCByb290X21vdW50ZmxhZ3MsXG4gXHRcdFx0XHQgICByb290X2RhdGEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHRyeSBcdTAwM2UgQ0lGU1JPT1RfUkVUUllfTUFYKVxuQEAgLTM0NSw3ICszOTYsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRmc19uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZnNfbmFtZXMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0bnVtX2ZzID0gc3BsaXRfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXHRudW1fZnMgPSBzcGxpdF9mc19uYW1lcyhmc19uYW1lcywgUEFHRV9TSVpFLCByb290X2ZzX25hbWVzKTtcbiBcbiBcdGZvciAoaSA9IDAsIGZzdHlwZSA9IGZzX25hbWVzOyBpIFx1MDAzYyBudW1fZnM7XG4gXHQgICAgIGkrKywgZnN0eXBlICs9IHN0cmxlbihmc3R5cGUpICsgMSkge1xuQEAgLTM1Myw4ICs0MDQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb3VudF9ub2Rldl9yb290KGNoYXIgKnJvb3RfZGV2aWNlX25hbWUpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghZnNfaXNfbm9kZXYoZnN0eXBlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0ZXJyID0gZG9fbW91bnRfcm9vdChyb290X2RldmljZV9uYW1lLCBmc3R5cGUsIHJvb3RfbW91bnRmbGFncyxcbi1cdFx0XHRcdCAgICByb290X21vdW50X2RhdGEpO1xuK1x0XHRlcnIgPSBkb19tb3VudF9yb290KHJvb3RfZGV2aWNlX25hbWUsIFwiL3Jvb3RcIiwgZnN0eXBlLFxuK1x0XHRcdFx0ICAgIHJvb3RfbW91bnRmbGFncywgcm9vdF9tb3VudF9kYXRhKTtcbiBcdFx0aWYgKCFlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDAyLDYgKzQ1MywxNDggQEAgdm9pZCBfX2luaXQgbW91bnRfcm9vdChjaGFyICpyb290X2RldmljZV9uYW1lKVxuIFx0fVxuIH1cbiBcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuKy8qXG4rICogUmVxdWlyZSB0aGUgcm9vdCBpbWFnZSB0byBjYXJyeSB0aGUgZnN2ZXJpdHkgZmlsZSBkaWdlc3QgZ2l2ZW4gYnlcbisgKiByb290aW1hZ2V2ZXJpdHk9XHUwMDNjaGFzaCBhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZS4gIEBmaWxlIG11c3QgaGF2ZSBiZWVuXG4rICogb3BlbmVkIHNvIHRoYXQgaXRzIGZzdmVyaXR5IGluZm9ybWF0aW9uIGlzIGxvYWRlZC4gIEFueSBkZXZpYXRpb25cbisgKiBmYWlscyB0aGUgYm9vdDogd2l0aCBhIHRydXN0ZWQgY29tbWFuZCBsaW5lIHRoaXMgcGlucyB0aGUgY29tcGxldGVcbisgKiBpbWFnZSBjb250ZW50cywgd2hpY2ggZnN2ZXJpdHkga2VlcHMgdmVyaWZ5aW5nIGFnYWluc3QgdGhlIGltYWdlJ3NcbisgKiBNZXJrbGUgdHJlZSBhcyB0aGV5IGFyZSByZWFkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJpZnlfcm9vdF9pbWFnZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHR1OCB3YW50W0ZTX1ZFUklUWV9NQVhfRElHRVNUX1NJWkVdLCBnb3RbRlNfVkVSSVRZX01BWF9ESUdFU1RfU0laRV07XG4rXHRlbnVtIGhhc2hfYWxnbyB3YW50X2FsZ28sIGdvdF9hbGdvO1xuK1x0aW50IHdhbnRfc2l6ZSwgZ290X3NpemUsIGk7XG4rXHRjaGFyICpoZXg7XG4rXG4rXHRoZXggPSBzdHJjaHIocm9vdF9pbWFnZV92ZXJpdHksICc6Jyk7XG4rXHRpZiAoIWhleClcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXZlcml0eT0gZXhwZWN0cyBcdTAwM2NhbGdvcml0aG1cdTAwM2U6XHUwMDNjaGV4IGRpZ2VzdFx1MDAzZVwiKTtcbitcdCpoZXgrKyA9ICdcXDAnO1xuK1x0aSA9IG1hdGNoX3N0cmluZyhoYXNoX2FsZ29fbmFtZSwgSEFTSF9BTEdPX19MQVNULCByb290X2ltYWdlX3Zlcml0eSk7XG4rXHRpZiAoaSBcdTAwM2MgMClcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXZlcml0eT06IHVua25vd24gaGFzaCBhbGdvcml0aG0gXFxcIiVzXFxcIlwiLFxuK1x0XHQgICAgICByb290X2ltYWdlX3Zlcml0eSk7XG4rXHR3YW50X2FsZ28gPSBpO1xuK1x0d2FudF9zaXplID0gaGFzaF9kaWdlc3Rfc2l6ZVt3YW50X2FsZ29dO1xuK1x0aWYgKHN0cmxlbihoZXgpICE9IDIgKiB3YW50X3NpemUgfHwgaGV4MmJpbih3YW50LCBoZXgsIHdhbnRfc2l6ZSkpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9OiBleHBlY3RlZCAlZC1ieXRlIGhleCBkaWdlc3RcIixcbitcdFx0ICAgICAgd2FudF9zaXplKTtcbitcbitcdGdvdF9zaXplID0gZnN2ZXJpdHlfZ2V0X2RpZ2VzdChmaWxlX2lub2RlKGZpbGUpLCBnb3QsIE5VTEwsIFx1MDAyNmdvdF9hbGdvKTtcbitcdGlmICghZ290X3NpemUpXG4rXHRcdHBhbmljKFwiVkZTOiByb290IGltYWdlIGRvZXMgbm90IGhhdmUgZnN2ZXJpdHkgZW5hYmxlZFwiKTtcbitcdGlmIChnb3RfYWxnbyAhPSB3YW50X2FsZ28gfHwgZ290X3NpemUgIT0gd2FudF9zaXplIHx8XG4rXHQgICAgbWVtY21wKHdhbnQsIGdvdCwgd2FudF9zaXplKSlcbitcdFx0cGFuaWMoXCJWRlM6IHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0IG1pc21hdGNoOiBleHBlY3RlZCAlczolKnBoTiwgZ290ICVzOiUqcGhOXCIsXG4rXHRcdCAgICAgIGhhc2hfYWxnb19uYW1lW3dhbnRfYWxnb10sIHdhbnRfc2l6ZSwgd2FudCxcbitcdFx0ICAgICAgaGFzaF9hbGdvX25hbWVbZ290X2FsZ29dLCBnb3Rfc2l6ZSwgZ290KTtcbitcbitcdHByX2luZm8oXCJWRlM6IHZlcmlmaWVkIHJvb3QgaW1hZ2UgZnN2ZXJpdHkgZGlnZXN0ICVzOiUqcGhOXFxuXCIsXG4rXHRcdGhhc2hfYWxnb19uYW1lW3dhbnRfYWxnb10sIHdhbnRfc2l6ZSwgd2FudCk7XG4rfVxuKyNlbHNlIC8qICFDT05GSUdfRlNfVkVSSVRZICovXG4rc3RhdGljIHZvaWQgX19pbml0IHZlcmlmeV9yb290X2ltYWdlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHBhbmljKFwiVkZTOiByb290aW1hZ2V2ZXJpdHk9IHJlcXVpcmVzIENPTkZJR19GU19WRVJJVFlcIik7XG4rfVxuKyNlbmRpZiAvKiAhQ09ORklHX0ZTX1ZFUklUWSAqL1xuK1xuKy8qXG4rICogTW91bnQgdGhlIGFjdHVhbCByb290IGZpbGVzeXN0ZW0gZnJvbSB0aGUgaW1hZ2UgZmlsZSByb290aW1hZ2U9IG9uIHRoZVxuKyAqIGZpbGVzeXN0ZW0gdGhhdCB3YXMganVzdCBtb3VudGVkIGZyb20gcm9vdD0gKHRoZSBcImNhcnJpZXJcIiksIHNvIHRoYXRcbisgKiBpbWFnZS1iYXNlZCBzeXN0ZW1zIGNhbiBib290IHdpdGhvdXQgYW4gaW5pdHJhbWZzLlxuKyAqXG4rICogQ2FsbGVkIHdpdGggdGhlIGNhcnJpZXIgbW91bnRlZCBhdCAvcm9vdCBhbmQgdGhlIGN3ZCB0aGVyZS4gIFRoZSBpbWFnZVxuKyAqIGlzIGFsd2F5cyBtb3VudGVkIHJlYWQtb25seTsgXCJyb1wiL1wicndcIi9yb290ZmxhZ3M9IGtlZXAgYXBwbHlpbmcgdG8gdGhlXG4rICogY2Fycmllci4gIE9uIHN1Y2Nlc3MgdGhlIGN3ZCBpcyB0aGUgaW1hZ2UncyByb290LCByZWFkeSBmb3IgdGhlIHBpdm90XG4rICogaW4gcHJlcGFyZV9uYW1lc3BhY2UoKS4gIFRoZSBjYXJyaWVyIG1vdW50IGlzIG1vdmVkIHRvIHJvb3RpbWFnZXNyY2Rpcj1cbisgKiBpbnNpZGUgdGhlIGltYWdlIGlmIHNldCwgYW5kIGRldGFjaGVkIG90aGVyd2lzZTsgZWl0aGVyIHdheSB0aGUgaW1hZ2VcbisgKiBtb3VudCBrZWVwcyB0aGUgY2FycmllciBzdXBlcmJsb2NrIHBpbm5lZC5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgbW91bnRfcm9vdF9pbWFnZSh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBNU19SRE9OTFkgfCBNU19TSUxFTlQ7XG4rXHRjaGFyICpwYXRoLCAqZnNfbmFtZXMsICpwO1xuK1x0c3RydWN0IGZpbGUgKmZpbGU7XG4rXHRpbnQgbnVtX2ZzLCBpLCBlcnI7XG4rXG4rXHRpZiAocm9vdF9pbWFnZVswXSAhPSAnLycpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2U9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aFwiKTtcbitcbitcdHBhdGggPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbitcdGZzX25hbWVzID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwYXRoIHx8ICFmc19uYW1lcylcbitcdFx0cGFuaWMoXCJWRlM6IHVuYWJsZSB0byBtb3VudCByb290IGltYWdlOiBub3QgZW5vdWdoIG1lbW9yeVwiKTtcbitcbitcdGlmIChzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgXCIvcm9vdCVzXCIsIHJvb3RfaW1hZ2UpIFx1MDAzZT0gUEFUSF9NQVgpXG4rXHRcdHBhbmljKFwiVkZTOiByb290aW1hZ2U9IHBhdGggdG9vIGxvbmdcIik7XG4rXG4rXHQvKlxuK1x0ICogTm90aGluZyB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2FycmllciBydW5zIHlldCwgc28gdGhlIGltYWdlXG4rXHQgKiBjYW5ub3QgY2hhbmdlIGJldHdlZW4gdGhpcyBvcGVuIGFuZCB0aGUgbW91bnQgYmVsb3cuXG4rXHQgKi9cbitcdGZpbGUgPSBmaWxwX29wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0xBUkdFRklMRSwgMCk7XG4rXHRpZiAoSVNfRVJSKGZpbGUpKVxuK1x0XHRwYW5pYyhcIlZGUzogdW5hYmxlIHRvIG9wZW4gcm9vdCBpbWFnZSAlczogZXJyb3IgJWxkXCIsXG4rXHRcdCAgICAgIHJvb3RfaW1hZ2UsIFBUUl9FUlIoZmlsZSkpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2VfdmVyaXR5KVxuK1x0XHR2ZXJpZnlfcm9vdF9pbWFnZShmaWxlKTtcbitcbitcdGVyciA9IGluaXRfbWtkaXIoXCIvaW1hZ2VcIiwgMDcwMCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVFWElTVClcbitcdFx0cGFuaWMoXCJWRlM6IHVuYWJsZSB0byBjcmVhdGUgL2ltYWdlOiBlcnJvciAlZFwiLCBlcnIpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2VfZnNfbmFtZXMpXG4rXHRcdG51bV9mcyA9IHNwbGl0X2ZzX25hbWVzKGZzX25hbWVzLCBQQUdFX1NJWkUsXG4rXHRcdFx0XHRcdHJvb3RfaW1hZ2VfZnNfbmFtZXMpO1xuK1x0ZWxzZVxuK1x0XHRudW1fZnMgPSBsaXN0X2JkZXZfZnNfbmFtZXMoZnNfbmFtZXMsIFBBR0VfU0laRSk7XG4rXG4rXHRmb3IgKGkgPSAwLCBwID0gZnNfbmFtZXM7IGkgXHUwMDNjIG51bV9mczsgaSsrLCBwICs9IHN0cmxlbihwKSArIDEpIHtcbitcdFx0aWYgKCEqcClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZXJyID0gZG9fbW91bnRfcm9vdChwYXRoLCBcIi9pbWFnZVwiLCBwLCBmbGFncyxcbitcdFx0XHRcdCAgICByb290X2ltYWdlX21vdW50X2RhdGEpO1xuK1x0XHRzd2l0Y2ggKGVycikge1xuK1x0XHRjYXNlIDA6XG4rXHRcdFx0Z290byBtb3VudGVkO1xuK1x0XHRjYXNlIC1FQUNDRVM6XG4rXHRcdGNhc2UgLUVJTlZBTDpcbitcdFx0Y2FzZSAtRU5PVEJMSzpcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRwYW5pYyhcIlZGUzogdW5hYmxlIHRvIG1vdW50IHJvb3QgaW1hZ2UgJXM6IGVycm9yICVkXCIsXG4rXHRcdCAgICAgIHJvb3RfaW1hZ2UsIGVycik7XG4rXHR9XG4rXHRwYW5pYyhcIlZGUzogbm8gZmlsZXN5c3RlbSBjb3VsZCBtb3VudCByb290IGltYWdlICVzXCIsIHJvb3RfaW1hZ2UpO1xuK1xuK21vdW50ZWQ6XG4rXHRmcHV0KGZpbGUpO1xuK1xuK1x0aWYgKHJvb3RfaW1hZ2Vfc3JjZGlyKSB7XG4rXHRcdGlmIChyb290X2ltYWdlX3NyY2RpclswXSAhPSAnLycpXG4rXHRcdFx0cGFuaWMoXCJWRlM6IHJvb3RpbWFnZXNyY2Rpcj0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoXCIpO1xuK1x0XHRpZiAoc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFwiLiVzXCIsIHJvb3RfaW1hZ2Vfc3JjZGlyKSBcdTAwM2U9XG4rXHRcdCAgICBQQVRIX01BWClcbitcdFx0XHRwYW5pYyhcIlZGUzogcm9vdGltYWdlc3JjZGlyPSBwYXRoIHRvbyBsb25nXCIpO1xuK1x0XHRlcnIgPSBpbml0X21vdW50KFwiL3Jvb3RcIiwgcGF0aCwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cHJfZXJyKFwiVkZTOiBmYWlsZWQgdG8gbW92ZSB0aGUgcm9vdCBpbWFnZSdzIGNhcnJpZXIgZmlsZXN5c3RlbSB0byAlczogZXJyb3IgJWRcXG5cIixcbitcdFx0XHQgICAgICAgcm9vdF9pbWFnZV9zcmNkaXIsIGVycik7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKGVycilcbitcdFx0aW5pdF91bW91bnQoXCIvcm9vdFwiLCBNTlRfREVUQUNIKTtcbitcbitcdGtmcmVlKHBhdGgpO1xuK1x0a2ZyZWUoZnNfbmFtZXMpO1xuK31cbitcbiAvKiB3YWl0IGZvciBhbnkgYXN5bmNocm9ub3VzIHNjYW5uaW5nIHRvIGNvbXBsZXRlICovXG4gc3RhdGljIHZvaWQgX19pbml0IHdhaXRfZm9yX3Jvb3QoY2hhciAqcm9vdF9kZXZpY2VfbmFtZSlcbiB7XG5AQCAtNDgxLDYgKzY3NCw4IEBAIHZvaWQgX19pbml0IHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpXG4gXHRpZiAocm9vdF93YWl0KVxuIFx0XHR3YWl0X2Zvcl9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4gXHRtb3VudF9yb290KHNhdmVkX3Jvb3RfbmFtZSk7XG4rXHRpZiAocm9vdF9pbWFnZSlcbitcdFx0bW91bnRfcm9vdF9pbWFnZSgpO1xuIFx0ZGV2dG1wZnNfbW91bnQoKTtcbiBcbiBcdGlmIChpbml0X3Bpdm90X3Jvb3QoXCIuXCIsIFwiLlwiKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTk6NTA6MDAuOTc4ODU4MTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MTE1MDAyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogYHJvb3RpbWFnZT1gIEtlcm5lbCBQYXJhbWV0ZXIgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBgcm9vdGltYWdlPWAga2VybmVsIHBhcmFtZXRlci4gSXQgbG9va3MgbGlrZSBpdCBhbGxvd3MgYm9vdGluZyBmcm9tIGFuIGltYWdlIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBgcm9vdD1gIGZpbGVzeXN0ZW0sIG9mZmVyaW5nIGEgd2F5IGZvciBpbWFnZS1iYXNlZCBzeXN0ZW1zIHRvIGJvb3Qgd2l0aG91dCBuZWVkaW5nIGFuIGluaXRyYW1mcy4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyByZWxhdGVkIHBhcmFtZXRlcnMgbGlrZSBgcm9vdGltYWdlZmxhZ3M9YCwgYHJvb3RpbWFnZWZzdHlwZT1gLCBgcm9vdGltYWdlc3JjZGlyPWAsIGFuZCBgcm9vdGltYWdldmVyaXR5PWAuIEl0IG1vZGlmaWVzIGBpbml0L2RvX21vdW50cy5jYCwgYWRkaW5nIGZ1bmN0aW9ucyBsaWtlIGBtb3VudF9yb290X2ltYWdlKClgIChjYWxsZWQgZnJvbSBgcHJlcGFyZV9uYW1lc3BhY2UoKWApIGFuZCBgdmVyaWZ5X3Jvb3RfaW1hZ2UoKWAsIHdoaWNoIHVzZXMgYGZzdmVyaXR5X2dldF9kaWdlc3QoKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJdCdzIGVhcmx5IGJvb3QgY29kZSwgZGVhbGluZyB3aXRoIGtlcm5lbCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBhbmQgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4gU3l6a2FsbGVyLCBteSB0eXBpY2FsIHRvb2wsIHByaW1hcmlseSBmb2N1c2VzIG9uIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQsIHVzdWFsbHkgdGhyb3VnaCBzeXN0ZW0gY2FsbHMuIEkga25vdyBTeXprYWxsZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZnV6eiBib290IHBhcmFtZXRlcnMsIGJ1dCB0aGF0J3Mgbm90IGl0cyBwcmltYXJ5IGZvY3VzLCBhbmQgaXQgdHlwaWNhbGx5IGRvZXNuJ3QgcmVib290IGZvciBlYWNoIHRlc3QgY2FzZSB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkLlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgcG9wcyB1cDogaXMgdGhpcyBjb2RlIGFjY2Vzc2libGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IEl0J3MgbWFya2VkIGFzIGBfX2luaXRgLCBtZWFuaW5nIGl0J3Mgb25seSBleGVjdXRlZCBkdXJpbmcgYm9vdCBhbmQgdGhlbiBmcmVlZC4gQm90aCBgbW91bnRfcm9vdF9pbWFnZWAgYW5kIGB2ZXJpZnlfcm9vdF9pbWFnZWAgYXJlIGBfX2luaXRgLiBUaGlzIG1lYW5zIGl0IGNhbm5vdCBiZSByZWFjaGVkIGJ5IHN5emthbGxlcidzICpub3JtYWwqIGZ1enppbmcgcHJvY2VkdXJlLCB3aGljaCBvcGVyYXRlcyBwb3N0LWJvb3QuIFN5emthbGxlcidzIGZ1enppbmcgaXMgYmFzZWQgb24gc3lzY2FsbHMsIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGxvbmcgZ29uZSBieSB0aGVuLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIFN5emthbGxlcidzIGNvbW1hbmQgbGluZSBmdXp6aW5nIGNhcGFiaWxpdGllcywgYnV0IGZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhleSBhcmUgbGltaXRlZCBhbmQgbm90IHRoZSB1c3VhbCBtb2RlIG9mIG9wZXJhdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGBfX2luaXRgIGNvZGUgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblNvLCBzaW5jZSB0aGUgY29kZSBydW5zIG9ubHkgZHVyaW5nIGJvb3QsIGFuZCBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZnV6eiB0aGlzIHBhcnQsIHRoaXMgaXNuJ3QgZnV6emFibGUgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBJdCdzIGNvZGUgdGhhdCBydW5zIG9uY2UgYW5kIGlzIHRoZW4gZGlzY2FyZGVkLCBvdXRzaWRlIHRoZSBzY29wZSBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcuIFNpbmNlIGBwcmVwYXJlX25hbWVzcGFjZWAgaXMgY2FsbGVkIGZyb20gYGtlcm5lbF9pbml0X2ZyZWVhYmxlYCwgd2hpY2ggaXMgYF9faW5pdGAgdG9vLCBpdCBmdXJ0aGVyIHZhbGlkYXRlcyBteSBjb25jbHVzaW9uLiBgbW91bnRfcm9vdF9pbWFnZWAsIGB2ZXJpZnlfcm9vdF9pbWFnZWAsIGBzcGxpdF9mc19uYW1lc2AgYW5kIGBkb19tb3VudF9yb290YCBhcmUgYWxsIGFsc28gYF9faW5pdGAuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgYXNzZXNzbWVudCBpczpcblxuV29ydGhGdXp6aW5nOiBmYWxzZVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhjbHVzaXZlbHkgYF9faW5pdGAgZnVuY3Rpb25zIGFuZCBgX19pbml0ZGF0YWAgdmFyaWFibGVzIGluIGBpbml0L2RvX21vdW50cy5jYCB0byBlbmFibGUgYm9vdGluZyBmcm9tIGEgcm9vdCBpbWFnZSBmaWxlLiBUaGlzIGNvZGUgZXhlY3V0ZXMgb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IGFuZCBpcyBmcmVlZCwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuIEl0IGNhbm5vdCBiZSBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscyBhZnRlciBib290LlxuXG5Gb2N1c1N5bWJvbHM6IFtdXG5FbmFibGVDb25maWdzOiBbXVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQwLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE5OjUwOjEzLjg5MDM2MTAyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIGFuZCBfX2luaXRkYXRhIHZhcmlhYmxlcyBpbiBpbml0L2RvX21vdW50cy5jIHRvIHN1cHBvcnQgbmV3IGJvb3QgcGFyYW1ldGVycyAocm9vdGltYWdlPSwgZXRjLikuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGJlZm9yZSB0aGUgZnV6emVyIHN0YXJ0cywgYW5kIGlzIHN1YnNlcXVlbnRseSBmcmVlZC4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZnV6emVkIHZpYSBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgYW5kIF9faW5pdGRhdGEgdmFyaWFibGVzIGluIGluaXQvZG9fbW91bnRzLmMgdG8gc3VwcG9ydCBuZXcgYm9vdCBwYXJhbWV0ZXJzIChyb290aW1hZ2U9LCBldGMuKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgYmVmb3JlIHRoZSBmdXp6ZXIgc3RhcnRzLCBhbmQgaXMgc3Vic2VxdWVudGx5IGZyZWVkLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBmdXp6ZWQgdmlhIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowl9dkz[1] Phase: Running StartedAt: 2026-07-18 19:50:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9dkz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-18 19:50:25 +0000 UTC FinishedAt: 2026-07-18 19:50:48 +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,}