Name: series-workflownr4dh Phase: Failed StartedAt: 2026-07-04 22:17:59 +0000 UTC FinishedAt: 2026-07-04 22:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownr4dh[0] Phase: Succeeded StartedAt: 2026-07-04 22:17:59 +0000 UTC FinishedAt: 2026-07-04 22:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownr4dh[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 22:17:59 +0000 UTC FinishedAt: 2026-07-04 22:28: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+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5ODRlOGQyN2EyMTAwNmMxNmI4ODRjOTJiZGI2ZDcxMGEzNmYwZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxZGRmNWM5Njg4YzY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19nZXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbiYjNDM7e1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfZ2V0X3NzcGNjKGludCBwY2NfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsIFx1MDAyNnJhczJfc3NwY2MsIGVsZW0pIHtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJhczJfc3NwY2NfZ2V0KHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkclx0PSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbiYjNDM7XHRrZnJlZShzc3BjYyk7XG4mIzQzO2N0eF9mcmVlOlxuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTE2IHRvdF90YmxfbGVuO1xuJiM0MztcdHUxNiBpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4mIzQzO1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4mIzQzO1x0XHRwcl93YXJuKEZXX1dBUk4gXCYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGN0eF9saXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4mIzQzO1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbiYjNDM7XHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7XG4mIzQzO1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbiYjNDM7XHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbiYjNDM7XHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShwY3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IG5vbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbiYjNDM7XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuJiM0MztcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcJiMzNDsldVxcblwmIzM0OylcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4mIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuJiM0MztcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbiYjNDM7XHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbiYjNDM7XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbiYjNDM7XHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuJiM0MztcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4mIzQzO1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuJiM0MztcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4mIzQzO1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCYjNDM7PSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCYjNDM7PSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCYjNDM7PSBjZWMub1xuJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCYjNDM7PSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCYjNDM7PSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQmIzQzOz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhiZjcxMzc1ZWM1MDY4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCAmIzQzOzEsNTYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KVx0XCYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4mIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWJcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlvd3JpdGU4KDAsIFx1MDAyNmNvbW1vbi1cdTAwM2VzZXRfY2Fwc1swXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb3JlYWQ4KFx1MDAyNmNvbW1vbi1cdTAwM2VmZWF0dXJlc1swXSkgXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4mIzQzO1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHR1MzIgc2NydWJfcGFyYW1zX291dDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAgKGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIpIHtcbiYjNDM7XHRcdCpydW5uaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpydW5uaW5nID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XG4mIzQzO1x0aWYgKCEoKnJ1bm5pbmcpKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcnVubmluZykge1xuJiM0MztcdFx0XHRyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LVx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtc2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4mIzQzO1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbiYjNDM7XHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4mIzQzO1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xuJiM0MztcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCplbmFibGVkID0gcnVubmluZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuJiM0MztcdCAqIHdpdGggKGJhc2UgJiM0Mzsgc2l6ZSkgXHUwMDNlIChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbiYjNDM7XHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FUkFOR0U7XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3JhczJfc2NydWJfbmlkJWRcJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuJiM0MztcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXG4mIzQzO1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlbmFibGVfYmdfc2NydWI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbiYjNDM7XHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXG4mIzQzO1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuJiM0MztcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxuJiM0MztcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4mIzQzO1x0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuJiM0MztcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcbiYjNDM7XHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuJiM0MztcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlZHJ2X2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdGlmIChyYXMyX2N0eCBcdTAwMjZcdTAwMjYgcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcbiYjNDM7XHRjaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxuJiM0MztcdCAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZFxuJiM0MztcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcbiYjNDM7XHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcbiYjNDM7XHQgKiB0byBzdGFydCB0aGUgZGVtYW5kIHNjcnViYmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcdD0gUkFTX0ZFQVRfU0NSVUI7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuY3R4XHQ9IHJhczJfY3R4O1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkcnZfYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiYjNDM7XHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7LlwmIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuJiM0MztcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbiYjNDM7XHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0FDUElfUkFTMlwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmYjU4MGI1ZTM2MThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgJiM0MzsxLDg2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDtyYXMyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCYjMzQ7YWNwaV9yYXMyX21lbVwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xuJiM0MzsgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZGV2Olx0XHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xuJiM0MzsgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbiYjNDM7ICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuJiM0MzsgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuJiM0MzsgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuJiM0MzsgKlx0XHRcdFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCxcbiYjNDM7ICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbiYjNDM7ICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbiYjNDM7ICpcdFx0XHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cbiYjNDM7ICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAYmFzZTpcdFx0QmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZTpcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXG4mIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBvZF9zY3J1YjpcdFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXG4mIzQzOyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuJiM0MzsgKlx0XHRcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4mIzQzOyAqIEBkcnZfYWN0aXZlOlx0XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcnZfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5ODRlOGQyN2EyMTAwNmMxNmI4ODRjOTJiZGI2ZDcxMGEzNmYwZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgpAQCAtMjAsMTEgJiM0MzsyMCw3IEBAIEtlcm5lbFZlcnNpb246CTYuMTUKIENvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKIAkJKFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCi0JCWZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy4KLQkJVGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuCi0KLQkJVGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZAotCQlvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS4KJiM0MzsJCWZvciBkZW1hbmQgc2NydWJiaW5nLgogCiBXaGF0OgkJL3N5cy9idXMvZWRhYy9kZXZpY2VzLyZsdDtkZXYtbmFtZSZndDsvc2NydWJYL3NpemUKIERhdGU6CQlNYXJjaCAyMDI1CkBAIC0zNCw2ICYjNDM7MzAsMTQgQEAgRGVzY3JpcHRpb246CiAJCShSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWQKIAkJKG9uLWRlbWFuZCBzY3J1YmJpbmcpLgogCiYjNDM7V2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kCiYjNDM7RGF0ZToJCUphbiAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNi4xOQomIzQzO0NvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzCiYjNDM7CQlzdXBwb3J0ZWQgb25seSBpZiB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdXBwb3J0IGl0LgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzFkZGY1Yzk2ODhjNjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJaW50CQkJCW1wYXJfY291bnQ7CiYjNDM7CWludAkJCQlwY2NfaWQ7CiYjNDM7CXUxNgkJCQlsYXN0X2NtZDsKJiM0MzsJc3RydWN0IGtyZWYJCQlrcmVmOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmUKJiM0MzsgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlCiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMCiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMAomIzQzOyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDMKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwCiYjNDM7I2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMAomIzQzOwomIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7c3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXUzMiBjYXBfc3RhdHVzOwomIzQzOwl1MTYgc3RhdHVzOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUKJiM0MzsJICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuCiYjNDM7CSAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLgomIzQzOwkgKgomIzQzOwkgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mCiYjNDM7CSAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGUKJiM0MzsJICogYml0IGlzIHNldC4KJiM0MzsJICovCiYjNDM7CXJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMsIHN0YXR1cywKJiM0MzsJCQkJCXN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSwKJiM0MzsJCQkJCVBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtJmd0O2RlYWRsaW5lX3VzKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCwgcmMpOwomIzQzOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19FUlJPUikgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kKTsKJiM0MzsJCXN0YXR1cyAmYW1wOz0gflBDQ19TVEFUVVNfRVJST1I7CiYjNDM7CQlpb3dyaXRlMTYoc3RhdHVzLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cyk7CiYjNDM7CQlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqLwomIzQzOwlybWIoKTsKJiM0MzsJY2FwX3N0YXR1cyA9IGlvcmVhZDMyKCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJc3dpdGNoIChjYXBfc3RhdHVzKSB7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDoKJiM0MzsJCXJjID0gLUVQRVJNOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0JVU1k6CiYjNDM7CQlyYyA9IC1FQlVTWTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9GQUlMRUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQToKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsCiYjNDM7ICogQHJhczJfY3R4Oglwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlCiYjNDM7ICogQGNtZDoJUkFTMiBjb21tYW5kIHRvIHNlbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlOwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwlzNjQgdGltZV9kZWx0YTsKJiM0MzsJdTE2IHZhbDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJc3NwY2MgPSByYXMyX2N0eC0mZ3Q7c3NwY2M7CiYjNDM7CWdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcGNjX2NoYW5uZWwgPSBzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bQomIzQzOwkgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mCiYjNDM7CSAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KSB7CiYjNDM7CQl0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCAmZ3Q7IHRpbWVfZGVsdGEpCiYjNDM7CQkJZnNsZWVwKHNzcGNjLSZndDtwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZQomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhbgomIzQzOwkgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBubwomIzQzOwkgKiBsaW1pdGF0aW9uLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0CiYjNDM7CSAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZQomIzQzOwkgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kCiYjNDM7CSAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVIKJiM0MzsJICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcGFyKSB7CiYjNDM7CQlpZiAoIXNzcGNjLSZndDttcGFyX2NvdW50KSB7CiYjNDM7CQkJdGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KTsKJiM0MzsJCQlpZiAoKHRpbWVfZGVsdGEgJmx0OyA2MCAqIE1TRUNfUEVSX1NFQykgJmFtcDsmYW1wOyBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KSB7CiYjNDM7CQkJCWRldl9kYmcocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdCYjMzQ7LCBjbWQpOwomIzQzOwkJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQl9CiYjNDM7CQkJc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpOwomIzQzOwkJCXNzcGNjLSZndDttcGFyX2NvdW50ID0gc3NwY2MtJmd0O3BjY19tcGFyOwomIzQzOwkJfQomIzQzOwkJc3NwY2MtJmd0O21wYXJfY291bnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovCiYjNDM7CWlvd3JpdGUxNihjbWQsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7Y29tbWFuZCk7CiYjNDM7CiYjNDM7CS8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqLwomIzQzOwlpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBSaW5nIGRvb3JiZWxsICovCiYjNDM7CXJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsICZhbXA7Y21kKTsKJiM0MzsJLyoKJiM0MzsJICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvbgomIzQzOwkgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm4ocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcbiYjMzQ7LCBjbWQsIHJjKTsKJiM0MzsJCS8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqLwomIzQzOwkJdmFsID0gaW9yZWFkMTYoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJdmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFOwomIzQzOwkJaW93cml0ZTE2KHZhbCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtsYXN0X2NtZCA9IGNtZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlCiYjNDM7CSAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmcKJiM0MzsJICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFubmVsLSZndDttYm94LSZndDt0eGRvbmVfaXJxKQomIzQzOwkJbWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgJiMzNDthY3BpX3JhczImIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID0KJiM0MzsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZGVsKCZhbXA7c3NwY2MtJmd0O2VsZW0pOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO3NzcGNjLSZndDtrcmVmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJa3JlZl9wdXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZiwgICZhbXA7cmFzMl9saXN0X3BjY19yZWxlYXNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX2dldF9zc3BjYyhpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCAmYW1wO3JhczJfc3NwY2MsIGVsZW0pIHsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX2lkICE9IHBjY19pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhczJfc3NwY2NfZ2V0KHNzcGNjKTsKJiM0MzsJCXJldHVybiBzc3BjYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlpZiAocGNjX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7CiYjNDM7CWlmIChzc3BjYykgewomIzQzOwkJcmFzMl9jdHgtJmd0O3NzcGNjCQk9IHNzcGNjOwomIzQzOwkJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7ZGV2CQk9CiYjNDM7CQkJc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwkJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNzcGNjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7c3NwY2MtJmd0O21ib3hfY2xpZW50LCBwY2NfaWQpOwomIzQzOwlpZiAoSVNfRVJSKHBjY19jaGFuKSkgewomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW4tJmd0O3NobWVtKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtwY2NfaWQJCT0gcGNjX2lkOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2NoYW4JCT0gcGNjX2NoYW47CiYjNDM7CXNzcGNjLSZndDtjb21tX2FkZHIJPSBwY2NfY2hhbi0mZ3Q7c2htZW07CiYjNDM7CWlmIChwY2NfY2hhbi0mZ3Q7bGF0ZW5jeSkKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLSZndDtsYXRlbmN5OwomIzQzOwllbHNlCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXJ0dAkJPSBwY2NfY2hhbi0mZ3Q7bWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcGFyCQk9IHBjY19jaGFuLSZndDttYXhfYWNjZXNzX3JhdGU7CiYjNDM7CXNzcGNjLSZndDttYm94X2NsaWVudC5rbm93c190eGRvbmUJPSB0cnVlOwomIzQzOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwlyYXMyX3NzcGNjX2dldChzc3BjYyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXJhczJfY3R4LSZndDtkZXYJCT0gcGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwl1MzIgY29tcF9uaWQ7CiYjNDM7CWludCBpZCwgcmM7CiYjNDM7CiYjNDM7CWNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpOwomIzQzOwlpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXG4mIzM0OywgY2hhbm5lbCwgcHhtX2luc3QpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQgPSBjb21wX25pZDsKJiM0MzsKJiM0MzsJcmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7CiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXG4mIzM0OywgY2hhbm5lbCwKJiM0MzsJCQkgcHhtX2luc3QsIHJjKTsKJiM0MzsJCWdvdG8gY3R4X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBpZGFfYWxsb2MoJmFtcDtyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApIHsKJiM0MzsJCXJjID0gaWQ7CiYjNDM7CQlnb3RvIHBjY19mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmlkCQk9IGlkOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5uYW1lCQk9IG5hbWU7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5yZWxlYXNlCT0gcmFzMl9yZWxlYXNlOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucGFyZW50CT0gcmFzMl9jdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gaWRhX2ZyZWU7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhczJfY3R4OwomIzQzOwomIzQzO2lkYV9mcmVlOgomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBpZCk7CiYjNDM7cGNjX2ZyZWU6CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO2N0eF9mcmVlOgomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZSgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MTYgdG90X3RibF9sZW47CiYjNDM7CXUxNiBpOwomIzQzOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YoKnJhczJfdGFiKSkgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7QUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAmZ3Q7IFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICYjNDM7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgdG90X3RibF9sZW4pIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O1JBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGN0eF9saXN0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwY2NfZGVzY19saXN0LSZndDtmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC0mZ3Q7Y2hhbm5lbF9pZCwKJiM0MzsJCQkJCSAgcGNjX2Rlc2NfbGlzdC0mZ3Q7aW5zdGFuY2UpOwomIzQzOwkJLyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovCiYjNDM7CQlpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihyYXMyX2N0eCkpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXG4mIzM0OywgUFRSX0VSUihyYXMyX2N0eCkpOwomIzQzOwkJCWZvciAoOyBpICZndDsgMDsgaS0tKSB7CiYjNDM7CQkJCWlmIChwY3R4X2xpc3RbaSAtIDFdKQomIzQzOwkJCQkJcmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7CiYjNDM7CQkJfQomIzQzOwkJCWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpOwomIzQzOwkJfQomIzQzOwkJcGN0eF9saXN0W2ldID0gcmFzMl9jdHg7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCiYjNDM7ICoKJiM0MzsgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhbgomIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMgomIzQzOyAqIG1lbW9yeSBmZWF0dXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbm9uZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CiYjNDM7CWFjcGlfc3RhdHVzIHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKJiM0MzsJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXG4mIzM0OywgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSkKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHsKIAlTQ1JVQl9BRERSRVNTLAogCVNDUlVCX1NJWkUsCiAJU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsCiYjNDM7CVNDUlVCX0VOQUJMRV9ERU1BTkQsCiAJU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX01BWF9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sCkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgJiMzNDsldVxuJiMzNDspCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQpAQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIAogc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZCkKQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50CiAJCQkJcmV0dXJuIDA0NDQ7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDoKJiM0MzsJCWlmIChvcHMtJmd0O2dldF9lbmFibGVkX29kKSB7CiYjNDM7CQkJaWYgKG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2QpCiYjNDM7CQkJCXJldHVybiBhLSZndDttb2RlOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIDA0NDQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKIAljYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjoKIAkJaWYgKG9wcy0mZ3Q7Z2V0X21pbl9jeWNsZSkKIAkJCXJldHVybiBhLSZndDttb2RlOwpAQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldiwKIAkJW1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSwKIAkJW1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSwKIAkJW1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLAomIzQzOwkJW1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSwKIAkJW1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNCiAJICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvbgogCSAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuCiAKJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMgomIzQzOwl0cmlzdGF0ZSAmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJX1JBUzIKJiM0MzsJZGVwZW5kcyBvbiBFREFDCiYjNDM7CWRlcGVuZHMgb24gRURBQ19TQ1JVQgomIzQzOwlzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8KJiM0MzsJaGVscAomIzQzOwkgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMgomIzQzOwkgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0bwomIzQzOwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlcwomIzQzOwkgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyCiYjNDM7CSAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuCiYjNDM7CiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQppbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDcgQEAKIG9iai0kKENPTkZJR19SQVMpCSYjNDM7PSByYXMubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkmIzQzOz0gZGVidWdmcy5vCiBvYmotJChDT05GSUdfUkFTX0NFQykJJiM0Mzs9IGNlYy5vCiYjNDM7b2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpCSYjNDM7PSBhY3BpX3JhczIubwogCiBvYmotJChDT05GSUdfUkFTX0ZNUE0pCSYjNDM7PSBhbWQvZm1wbS5vCiBvYmoteQkJCSYjNDM7PSBhbWQvYXRsLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOGJmNzEzNzVlYzUwNjgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpAQCAtMCwwICYjNDM7MSw1NjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkJJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWRhYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMAomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMQomIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMgomIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4CiYjNDM7I2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwCiYjNDM7CiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pCiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlvd3JpdGU4KDAsICZhbXA7Y29tbW9uLSZndDtzZXRfY2Fwc1swXSk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQ4KCZhbXA7Y29tbW9uLSZndDtmZWF0dXJlc1swXSkgJmFtcDsgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19vdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoIXJ1bm5pbmcpIHsKJiM0MzsJCQlyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LSZndDtkZXYsIHJhczJfY3R4LCB0cnVlKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJKm1pbiA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CSptYXggPSByYXMyX2N0eC0mZ3Q7bWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuCiYjNDM7CSAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcmFzMl9jdHgtJmd0O2JnX3NjcnViOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgfHwgcnVubmluZykKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkJaW93cml0ZTY0KDAsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSzsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwkJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghcmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTsKJiM0MzsJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuJiMzNDssCiYjNDM7CQkJc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgPSBlbmFibGU7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlOwomIzQzOwkJLyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovCiYjNDM7CQlyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqZW5hYmxlZCA9IHJ1bm5pbmc7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtJmd0O2NvbW1fYWRkcik7CiYjNDM7CXUzMiBzY3J1Yl9wYXJhbXNfaW47CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFlbmFibGUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWQKJiM0MzsJICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSAmZ3Q7IChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGEKJiM0MzsJICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7c2l6ZSB8fCByYXMyX2N0eC0mZ3Q7YmFzZSAmbHQ7IHJhczJfY3R4LSZndDttZW1fYmFzZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCByYXMyX2N0eC0mZ3Q7YmFzZSwgcmFzMl9jdHgtJmd0O3NpemUpOwomIzQzOwkJcmV0ID0gLUVSQU5HRTsKJiM0MzsJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDtiYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7YmFzZSA9IDA7CiYjNDM7CQkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZW5hYmxlOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiAmYW1wOyZhbXA7IHJhczJfY3R4LSZndDtkcnZfYWN0aXZlICZhbXA7JmFtcDsgIXJhczJfY3R4LSZndDt0aHJlYWQpIHsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgdXNlci9maXJtd2FyZSBtYXkgbmVlZAomIzQzOwkJCSAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2VuYWJsZV9iZ19zY3J1YjoKJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlOwomIzQzOwkJcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJ2X2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpZiAocmFzMl9jdHggJmFtcDsmYW1wOyByYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQlrdGhyZWFkX3N0b3AocmFzMl9jdHgtJmd0O3RocmVhZCk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwlzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7CiYjNDM7CWNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlCiYjNDM7CSAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZAomIzQzOwkgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzCiYjNDM7CSAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUgomIzQzOwkgKiB0byBzdGFydCB0aGUgZGVtYW5kIHNjcnViYmluZy4KJiM0MzsJICovCiYjNDM7CXN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwludW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJaWYgKCFudW1fc3Bhbm5lZF9wYWdlcykgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXG4mIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzOwomIzQzOwllbHNlCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZTsKJiM0MzsKJiM0MzsJc3ByaW50ZihzY3J1Yl9uYW1lLCAmIzM0O2FjcGlfcmFzX21lbSVkJiMzNDssIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwomIzQzOwlyYXNfZmVhdHVyZXMuZnRfdHlwZQk9IFJBU19GRUFUX1NDUlVCOwomIzQzOwlyYXNfZmVhdHVyZXMuaW5zdGFuY2UJPSAwOwomIzQzOwlyYXNfZmVhdHVyZXMuc2NydWJfb3BzCT0gJmFtcDtyYXMyX3NjcnViX29wczsKJiM0MzsJcmFzX2ZlYXR1cmVzLmN0eAk9IHJhczJfY3R4OwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJ2X2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBlZGFjX2Rldl9yZWdpc3RlcigmYW1wO2F1eGRldi0mZ3Q7ZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCAmYW1wO3Jhc19mZWF0dXJlcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHsKJiM0MzsJeyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7LiYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsCiYjNDM7CS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsCiYjNDM7CS5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0FDUElfUkFTMiYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9yYXMyLmggYi9pbmNsdWRlL2FjcGkvcmFzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKQEAgLTAsMCAmIzQzOzEsODYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSAomIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXV4aWxpYXJ5X2J1cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWlsYm94X2NsaWVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2U7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnkKJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7cmFzMiYjMzQ7CiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlcwomIzQzOyAqIEBhZGV2OgkJQXV4aWxpYXJ5IGRldmljZSBvYmplY3QKJiM0MzsgKiBAY29tbV9hZGRyOgkJUG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBkZXY6CQlQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQwomIzQzOyAqIEBzc3BjYzoJCVBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQHBjY19sb2NrOgkJUG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQHN5c19jb21wX25pZDoJTm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZQomIzQzOyAqCQkJaXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyCiYjNDM7ICoJCQlQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsCiYjNDM7ICoJCQlGaWVsZDogSW5zdGFuY2UKJiM0MzsgKiBAbWVtX2Jhc2U6CQlCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBtZW1fc2l6ZQkJU2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAYmFzZToJCUJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzaXplOgkJU2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6CUN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3VycwomIzQzOyAqIEBzZXRfc2NydWJfY3ljbGU6CVNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzCiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZToJTWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6CU1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAb2Rfc2NydWI6CQlTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbikKJiM0MzsgKiBAYmdfc2NydWI6CQlTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nCiYjNDM7ICogQHJlZW5hYmxlX2JnX3NjcnViOglGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZAomIzQzOyAqCQkJc2NydWJiaW5nIGlzIGZpbmlzaGVkCiYjNDM7ICogQHRocmVhZDoJCURlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWQKJiM0MzsgKiBAZHJ2X2FjdGl2ZToJCUZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCByYXMyX21lbV9jdHggewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZQkJYWRldjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtCSpjb21tX2FkZHI7CiYjNDM7CXN0cnVjdCBkZXZpY2UJCQkqZGV2OwomIzQzOwl2b2lkCQkJCSpzc3BjYzsKJiM0MzsJc3RydWN0IG11dGV4CQkJKnBjY19sb2NrOwomIzQzOwl1MzIJCQkJc3lzX2NvbXBfbmlkOwomIzQzOwl1NjQJCQkJbWVtX2Jhc2U7CiYjNDM7CXU2NAkJCQltZW1fc2l6ZTsKJiM0MzsJdTY0CQkJCWJhc2U7CiYjNDM7CXU2NAkJCQlzaXplOwomIzQzOwl1OAkJCQlzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CXU4CQkJCXNldF9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWluX3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltYXhfc2NydWJfY3ljbGU7CiYjNDM7CWJvb2wJCQkJb2Rfc2NydWI7CiYjNDM7CWJvb2wJCQkJYmdfc2NydWI7CiYjNDM7CWJvb2wJCQkJcmVlbmFibGVfYmdfc2NydWI7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKJiM0MzsJYm9vbAkJCQlkcnZfYWN0aXZlOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzIKJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTsKJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaApAQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQgewogICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS4KICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi4KICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLgomIzQzOyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLgomIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi4KICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7CiAJaW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpOwogCWludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwogCWludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CWludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwomIzQzOwlpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwogCWludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7CiAJaW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTsKIAlpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgb2YgQUNQSSBSQVMyIFN1cHBvcnQgYW5kIE1lbW9yeSBTY3J1YmJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIEFDUEkgUkFTMiBzdXBwb3J0IGFuZCBtZW1vcnkgc2NydWJiaW5nLiBJdCYjMzk7cyBnb3QgY2hhbmdlcyBpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AsIGBkcml2ZXJzL3Jhcy9hY3BpX3JhczIuY2AsIGFuZCBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFDUEkgUkFTMiBsZWFucyBoZWF2aWx5IG9uIEFDUEkgdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJBUzIgdGFibGUsIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpLgoKRmlyc3QsIHRoZSBRRU1VL0dDRSBxdWVzdGlvbi4gRG9lcyB0aGUgZmlybXdhcmUgYWN0dWFsbHkgKnByb3ZpZGUqIGEgUkFTMiB0YWJsZSBieSBkZWZhdWx0PyBUeXBpY2FsbHksIG5vLiBRRU1VIGRvZXNuJiMzOTt0IHVzdWFsbHkgZXhwb3NlIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkLiBCdXQgdGhlcmUmIzM5O3MgU3l6a2FsbGVyLiBDYW4gaXQgaW5qZWN0IEFDUEkgdGFibGVzPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBhbmdsZSB3ZSBjYW4gZXhwbG9pdD8KCkxldCBtZSBzZWUuLi4gYGFjcGlfcmFzMl9pbml0YCBnZXRzIGNhbGxlZCBmcm9tIGBhY3BpX2luaXRgIGluIGBkcml2ZXJzL2FjcGkvYnVzLmNgLiBBbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAuLi4pYC4gSWYgdGhlIHRhYmxlIGlzbiYjMzk7dCBwcmVzZW50LCBpdCBqdXN0IHJldHVybnMuIFRoYXQmIzM5O3MgYSBnb29kIHNhbml0eSBjaGVjayBpbiB0aGUgY29kZSwgYnV0IGl0IG1ha2VzIHRoZSB0YWJsZSBwcmVzZW5jZSAqY3JpdGljYWwqLgoKU3l6a2FsbGVyICpjYW4qIGluamVjdCB0YWJsZXMsIHJpZ2h0PyBJIHNlZW0gdG8gcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfQUNQSV9UQUJMRV9VUEdSQURFYCBhbmQgaW5pdHJkLiBCdXQsIGl0JiMzOTtzIG9mdGVuIGEgcGFpbiB0byB0YXJnZXQgc3BlY2lmaWMgQUNQSSB0YWJsZSBpbmplY3Rpb25zLiBBbmQsIHRoYXQgUENDIGludGVyYWN0aW9uLi4uIGRvZXMgU3l6a2FsbGVyJiMzOTtzIHRhYmxlIGluamVjdGlvbiBjb3ZlciB0aGF0IHByb3Blcmx5LCBvciBkb2VzIGl0IGxlYXZlIHVzIGV4cG9zZWQ/IEhvbmVzdGx5LCB0aGUgaW5qZWN0aW9uIHRocm91Z2ggYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQgaXMgaGFyZCB0byByZWFjaCB1bmxlc3Mgd2UgYXJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXQuCgpTbywgaWYgYGFjcGlfZ2V0X3RhYmxlYCBmYWlscywgYGFjcGlfcmFzMl9pbml0YCBkb2VzIG5vdGhpbmcuIElzIHRoZXJlICphbnkqIG90aGVyIGVudHJ5IHBvaW50PyBTb2Z0d2FyZSBlbXVsYXRpb24sIHBlcmhhcHM/IFBDQyBpcyB0aGUgQUNQSSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwuIFRoZSBkcml2ZXIganVzdCBxdWlldGx5IGRvZXMgbm90aGluZyBpZiBpdCBjYW4mIzM5O3QgZmluZCB0aGUgdGFibGUuIEJ1dCBoYW5nIG9uLCBTeXprYWxsZXIgZG9lcyBmdXp6IEFDUEkgdGFibGVzIHNvbWV0aW1lcywgc28gdGhhdCBpcyBhIHRoaW5nIHRvIGtlZXAgaW4gbWluZC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWdzOiBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBHb3QgaXQuCgpPa2F5LCBjYW4gd2UgZnV6eiB0aGlzPyBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhbiBhdXhpbGlhcnkgZGV2aWNlIGlmIHRoZSBSQVMyIHRhYmxlICppcyogcHJlc2VudCwgYW5kIHRoZW4gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQuIFRoYXQgdXNlcyBQQ0MuIFRvIGZ1enogZWZmZWN0aXZlbHksIHdlJiMzOTtkICpuZWVkKiB0aGF0IFJBUzIgdGFibGUuIElzIGl0IGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseSwgdGhpcyBpcyBhIG5ldyBkcml2ZXIsIHBhcnNpbmcgQUNQSSB0YWJsZXMsIGFuZCBleHBvc2luZyBzeXNmcyBpbnRlcmZhY2VzLiBIaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzIHRoZXJlLiBCdXQgaWYgd2UgY2FuJiMzOTt0IHJlbGlhYmx5IGluamVjdCB0aGUgQUNQSSB0YWJsZS4uLiBpdCB3aWxsIGJlIHRvdWdoIGZvciBTeXprYWxsZXIgdG8gdHJpZ2dlciBpdC4gSXQgd291bGQgbmVlZCB0byBoYXZlIHNvbWV0aGluZyBsaWtlIGEgYHN5el9hY3BpX3NldHVwYCBjYWxsLCBvciB0aGUgY2FwYWJpbGl0eSB0byBtb3VudCBjb25maWdmcyBhbmQgaW5qZWN0IEFDUEkgdGFibGVzLgoKTGV0JiMzOTtzIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgY2hhbmdlIGFkZHMgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgcmVhY2hhYmxlIGlmICphbnkqIEVEQUMgZHJpdmVyIGNhbGxzIGBzZXRfZW5hYmxlZF9vZGAuIEl0IHNlZW1zIGBhY3BpX3JhczIuY2AgKmlzKiB0aGUgb25seSBvbmUgY3VycmVudGx5IHVzaW5nIGl0LiBTbyBpdCBtYWtlcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgUkFTMiB0YWJsZSBsZXNzIG9mIGEgbGltaXRpbmcgZmFjdG9yLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHVzZXJzIG9mIGBlZGFjX3NjcnViX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWRhY19zY3J1Yl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jeGwvY29yZS9lZGFjLmM9MzI0PXN0YXRpYyBpbnQgY3hsX3BhdHJvbF9zY3J1Yl9zZXRfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSxcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL2VkYWMuYy0zNTUtXG5kcml2ZXJzL2N4bC9jb3JlL2VkYWMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyBjeGxfcHNfc2NydWJfb3BzID0ge1xuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU3LVx0LmdldF9lbmFibGVkX2JnID0gY3hsX3BhdHJvbF9zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz00MD1zdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTQ0LVx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcdFx0XFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjQ1Olx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpvcHMgPSBjdHgtXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1x0XHRcXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtNDYtXHR0eXBlIGRhdGE7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmM9NjU9c3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmMtNzAtXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdF9jdHggKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShyYXNfZmVhdF9kZXYpO1x0XHRcXFxuZHJpdmVycy9lZGFjL3NjcnViLmM6NzE6XHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cdTAwM2VzY3J1YltpbnN0XS5zY3J1Yl9vcHM7XHRcdFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy03Mi1cdHR5cGUgZGF0YTtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTk3LVx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjk4Olx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpvcHMgPSBjdHgtXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xuZHJpdmVycy9lZGFjL3NjcnViLmMtOTktXG4tLVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9MzczPXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00NjgtXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo0Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ3MC1cdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02NzktLyoqXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODA6ICogc3RydWN0IGVkYWNfc2NydWJfb3BzIC0gc2NydWIgZGV2aWNlIG9wZXJhdGlvbnMgKGFsbCBlbGVtZW50cyBvcHRpb25hbClcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4MS0gKiBAcmVhZF9hZGRyOiByZWFkIGJhc2UgYWRkcmVzcyBvZiBzY3J1YmJpbmcgcmFuZ2UuXG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjkzLSAqL1xuaW5jbHVkZS9saW51eC9lZGFjLmg6Njk0OnN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02OTUtXHRpbnQgKCpyZWFkX2FkZHIpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSk7XG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODYxPXN0cnVjdCBlZGFjX2Rldl9kYXRhIHtcbmluY2x1ZGUvbGludXgvZWRhYy5oLTg2Mi1cdHVuaW9uIHtcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg2MzpcdFx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpzY3J1Yl9vcHM7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjQtXHRcdGNvbnN0IHN0cnVjdCBlZGFjX2Vjc19vcHMgKmVjc19vcHM7XG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODc5PXN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODItXHR1bmlvbiB7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo4ODM6XHRcdGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyAqc2NydWJfb3BzO1xuaW5jbHVkZS9saW51eC9lZGFjLmgtODg0LVx0XHRjb25zdCBzdHJ1Y3QgZWRhY19lY3Nfb3BzICplY3Nfb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENYTCBEcml2ZXImIzM5O3MgUkFTMiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBDWEwgZHJpdmVyIHJlbGllcyBvbiBgZWRhY19zY3J1Yl9vcHNgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGUgbmV3IGBlbmFibGVfZGVtYW5kYCBmZWF0dXJlLCB0aGF0JiMzOTtzIGV4Y2x1c2l2ZWx5IGluIGBhY3BpX3JhczIuY2AuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsICpjYW4qIHdlIGV2ZW4gcmVhY2ggYGFjcGlfcmFzMi5jYD8gSXQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBhbiBBQ1BJIFJBUzIgdGFibGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGhlbHAgaGVyZT8gSSBrbm93IGl0IGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL2FjcGkvdGFibGVgLCBzbyBsZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGRlc2NyaXB0aW9ucyBmb3IgQUNQSSB0YWJsZSBpbmplY3Rpb24gYXZhaWxhYmxlIGluIHN5emthbGxlci4KClJpZ2h0LCBzeXprYWxsZXIgKmNhbiogZG8gaXQsIHRoYXQmIzM5O3MgZ29vZCBuZXdzLiBIb3dldmVyLCBjb25zdHJ1Y3RpbmcgYSB2YWxpZCBSQVMyIHRhYmxlIGFuZCBhIHVzYWJsZSBQQ0MgY2hhbm5lbCBpcyBhIGRpZmZlcmVudCBjaGFsbGVuZ2UuIEkgc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXcgYGFjcGlfcmFzMi5jYCBkcml2ZXIsIGFuZCB0aGF0IGl0IHBhcnNlcyBBQ1BJIHRhYmxlcyBhbmQgaW50ZXJhY3RzIHdpdGggUENDLiBJdCBpcyBsaWtlbHkgdGhlIGF1dGhvciYjMzk7cyBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoaXMgbmV3IGRyaXZlciBpcyB1c2VkIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgd2hlbiBpdCBpcyB1c2VkLiBJIGFtIG5vIGxvbmdlciB3b3JyaWVkIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIG5ldyBkcml2ZXIgYmUgZXhwbG9pdGVkLgoKTm93LCBhIGNyaXRpY2FsIHRob3VnaHQ6IGlzIHRoaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gVGhlbiBJIHJlbWVtYmVyZWQ6IFFFTVUgKmRvZXMqIHN1cHBvcnQgQUNQSSB0YWJsZSBpbmplY3Rpb24uIEFuZCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogQUNQSSB0YWJsZXMuIEJ1dCBoZXJlJiMzOTtzIHRoZSBzbmFnLCBQQ0MsIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwsIG5lZWRzIGEgUENDIG1haWxib3ggY2hhbm5lbC4gTm93LCBkb2VzIFFFTVUgcHJvdmlkZSBvbmU/IFRoaXMgaXMgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBQQ0MgbWFpbGJveCBkcml2ZXIgdGhhdCBjYW4gYmUgbG9hZGVkLCBvciwgaWRlYWxseSwgZnV6emVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgdnVsbmVyYWJpbGl0eSB3b3JrLCBpZiBpdCBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9hY3BpX3BjYy5jPTQ5PWFjcGlfcGNjX2FkZHJlc3Nfc3BhY2Vfc2V0dXAoYWNwaV9oYW5kbGUgcmVnaW9uX2hhbmRsZSwgdTMyIGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRhdGEtXHUwMDNlZG9uZSk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYzo2ODpcdGRhdGEtXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2ZGF0YS1cdTAwM2VjbCwgY3R4LVx1MDAzZXN1YnNwYWNlX2lkKTtcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY5LVx0aWYgKElTX0VSUihkYXRhLVx1MDAzZXBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTcxLVx0aWYgKHBjY19zc19pZHggXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM6NTcyOlx0XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZjcHBjX21ib3hfY2wsIHBjY19zc19pZHgpO1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTI4Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxuZHJpdmVycy9hY3BpL3JhczIuYzozMDU6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA2LVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNz1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExNy1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE4Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2dW5jb3JlLVx1MDAzZWNsLCB1bmNvcmUtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExOS1cdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz02MDk9c3RhdGljIGludCB4Z2VuZV9od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXHRcdGNsLVx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjY2ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzktXHRcdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlx0XHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cbi0tXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE4OC1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cdTAwM2VjaGFuX2lkKTtcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xuaW5jbHVkZS9hY3BpL3BjYy5oLTM5LWV4dGVybiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbik7XG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjQyOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWNjZXNzaWJpbGl0eSBvZiB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHN5emthbGxlciwgd2l0aCBpdHMgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCAqbWlnaHQqIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBQQ0MgbWFpbGJveCBwYXRod2F5LiBUaGUgbG9naWMgZ29lczogYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgcmVxdWVzdHMgdGhlIG1haWxib3ggY2hhbm5lbCwgYW5kIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaW5pdGlhbGl6ZXMgZnJvbSB0aGUgQUNQSSBQQ0NUIHRhYmxlLiBTeXprYWxsZXIgaW5qZWN0aW5nIGJvdGggYSBQQ0NUIHRhYmxlIGFuZCBhIFJBUzIgdGFibGUgY291bGQgKnRoZW9yZXRpY2FsbHkqIGNyZWF0ZSB0aGlzIHNldHVwLgoKSG93ZXZlciwgZ2l2ZW4gc3l6a2FsbGVyJiMzOTtzIGN1cnJlbnQgbGltaXRhdGlvbnMgaW4gQUNQSSB0YWJsZSBtYW5pcHVsYXRpb24sIHN1Y2Nlc3NmdWxseSBjcmFmdGluZyBhIGNvaGVyZW50IFBDQ1QsIFBDQyBjaGFubmVsLCBhbmQgUkFTMiB0YWJsZSB0aGF0IGFsbCBsaW5rIGNvcnJlY3RseSB0byB0aGUgYGFjcGlfcmFzMmAgbWVtb3J5IGRyaXZlciBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZXMgc2VlbWVkIGluY3JlZGlibHkgdW5saWtlbHkuIEl0JiMzOTtzIGp1c3QgYSBsb3QgdG8gZ2V0IHJpZ2h0LgoKVGhlbiBJIHNoaWZ0ZWQgZ2VhcnMg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIHJvdXRlPyBJIHNlZSB0aGlzIGByYXMyX21lbV9kcnZfcHJvYmVgIGlzIHBhcnQgb2YgYW4gYXV4aWxpYXJ5IGRyaXZlciwgc3BlY2lmaWNhbGx5OgoKYGBgYwpzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0gewoJLm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSwKCS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKCS5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLAoJLmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLAp9OwpgYGAKCkNhbiAqd2UqIGNyZWF0ZSBhbiBhdXhpbGlhcnkgZGV2aWNlIGZyb20gdXNlcnNwYWNlPyBObywgdGhhdCYjMzk7cyBub3QgaG93IGl0IHdvcmtzOyBhdXhpbGlhcnkgZGV2aWNlcyBhcmUgY3JlYXRlZCBieSBvdGhlciBrZXJuZWwgZHJpdmVycy4gSW4gdGhpcyBjYXNlLCBpdCBhcHBlYXJzIHRoZSBgZHJpdmVycy9hY3BpL3JhczIuY2AgZHJpdmVyIGlzIHJlc3BvbnNpYmxlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBwYXJzZV9yYXMyX3RhYmxlYCBmdW5jdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHdob2xlIHBhdGh3YXkgKnN0cmljdGx5KiByZXF1aXJlcyBwYXJzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUuCgpTbywgY291bGQgc3l6a2FsbGVyIGZ1enogdGhpcz8gSXQmIzM5O3MgcG9zc2libGUhIElmIGl0IGNhbiBpbmplY3QgQUNQSSB0YWJsZXMsIGl0ICptaWdodCogcmVhY2ggYHBhcnNlX3JhczJfdGFibGVgLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5ICpkb2VzKiBoYXZlIEFDUEkgdGFibGUgaW5qZWN0aW9uIGF2YWlsYWJsZS4gWWVzLCBpdCBkb2VzISBgc3l6X2FjcGlfc2V0dXBgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGlzIHVzZWQuCgpCdXQgd2FpdC4gRXZlbiBpZiBpdCAqZG9lcyogcGFyc2UgdGhlIFJBUzIgdGFibGUsIHRoYXQgYHBhcnNlX3JhczJfdGFibGVgIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHJlZ2lzdGVyX3BjY19jaGFubmVsYCwgd2hpY2ggY2FsbHMgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuIEFuZCwgaWYgdGhlcmUgaXNuJiMzOTt0IGEgUENDVCB0YWJsZSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCBmYWlsdXJlIHdpbGwgcHJvcGFnYXRlIHRvIGBhZGRfYXV4X2RldmljZWAsIGFuZCB0aGVyZWZvcmUgdGhlIGF1eGlsaWFyeSBkZXZpY2Ugd29uJiMzOTt0IGJlIGNyZWF0ZWQuIE1lYW5pbmcsIGByYXMyX21lbV9kcnZfcHJvYmVgIHdvbiYjMzk7dCBldmVyIGJlIGNhbGxlZCB1bmxlc3MgYSAqdmFsaWQqIFBDQ1QgdGFibGUgaXMgcHJlc2VudCBhbmQgYSBQQ0MgY2hhbm5lbCBpcyBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQuCgpUaGUgY29uY2x1c2lvbiBpcyB0aGlzIGlzICpleHRyZW1lbHkqIGhhcmQgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBVbmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIG1vY2sgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciBQQ0MsIHdlJiMzOTtyZSBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBlYXNpbHkgd2l0aCBmdXp6aW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGZvciBzb21lIFBDQyBlbXVsYXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1haWxib3ggRHJpdmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbWFpbGJveC9gIGRpcmVjdG9yeS4gSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgYWJvdXQgdGhlIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBpbiB0aGlzIGNvbnRleHQuIEFyZSB3ZSB1c2luZyBhIG1vY2tlZCB2ZXJzaW9uIG9mIGl0IGhlcmU/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTWFpbGJveCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBpZiB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByZWFsIGhhcmR3YXJlIGR1cmluZyB0ZXN0aW5nIG9yIGRldmVsb3BtZW50LCB0aGVuIGEgbW9jayBQQ0Mgd291bGQgYmUgdGhlIGxvZ2ljYWwgd2F5IHRvIGdvLiBUaGlzIGlzIGEgY3JpdGljYWwgZGV0YWlsIGluIGZpZ3VyaW5nIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgdGVzdGVkIGFuZCBob3cgcm9idXN0bHkgaXTigJlzIGRlc2lnbmVkLiBXaXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIFBDQyBpbnRlcmFjdGlvbiwgdGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgdGhlIG1haWxib3ggZHJpdmVyIGlzIHVuY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3JlcXVlc3RfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM0OC0vKipcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzUwLSAqXHRcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTM2MD1zdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzYyLXtcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTM6RVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTQtXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5OC0gKiBAcGNoYW46IFBvaW50ZXIgdG8gdGhlIFBDQyBtYWlsYm94IGNoYW5uZWwgYXMgcmV0dXJuZWQgYnlcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTk6ICpcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNDAwLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUkFTMiBNZW1vcnkgRHJpdmVyIFByb2JlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIG5vICYjMzQ7bW9jayBQQ0MmIzM0OyBpbiB0aGlzIHNjZW5hcmlvLCB3aGljaCBtZWFucyB0aGUgcGF0aCB0byBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBoaW5nZXMgb24gYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBGaXJzdCwgSSBuZWVkIHRvIGhhdmUgYSB2YWxpZCBBQ1BJIFJBUzIgdGFibGUsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuIFRoZW4sIEkgKm11c3QqIGhhdmUgYW4gQUNQSSBQQ0NUIHRhYmxlIHdpdGggYSB2YWxpZCBzdWJzcGFjZSBkZWZpbmVkOyB0aGF0JiMzOTtzIGNyaXRpY2FsLiBGb2xsb3dpbmcgdGhpcywgdGhlIGRlc2NyaWJlZCBzdWJzcGFjZSAqaGFzKiB0byBoYXZlIGEgZnVuY3Rpb25hbCwgc2hhcmVkIG1lbW9yeSByZWdpb24gYXNzaWduZWQgdG8gaXQsIHdoaWNoIGlzIHRoZSB0aGlyZCBuZWNlc3NhcnkgY29tcG9uZW50LiBGb3VydGgsIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaGFzIHRvIHN1Y2NlZWQgaW4gaXRzIHByb2JpbmcgcHJvY2VzcywgYW5kIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBjaGFubmVsOyBJIG5lZWQgdGhhdCBlc3RhYmxpc2hlZCBsaW5rLiBGaWZ0aCwgYGFjcGlfcmFzMl9pbml0YCBuZWVkcyB0byBjb21lIGludG8gcGxheSwgcGFyc2UgdGhlIFJBUzIgdGFibGUsIGZpbmQgdGhlIFBDQyBjaGFubmVsLCBhbmQgdHJpZ2dlciB0aGUgY2FsbCB0byBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYDsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gU2l4dGgsIGFuIGF1eGlsaWFyeSBkZXZpY2UgbXVzdCBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZDsgdGhpcyBpcyBhIHByZXJlcXVpc2l0ZS4KCk5vdywgb25jZSB0aG9zZSBzdGVwcyBhcmUgY29tcGxldGVkLCBJJiMzOTtsbCBhcnJpdmUgYXQgYHJhczJfbWVtX2Rydl9wcm9iZWAuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhlIGRyaXZlciBzZW5kcyBhIFBDQyBjb21tYW5kIHRvIHJldHJpZXZlIHBhdHJvbCBwYXJhbWV0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBwYXVzZSBhbmQgc2VyaW91c2x5IGNvbnNpZGVyIGhvdyB0aGlzIGNvbW1hbmQgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiBJdCBzZWVtcyB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24gaGFzIHRvIGFjdHVhbGx5ICpyZXNwb25kKiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIG5vdCB0aW1lIG91dC4gT3IsIHBlcmhhcHMgaXQganVzdCB3cml0ZXMgc29tZXRoaW5nIHRvIG1lbW9yeSBhbmQgdGhlbiByaW5ncyBhIGRvb3JiZWxsIHRvIGluZGljYXRlIGNvbXBsZXRpb24/IExldCYjMzk7cyBjbGFyaWZ5IHRoaXMuICpBaGEhKiBgcmFzMl9zZW5kX3BjY19jbWRgIHBvbGxzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2l0aGluIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24uIEl0JiMzOTtzIGxvb2tpbmcgZm9yIGBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURWAuIFNvLCBpZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBwcmVzZW50IHRvIHNldCB0aGF0IGJpdCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBgY2hlY2tfcGNjX2NoYW5gIGlzIGdvaW5nIHRvIHRpbWUgb3V0IGFuZCByZXR1cm4gYW4gZXJyb3I7IGl0JiMzOTtzIGEgZGVhZCBlbmQuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhpcywgbGV0IG1lIGNoZWNrIHRoZSBgY2hlY2tfcGNjX2NoYW5gIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBhbmQgdmVyaWZ5IG15IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19wY2NfY2hhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL3JhczIuYz03NT1zdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuZHJpdmVycy9hY3BpL3JhczIuYy03Ni1cbmRyaXZlcnMvYWNwaS9yYXMyLmM6Nzc6c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTc4LXtcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTE0ND1pbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0xNTktXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjE2MDpcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuZHJpdmVycy9hY3BpL3JhczIuYy0xNjEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0yMzQtXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG5kcml2ZXJzL2FjcGkvcmFzMi5jOjIzNTpcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIzNi1cdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHlvdXIgcHJvbXB0OgoKKipEaXZpbmcgaW50byBgY2hlY2tfcGNjX2NoYW5gKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfcGNjX2NoYW5gIHdpdGhpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgYXNzdW1lIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIGVycm9yIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgQUNQSSBSQVMgZnJhbWV3b3JrLiBHaXZlbiB0aGUgZmlsZSBjb250ZXh0LCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgaGFyZHdhcmUgZXJyb3IgcmVwb3J0aW5nIG9yIHBvdGVudGlhbGx5IGV2ZW4gY29uZmlndXJpbmcgdGhlIFBDQyBmb3IgaW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb24gb3IgbWFuYWdlbWVudCBvZiBzb21lIGhhcmR3YXJlIHJlc291cmNlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUkFTIGFyY2hpdGVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBBQ1BJIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0LCBhbmQgaG93IGRvZXMgaXQgcmVzcG9uZCB0byB0aG9zZSBmYWlsdXJlcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBpbiBhIG11bHRpLXRocmVhZGVkIG9yIG11bHRpLXByb2Nlc3NvciBlbnZpcm9ubWVudCwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEFDUEkgbmFtZXNwYWNlIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBmcm9tIGFuIHVucHJpdmlsZWdlZCB1c2VyIHNwYWNlLiBJJiMzOTttIGFsc28gd29uZGVyaW5nIGlmIGl0IGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnQgb3Igc3BlY2lmaWMgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydCByZXF1aXJlbWVudHMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4gIDc4Olx0e1xuICA3OTpcdFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuICA4MDpcdFx0dTMyIGNhcF9zdGF0dXM7XG4gIDgxOlx0XHR1MTYgc3RhdHVzO1xuICA4MjpcdFx0aW50IHJjO1xuICA4MzpcdFxuICA4NDpcdFx0LypcbiAgODU6XHRcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcbiAgODY6XHRcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuICA4NzpcdFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXG4gIDg4Olx0XHQgKlxuICA4OTpcdFx0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuICA5MDpcdFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxuICA5MTpcdFx0ICogYml0IGlzIHNldC5cbiAgOTI6XHRcdCAqL1xuICA5MzpcdFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuICA5NDpcdFx0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuICA5NTpcdFx0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiAgOTY6XHRcdGlmIChyYykge1xuICA5NzpcdFx0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCYjMzQ7LFxuICA5ODpcdFx0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiAgOTk6XHRcbiAxMDA6XHRcdFx0cmV0dXJuIHJjO1xuIDEwMTpcdFx0fVxuIDEwMjpcdFxuIDEwMzpcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xuIDEwNDpcdFx0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiAxMDU6XHRcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbiAxMDY6XHRcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4gMTA3Olx0XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAxMDg6XHRcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuIDEwOTpcdFx0XHRyZXR1cm4gLUVJTztcbiAxMTA6XHRcdH1cbiAxMTE6XHRcbiAxMTI6XHRcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4gMTEzOlx0XHRybWIoKTtcbiAxMTQ6XHRcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4gMTE1Olx0XHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbiAxMTY6XHRcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiAxMTc6XHRcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4gMTE4Olx0XHRcdHJjID0gLUVQRVJNO1xuIDExOTpcdFx0XHRicmVhaztcbiAxMjA6XHRcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4gMTIxOlx0XHRcdHJjID0gLUVCVVNZO1xuIDEyMjpcdFx0XHRicmVhaztcbiAxMjM6XHRcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbiAxMjQ6XHRcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4gMTI1Olx0XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4gMTI2Olx0XHRcdHJjID0gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0MgU3RhdHVzIGFuZCBQb3RlbnRpYWwgVGltZW91dHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNoZWNrX3BjY19jaGFuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBnZW5fY29tbV9iYXNlLSZndDtzdGF0dXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwb2xsaW5nIGBnZW5fY29tbV9iYXNlLSZndDtzdGF0dXNgIGZvciBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgZW11bGF0b3IgdG8gc2V0IHRoYXQgYml0LCB3ZSYjMzk7cmUgZ29pbmcgdG8gdGltZSBvdXQsIHJpZ2h0PyBNYWtlcyBzZW5zZS4KClRoZW4gSSBnb3QgdG8gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBsaWtlLCB3aGF0IGlmIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBqdXN0IHJlZ3VsYXIgUkFNPyBTYXkgaXQmIzM5O3MgYmVpbmcgcG9pbnRlZCB0byBieSBhbiBBQ1BJIHRhYmxlLiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyIGNvdWxkIHZlcnkgd2VsbCBiZSB6ZXJvLiBJbiB0aGF0IGNhc2UsIHdlJiMzOTtkIGltbWVkaWF0ZWx5IHRpbWUgb3V0IG9uIHRoZSBmaXJzdCByZWFkLiBVZ2ghCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaGVyZS4gV2hhdCBpZiB0aGUgaW5pdGlhbCB2YWx1ZSAqZG9lcyogaGFwcGVuIHRvIGhhdmUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBzZXQ/IFRoZW4gYGNoZWNrX3BjY19jaGFuYCB3b3VsZCBzdWNjZWVkIHRoZSB2ZXJ5IGZpcnN0IHRpbWUsIHdoaWNoIHdvdWxkIGJlIHdyb25nLiBBbmQgdGhlbiBgcmFzMl9zZW5kX3BjY19jbWRgIGdvZXMgYW5kIGNsZWFycyB0aGF0IGJpdCB3aXRoIGBpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpYC4KClNvLCBpdCBmbGlwcyB0aGUgQ01EIENPTVBMRVRFIGJpdCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBUaGVuLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBpdCByaW5ncyB0aGUgZG9vcmJlbGwgYW5kIHRoZW4gY2FsbHMgYGNoZWNrX3BjY19jaGFuYCBhZ2FpbiwgYnV0IHRoaXMgdGltZSwgc2luY2Ugd2UganVzdCBjbGVhcmVkIHRoZSBiaXQsIGFuZCB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgdG8gc2V0IGl0IGJhY2ssIHRoZSBzZWNvbmQgYGNoZWNrX3BjY19jaGFuYCBjYWxsIGlzICpkZWZpbml0ZWx5KiBnb2luZyB0byB0aW1lIG91dCEgVGhhdCYjMzk7cyBhIGh1Z2UgcHJvYmxlbS4KCkkgbmVlZCB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvciBzcGVjaWZpY2FsbHkgd2l0aGluIGByYXMyX3NlbmRfcGNjX2NtZGAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvcmFzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTg6XHRcdFx0XHRzc3BjYy1cdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXHUwMDNlcGNjX21wYXI7XG4gMTk5Olx0XHRcdH1cbiAyMDA6XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuIDIwMTpcdFx0fVxuIDIwMjpcdFxuIDIwMzpcdFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuIDIwNDpcdFx0aW93cml0ZTE2KGNtZCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2Vjb21tYW5kKTtcbiAyMDU6XHRcbiAyMDY6XHRcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuIDIwNzpcdFx0aW93cml0ZTE2KDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAyMDg6XHRcbiAyMDk6XHRcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiAyMTA6XHRcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFx1MDAyNmNtZCk7XG4gMjExOlx0XHQvKlxuIDIxMjpcdFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuIDIxMzpcdFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cbiAyMTQ6XHRcdCAqL1xuIDIxNTpcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gMjE2Olx0XHRcdGRldl93YXJuKHJhczJfY3R4LVx1MDAzZWRldixcbiAyMTc6XHRcdFx0XHQgXCYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCYjMzQ7LCBjbWQsIHJjKTtcbiAyMTg6XHRcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4gMjE5Olx0XHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAyMjA6XHRcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuIDIyMTpcdFx0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4gMjIyOlx0XHRcdHJldHVybiByYztcbiAyMjM6XHRcdH0gZWxzZSB7XG4gMjI0Olx0XHRcdHJjID0gMDtcbiAyMjU6XHRcdH1cbiAyMjY6XHRcbiAyMjc6XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuIDIyODpcdFxuIDIyOTpcdFx0LypcbiAyMzA6XHRcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuIDIzMTpcdFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xuIDIzMjpcdFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXG4gMjMzOlx0XHQgKi9cbiAyMzQ6XHRcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbiAyMzU6XHRcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4gMjM2Olx0XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiAyMzc6XHRcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbiAyMzg6XHRcdH1cbiAyMzk6XHRcbiAyNDA6XHRcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuIDI0MTpcdFx0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbiAyNDI6XHRcbiAyNDM6XHRcdHJldHVybiByYztcbiAyNDQ6XHR9XG4gMjQ1Olx0RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiAyNDY6XHRcbiAyNDc6XHRzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkFTMiBDb21tYW5kIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHJhczJfc2VuZF9wY2NfY21kYCBoYXMgYSBjcnVjaWFsIHJvbGUg4oCTIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgKmNsZWFycyogdGhlIGBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURWAgYml0LiBUaGF0JiMzOTtzIHN0ZXAgb25lLiAgVGhlbiwgaXQgbW92ZXMgb24gYnkgY2FsbGluZyBgbWJveF9zZW5kX21lc3NhZ2VgLCB3aGljaCBpcyBleHBlY3RlZC4KCk5vdywgaWYgdGhlIGNvbW1hbmQgKGBjbWRgKSBoYXBwZW5zIHRvIGJlIGBQQ0NfQ01EX0VYRUNfUkFTMmAg4oCTIGFuZCwgaW4gdGhpcyBzcGVjaWZpYyBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgY29udGV4dCwgaXQgKmlzKiDigJMgdGhlbiB0aGUgY29kZSBjYWxscyBgY2hlY2tfcGNjX2NoYW5gIGFnYWluLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSBhIGhhcmR3YXJlIGVtdWxhdG9yIHByZXNlbnQgdG8gbWFudWFsbHkgdG9nZ2xlIHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBiYWNrIHRvICYjMzk7MSYjMzk7LCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBjaGVja19wY2NfY2hhbmAgaXMgZ29pbmcgdG8gdGltZSBvdXQuIFRoYXQgdGltZW91dCBpcyBhbiBlcnJvciBjb25kaXRpb24uIFRoZXJlZm9yZSwgaWYgYGNoZWNrX3BjY19jaGFuYCB0aW1lcyBvdXQsIGl0JiMzOTtzIHByZXR0eSBtdWNoIGEgZ3VhcmFudGVlIHRoYXQgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIHdpbGwgKmZhaWwqLgoKSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBmaW5kIGl0IHdpdGhpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU5Olx0c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4gIDYyOlx0XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuICA2MzpcdFx0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4gIDY0Olx0XHRpbnQgcmV0O1xuICA2NTpcdFxuICA2NjpcdFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiAgNjc6XHRcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuICA2ODpcdFx0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuICA2OTpcdFx0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuICA3MDpcdFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiAgNzE6XHRcdGlmIChyZXQpIHtcbiAgNzI6XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiAgNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4gIDc3Olx0XHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuICA3ODpcdFx0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiAgNzk6XHRcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4gIDgwOlx0XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuICA4MTpcdFx0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuICA4MjpcdFx0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiAgODM6XHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuICA4NDpcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuICA4NTpcdFx0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiAgODY6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4gIDg3Olx0XHRcdHJldHVybiAwO1xuICA4ODpcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuICA5MTpcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4gIDkyOlx0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbiAgOTM6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuICA5NDpcdFx0fSBlbHNlIHtcbiAgOTU6XHRcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiAgOTY6XHRcdH1cbiAgOTc6XHRcbiAgOTg6XHRcdHJldHVybiAwO1xuICA5OTpcdH1cbiAxMDA6XHRcbiAxMDE6XHQvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4gMTAyOlx0c3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbiAxMDM6XHR7XG4gMTA0Olx0XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuIDEwNTpcdFx0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiAxMDY6XHRcdGludCByZXQ7XG4gMTA3Olx0XG4gMTA4Olx0XHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRXJyb3IgUHJvcGFnYXRpb24qKgoKUmlnaHQsIHNvIGlmIGByYXMyX3NlbmRfcGNjX2NtZGAgaGFzIGEgcHJvYmxlbSBhbmQgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBpcyBnb2luZyB0byByZWZsZWN0IHRoYXQgYnkgcmV0dXJuaW5nIGFuIGVycm9yIGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGhlcmUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY2FzY2FkaW5nIGZhaWx1cmUsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCBmbG93IG9mIHRoaXMuIE15IGZpcnN0IG1vdmU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLiBJIG5lZWQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBwbGFjZSBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBhc3Nlc3MgdGhlIGJyb2FkZXIgc3lzdGVtIGltcGFjdCBvZiB0aGF0IGVycm9yIHByb3BhZ2F0aW9uIGZyb20gYHJhczJfc2VuZF9wY2NfY21kYC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY2FsbCByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRcdCAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUlxuIDUxMTpcdFx0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4gNTEyOlx0XHQgKi9cbiA1MTM6XHRcdHN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4gNTE0Olx0XHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuIDUxNTpcdFx0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuIDUxNjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxuXCYjMzQ7LCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuIDUxNzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDUxODpcdFx0fVxuIDUxOTpcdFxuIDUyMDpcdFx0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4gNTIxOlx0XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuIDUyMjpcdFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiA1MjM6XHRcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuIDUyNDpcdFx0aWYgKHJldClcbiA1MjU6XHRcdFx0cmV0dXJuIHJldDtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4gNTI4Olx0XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4gNTI5Olx0XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycztcbiA1MzA6XHRcdGVsc2VcbiA1MzE6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuIDUzMjpcdFxuIDUzMzpcdFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiA1MzQ6XHRcbiA1MzU6XHRcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuIDUzNjpcdFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4gNTM3Olx0XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuIDUzODpcdFx0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbiA1Mzk6XHRcbiA1NDA6XHRcdHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xuIDU0MTpcdFxuIDU0MjpcdFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4gNTQzOlx0fVxuIDU0NDpcdFxuIDU0NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiA1NDY6XHRcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuIDU0NzpcdFx0eyB9XG4gNTQ4Olx0fTtcbiA1NDk6XHRcbiA1NTA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcbiA1NTE6XHRcbiA1NTI6XHRzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuIDU1MzpcdFx0Lm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSxcbiA1NTQ6XHRcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiA1NTU6XHRcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuIDU1NjpcdFx0LmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLFxuIDU1NzpcdH07XG4gNTU4Olx0bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiA1NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuZnV6emFibGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSWYgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIGVycm9ycywgdGhlbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBmYWlscywgd2hpY2ggbWVhbnMgdGhlIEVEQUMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2UgaXQgbWVhbnMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIG5ldmVyIGV2ZW4gcmVhY2hlZC4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBhZnRlciBgcmFzMl9zZW5kX3BjY19jbWRgIGNsZWFycyBpdCwgbWFraW5nIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBmYWlsIEVWRVJZIHRpbWUuCgpJIGNvbnNpZGVyZWQgYSBmZXcgZWRnZSBjYXNlcy4gQ291bGQgYSBzeXprYWxsZXItaW5qZWN0ZWQgQUNQSSB0YWJsZSBwb2ludCB0aGUgUENDIHNoYXJlZCBtZW1vcnkgdG8gYSByZWFsLCByZXNwb25kaW5nIGRldmljZT8gSXTigJlzIHBvc3NpYmxlLCBzdXJlLCBidXQgaGlnaGx5IHVubGlrZWx5IHRoYXQgc3VjaCBhIGRldmljZSB3b3VsZCBwZXJmZWN0bHkgZW11bGF0ZSBQQ0MgY29tbWFuZCBjb21wbGV0aW9uIGFuZCBzZXQgdGhlIGJpdCBjb3JyZWN0bHkuIFNvLCBhbG1vc3QgY2VydGFpbmx5LCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZS4gTm8gcHJvYmUgbWVhbnMgbm8gc3lzZnMgaW50ZXJmYWNlcy4gVGhlbiB0aGUgY29yZSBsb2dpYyBJJiMzOTttIGxvb2tpbmcgYXQgaW4gYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBhbmQgc28gb24sIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpDb3VsZCBzeXprYWxsZXIgaW5qZWN0IGEgZmF1bHQ/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdHMgdHlwaWNhbCBhcHByb2FjaCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZSAobGlrZSB0aG9zZSBpbiBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGV0Yy4pLiBBbmQgdGhlcmUmIzM5O3MgZGVmaW5pdGVseSBubyBQQ0MgZW11bGF0b3IgaW4gdGhlIGtlcm5lbC4gU28sIGFnYWluLCB0aGlzIGNvZGUmIzM5O3MgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSBoYWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSB3ZXJlIGFueSBvdGhlciBwYXRocyB0byB0aGUgRURBQyBzY3J1YiBzeXNmcyBjaGFuZ2VzLiBUaGUgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCBmaWxlIGFkZHMgYW4gYGVuYWJsZV9kZW1hbmRgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgdmlzaWJsZSBvbmx5IHdoZW4gYG9wcy0mZ3Q7Z2V0X2VuYWJsZWRfb2RgIGlzIHNldC4gUmlnaHQgbm93LCBvbmx5IGBhY3BpX3JhczIuY2Agc2V0cyBgZ2V0X2VuYWJsZWRfb2RgLiBUaGF0IG1lYW5zIHRoZSBzeXNmcyBmaWxlIGlzbiYjMzk7dCBjcmVhdGVkIGZvciBhbnkgb3RoZXIgZHJpdmVyLiBTbyB0aGlzIEVEQUMgc2NydWIgc3R1ZmYgaXMgYWxzbyB1bnJlYWNoYWJsZS4KCk5vdyBJIHJldmlld2VkIHRoZSBpbnN0cnVjdGlvbnM6IFRoZXkgZXhwbGljaXRseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGEgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIFNpbmNlIHRoaXMgcmVxdWlyZXMgQUNQSSBSQVMyIGFuZCBQQ0MgaGFyZHdhcmUsIHdoaWNoIGlzICpub3QqIGVtdWxhdGVkIGluIFFFTVUvR0NFLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGhpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIHNlYXJjaCBmb3IgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaW4gYHRvb2xzL2AgYW5kIGBkcml2ZXJzL21haWxib3gvYCBidXQgZm91bmQgbm8gbW9ja3Mgb3IgZW11bGF0aW9ucy4gTm8gb3RoZXIgbW9jay4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDQ19TVEFUVVNfQ01EX0NPTVBMRVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmM9Nzc9c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy05My1cdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6OTQ6XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTk1LVx0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTE0ND1pbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0yMTktXHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjIwOlx0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIyMS1cdFx0aW93cml0ZTE2KHZhbCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuLS1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTg2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfY21kX3NlbmQoc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSxcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTIyOS1cdHJjID0gcmVhZHdfcG9sbF90aW1lb3V0KFx1MDAyNmFkZHItXHUwMDNlaGVhZC5zdGF0dXMsIHN0YXR1cyxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MjMwOlx0XHRcdFx0c3RhdHVzIFx1MDAyNiAoUENDX1NUQVRVU19DTURfQ09NUExFVEUgfFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0yMzEtXHRcdFx0XHRcdCAgUENDX1NUQVRVU19FUlJPUiksXG4tLVxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTEyND1zdGF0aWMgaW50IHhnZW5lX2h3bW9uX3BjY19yZChzdHJ1Y3QgeGdlbmVfaHdtb25fZGV2ICpjdHgsIHUzMiAqbXNnKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy0xNDUtXHR2YWwgPSBsZTE2X3RvX2NwdShSRUFEX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKSk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6MTQ2Olx0dmFsIFx1MDAyNj0gflBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTE0Ny1cdFdSSVRFX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLCBjcHVfdG9fbGUxNih2YWwpKTtcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NTIyPXN0YXRpYyB2b2lkIHhnZW5lX2h3bW9uX3BjY19yeF9jYihzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc2cpXG4tLVxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTU2Mi1cdFx0aWYgKHhnZW5lX3dvcmRfdHN0X2FuZF9jbHIoXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjU2MzpcdFx0XHRcdFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNTY0LVx0XHRcdGN0eC1cdTAwM2VzeW5jX21zZy5tc2cgPSAoKHUzMiAqKW1zZylbMF07XG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM9MTQ2PXN0YXRpYyB2b2lkIHNsaW1wcm9faTJjX3BjY19yeF9jYihzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc2cpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTU3LVx0aWYgKHhnZW5lX3dvcmRfdHN0X2FuZF9jbHIoXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTU4Olx0XHRcdFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy0xNTktXHRcdG1zZyA9IGdlbmVyaWNfY29tbV9iYXNlICYjNDM7IDE7XG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM9MTY5PXN0YXRpYyB2b2lkIHNsaW1wcm9faTJjX3BjY190eF9wcmVwYXJlKHN0cnVjdCBzbGltcHJvX2kyY19kZXYgKmN0eCwgdTMyICptc2cpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTgzLVx0c3RhdHVzID0gbGUxNl90b19jcHUoUkVBRF9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVx1MDAzZXN0YXR1cykpO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTg0Olx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTg1LVx0V1JJVEVfT05DRShnZW5lcmljX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIGNwdV90b19sZTE2KHN0YXR1cykpO1xuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0yMzI9c3RhdGljIGludCBoY2NzX3dhaXRfY21kX2NvbXBsZXRlX2J5X3BvbGwoc3RydWN0IGhjY3NfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDQtXHRyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQoXHUwMDI2Y29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjI0NTpcdFx0XHRcdCBzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTI0Ni1cdFx0XHRcdCBIQ0NTX1BPTExfU1RBVFVTX1RJTUVfSU5URVJWQUxfVVMsXG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTEyPXN0cnVjdCBwY2NfbWJveF9jaGFuIHtcbi0tXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjYtLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFN0YXR1cyBGaWVsZCAqL1xuaW5jbHVkZS9hY3BpL3BjYy5oOjI3OiNkZWZpbmUgUENDX1NUQVRVU19DTURfQ09NUExFVEVcdFx0QklUKDApXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjgtI2RlZmluZSBQQ0NfU1RBVFVTX1NDSV9ET09SQkVMTFx0XHRCSVQoMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxNTkKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBXb3J0aEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIHRoZSB2ZXJkaWN0IGlzIHByZXR0eSBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bnJlYWNoYWJsZSBjb2RlLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpZ2dlciB0aGUgY29yZSBsb2dpYyBpbiB0aGlzIGVudmlyb25tZW50LiBJdCYjMzk7cyBmcnVzdHJhdGluZywgcmVhbGx5LiBUaGUgcm9vdCBjYXVzZSBpcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIuIFRoaXMgZHJpdmVyICpkZW1hbmRzKiBhIHBoeXNpY2FsIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IGFuZCB0aGUgc3VwcG9ydGluZyBBQ1BJIFJBUzIgdGFibGVzLiBBbmQgYXMgd2Uga25vdywgUUVNVSBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIGRvbiYjMzk7dCBlbXVsYXRlIHRob3NlLiBTbywgaXQmIzM5O3MgYSBkZWFkIGVuZC4gQmVjYXVzZSBvZiB0aGlzIGNyaXRpY2FsIGRlcGVuZGVuY3ksIHRoZSBjb3JlIGxvZ2ljIGlzIHNpbXBseSBub3QgcmVhY2hhYmxlLgoKQmVmb3JlIGdpdmluZyB1cCBjb21wbGV0ZWx5LCBJIHF1aWNrbHkgc2Nhbm5lZCB0byBzZWUgaWYgKmFueSogcGFydCBvZiB0aGUgcGF0Y2ggY291bGQgYmUgZXhwbG9pdGVkLiBJIGxvb2tlZCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCwgd2hlcmUgdGhlcmUgd2VyZSBtb2RpZmljYXRpb25zIHRvIGBzY3J1Yl9hdHRyX3Zpc2libGVgIGFuZCBgc2NydWJfY3JlYXRlX2Rlc2NgLiBIb3dldmVyLCB0aG9zZSBjaGFuZ2VzIGFyZSBvbmx5IHRyaWdnZXJlZCBpZiBhIGRyaXZlciBzZXRzIHRoZSBgZ2V0X2VuYWJsZWRfb2RgIGZsYWcuIEJ1dCwgb25seSB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIHNldHMgdGhhdC4gU2luY2UgYGFjcGlfcmFzMmAgaXMgdG90YWxseSB1bnJlYWNoYWJsZS4uLiB0aG9zZSBjaGFuZ2VzIGFyZSBhbHNvIGRlYWQuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGRvY3VtZW50YXRpb24gYW5kIEtjb25maWcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYnV0IG5vdCBpbW1lZGlhdGVseSBmdXp6ZXIgY2FuZGlkYXRlcy4KClRoZXJlZm9yZSwgZGVjbGFyaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIFRoZSBwcm92aWRlZCByZWFzb25pbmcgYWNjdXJhdGVseSBkZXNjcmliZXMgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0LjQ4ODQwMDEzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjEyNTkxMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0LjQ4ODQwNzg0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxODk1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDk4NGU4ZDI3YTIxMDA2YzE2Yjg4NGM5MmJkYjZkNzEwYTM2ZjBmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuIENvbnRhY3Q6XFx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcXG4gRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxcbi1cXHRcXHRmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuXFxuLVxcdFxcdFRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0Llxcbi1cXG4tXFx0XFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxcbi1cXHRcXHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cXG4rXFx0XFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXFxuIFxcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9zaXplXFxuIERhdGU6XFx0XFx0TWFyY2ggMjAyNVxcbkBAIC0zNCw2ICszMCwxNCBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxcbiBcXHRcXHQob24tZGVtYW5kIHNjcnViYmluZykuXFxuIFxcbitXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXFxuK0RhdGU6XFx0XFx0SmFuIDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHQ2LjE5XFxuK0NvbnRhY3Q6XFx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcXG4rRGVzY3JpcHRpb246XFxuK1xcdFxcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcXG4rXFx0XFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1xcdTAwM2NkZXYtbmFtZVxcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXFxuIERhdGU6XFx0XFx0TWFyY2ggMjAyNVxcbiBLZXJuZWxWZXJzaW9uOlxcdDYuMTVcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxcbiBcXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxcbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcXG4rXFxuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXFxuK1xcbiszLjEuIERlbWFuZCBzY3J1YmJpbmcgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbi5cXG4rXFxuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXFxuK1xcbiswXFxuK1xcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXFxuK1xcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXFxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMzYwMDBcXG4rXFxuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxcbitUaGUgdW5pdCBvZiB0aGUgc2NydWIgY3ljbGUgcmFuZ2UgaXMgc2Vjb25kcy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDBcXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9tYXhfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzg2NDAwXFxuK1xcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cXG4rXFxuKyMgZWNobyA0MzIwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXFxuK1xcbitTZXQgJ2FkZHInIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxcbitcXG4rIyBlY2hvIDB4ODAwMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkclxcbitcXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDIwMDAwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXFxuK1xcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxcbitcXG4rV2hlbiBhIGRlbWFuZCBzY3J1YiBpcyBzdGFydGVkLCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXFxuK1xcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XFxuK1xcbiszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbitcXG4rMFxcbitcXG4rMy4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMFxcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cXG4rXFxuKyMgZWNobyAyMTYwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszLjIuMy4gU3RhcnQgJ2JhY2tncm91bmQgc2NydWJiaW5nJy5cXG4rXFxuKyMgZWNobyAxIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXFxuIFxcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXFxuIFxcdCAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuIFxcbitjb25maWcgQUNQSV9SQVMyXFxuK1xcdGJvb2wgXFxcIkFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuK1xcdGRlcGVuZHMgb24gTUFJTEJPWFxcbitcXHRkZXBlbmRzIG9uIFBDQ1xcbitcXHRoZWxwXFxuK1xcdCAgQWRkIHN1cHBvcnQgZm9yIHRoZSBSQVMyIGZlYXR1cmUgdGFibGUgYW5kIHByb3ZpZGUgaW50ZXJmYWNlcyBmb3JcXG4rXFx0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cXG4rXFxuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxcbiBcXHR0cmlzdGF0ZSBcXFwiUHJvY2Vzc29yXFxcIlxcbiBcXHRkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1ZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcXHQrPSBlY19zeXMub1xcbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVxcdFxcdCs9IGJncnQub1xcbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcXHQrPSBjcHBjX2FjcGkub1xcbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVxcdCs9IHNwY3Iub1xcbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVxcdFxcdCs9IHJhczIub1xcbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIFxcdCs9IHBwdHQub1xcbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcXHQrPSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYWNwaS9hcGVpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm10LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3JhczIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXFxuIFxcdGFjcGlfZGVidWdnZXJfaW5pdCgpO1xcbiBcXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XFxuIFxcdGFjcGlfdmlvdF9pbml0KCk7XFxuK1xcdGFjcGlfcmFzMl9pbml0KCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMWRkZjVjOTY4OGM2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxuQEAgLTAsMCArMSw1MDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxcbisgKlxcbisgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXFxuKyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxcbisgKi9cXG4rXFxuKyN1bmRlZiBwcl9mbXRcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiQUNQSSBSQVMyOiBcXFwiIGZtdFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcGNjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3JhczIuaFxcdTAwM2VcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmFzMl9zc3BjYyAtIERhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxcbisgKiBAbWJveF9jbGllbnQ6XFx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxcbisgKiBAcGNjX2NoYW46XFx0XFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGVsZW06XFx0XFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xcbisgKiBAcGNjX2xvY2s6XFx0XFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQGRlYWRsaW5lX3VzOlxcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xcbisgKlxcdFxcdFxcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXFxuKyAqIEBwY2NfbXBhcjpcXHRcXHRNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKSBmb3IgUENDIGNoYW5uZWxcXG4rICogQHBjY19tcnR0OlxcdFxcdE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpIGluIG1pY3Jvc2Vjc1xcbisgKlxcdFxcdFxcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXFxuKyAqXFx0XFx0XFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcXG4rICogQGxhc3RfY21kX2NtcGxfdGltZTogQ29tcGxldGlvbiB0aW1lIG9mIGxhc3QgUENDIGNvbW1hbmRcXG4rICogQGxhc3RfbXBhcl9yZXNldDpcXHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxcbisgKiBAbXBhcl9jb3VudDpcXHRcXHRNUEFSIGNvdW50XFxuKyAqIEBwY2NfaWQ6XFx0XFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcXG4rICogQGxhc3RfY21kOlxcdFxcdExhc3QgUENDIGNvbW1hbmRcXG4rICogQGtyZWY6XFx0XFx0a3JlZiBvYmplY3RcXG4rICovXFxuK3N0cnVjdCByYXMyX3NzcGNjIHtcXG4rXFx0c3RydWN0IG1ib3hfY2xpZW50XFx0XFx0bWJveF9jbGllbnQ7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuXFx0XFx0KnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cXHQqY29tbV9hZGRyO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0ZWxlbTtcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGNjX2xvY2s7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGRlYWRsaW5lX3VzO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRwY2NfbXBhcjtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21ydHQ7XFxuK1xcdGt0aW1lX3RcXHRcXHRcXHRcXHRsYXN0X2NtZF9jbXBsX3RpbWU7XFxuK1xcdGt0aW1lX3RcXHRcXHRcXHRcXHRsYXN0X21wYXJfcmVzZXQ7XFxuK1xcdGludFxcdFxcdFxcdFxcdG1wYXJfY291bnQ7XFxuK1xcdGludFxcdFxcdFxcdFxcdHBjY19pZDtcXG4rXFx0dTE2XFx0XFx0XFx0XFx0bGFzdF9jbWQ7XFxuK1xcdHN0cnVjdCBrcmVmXFx0XFx0XFx0a3JlZjtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxcbisgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlXFxuKyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMXFxuKyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDBcXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xcbitcXG4rI2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMFxcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXFxuK1xcbisvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovXFxuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rc3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTtcXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcdHUzMiBjYXBfc3RhdHVzO1xcbitcXHR1MTYgc3RhdHVzO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXFxuK1xcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxcbitcXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cXG4rXFx0ICpcXG4rXFx0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxcbitcXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXFxuK1xcdCAqIGJpdCBpcyBzZXQuXFxuK1xcdCAqL1xcbitcXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIHN0YXR1cyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXFxuK1xcdFxcdFxcdFxcdFxcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXFx1MDAzZWRlYWRsaW5lX3VzKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQsIHJjKTtcXG4rXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfRVJST1IpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiUENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQpO1xcbitcXHRcXHRzdGF0dXMgXFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XFxuK1xcdFxcdGlvd3JpdGUxNihzdGF0dXMsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXFxuK1xcdHJtYigpO1xcbitcXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XFxuK1xcdFxcdHJjID0gLUVQRVJNO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcXG4rXFx0XFx0cmMgPSAtRUJVU1k7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQTpcXG4rXFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcXG4rICogQHJhczJfY3R4OlxcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcXG4rICogQGNtZDpcXHRSQVMyIGNvbW1hbmQgdG8gc2VuZFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxcbisgKi9cXG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTtcXG4rXFx0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XFxuK1xcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcXG4rXFx0czY0IHRpbWVfZGVsdGE7XFxuK1xcdHUxNiB2YWw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRzc3BjYyA9IHJhczJfY3R4LVxcdTAwM2Vzc3BjYztcXG4rXFx0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcbitcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cGNjX2NoYW5uZWwgPSBzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW1cXG4rXFx0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxcbitcXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0IFxcdTAwM2UgdGltZV9kZWx0YSlcXG4rXFx0XFx0XFx0ZnNsZWVwKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcXG4rXFx0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cXG4rXFx0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cXG4rXFx0ICogbGltaXRhdGlvbi5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxcbitcXHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcXG4rXFx0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxcbitcXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXFxuK1xcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXBhcikge1xcbitcXHRcXHRpZiAoIXNzcGNjLVxcdTAwM2VtcGFyX2NvdW50KSB7XFxuK1xcdFxcdFxcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XFxuK1xcdFxcdFxcdGlmICgodGltZV9kZWx0YSBcXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcXHUwMDI2XFx1MDAyNiBzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9kYmcocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIlBDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXRcXFwiLCBjbWQpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXFx1MDAzZXBjY19tcGFyO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50LS07XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cXG4rXFx0aW93cml0ZTE2KGNtZCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZWNvbW1hbmQpO1xcbitcXG4rXFx0LyogRmxpcCBDTUQgQ09NUExFVEUgYml0ICovXFxuK1xcdGlvd3JpdGUxNigwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFxuK1xcdC8qIFJpbmcgZG9vcmJlbGwgKi9cXG4rXFx0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXFx1MDAyNmNtZCk7XFxuK1xcdC8qXFxuK1xcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cXG4rXFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X3dhcm4ocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0IFxcXCJFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXFxcblxcXCIsIGNtZCwgcmMpO1xcbitcXHRcXHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cXG4rXFx0XFx0dmFsID0gaW9yZWFkMTYoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdHZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTtcXG4rXFx0XFx0aW93cml0ZTE2KHZhbCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGVcXG4rXFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xcbitcXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cXG4rXFx0ICovXFxuK1xcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuK1xcdFxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW5uZWwtXFx1MDAzZW1ib3gtXFx1MDAzZXR4ZG9uZV9pcnEpXFxuK1xcdFxcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMocmFzMl9zZW5kX3BjY19jbWQsIFxcXCJhY3BpX3JhczJcXFwiKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MgPVxcbitcXHRcXHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2RlbChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0pO1xcbitcXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXFx1MDAzZXBjY19jaGFuKTtcXG4rXFx0a2ZyZWUoc3NwY2MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuK3tcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNnNzcGNjLVxcdTAwM2VrcmVmKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfZ2V0X3NzcGNjKGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyYXMyX3NzcGNjX2dldChzc3BjYyk7XFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cXHUwMDNlcGNjX2NoYW4pO1xcbitcXHRcXHRrZnJlZShzc3BjYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzc3BjYy1cXHUwMDNlcGNjX2lkXFx0XFx0PSBwY2NfaWQ7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfY2hhblxcdFxcdD0gcGNjX2NoYW47XFxuK1xcdHNzcGNjLVxcdTAwM2Vjb21tX2FkZHJcXHQ9IHBjY19jaGFuLVxcdTAwM2VzaG1lbTtcXG4rXFx0aWYgKHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5KVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cXHUwMDNlbGF0ZW5jeTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfbXJ0dFxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWU7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfbXBhclxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcXG4rXFx0c3NwY2MtXFx1MDAzZW1ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZVxcdD0gdHJ1ZTtcXG4rXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtLCBcXHUwMDI2cmFzMl9zc3BjYyk7XFxuK1xcdHJhczJfc3NwY2NfZ2V0KHNzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2tcXHQ9IFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cXHUwMDNlc3NwY2MpO1xcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cXHUwMDNlcGNjX2NoYW4pO1xcbitcXHRrZnJlZShzc3BjYyk7XFxuK2N0eF9mcmVlOlxcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK1xcbitcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcXG4rXFx0dTE2IHRvdF90YmxfbGVuO1xcbitcXHR1MTYgaTtcXG4rXFxuK1xcdGlmIChyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCBcXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XFxuK1xcdFxcdHByX3dhcm4oRldfV0FSTiBcXFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyBcXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgdG90X3RibF9sZW4pIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBjdHhfbGlzdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xcbitcXHRcXHRpZiAocGNjX2Rlc2NfbGlzdC1cXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVxcdTAwM2VjaGFubmVsX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBjY19kZXNjX2xpc3QtXFx1MDAzZWluc3RhbmNlKTtcXG4rXFx0XFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXFxuK1xcdFxcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxcXG5cXFwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XFxuK1xcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxcbitcXHRcXHRcXHRcXHRcXHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocGN0eF9saXN0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXFxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxcbisgKiBtZW1vcnkgZmVhdHVyZS5cXG4rICpcXG4rICogUmV0dXJuczogbm9uZS5cXG4rICovXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG4rXFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcXFxuXFxcIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xcbiBcXHRTQ1JVQl9BRERSRVNTLFxcbiBcXHRTQ1JVQl9TSVpFLFxcbiBcXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcXG4rXFx0U0NSVUJfRU5BQkxFX0RFTUFORCxcXG4gXFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxcbiBcXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXFxcIjB4JWxseFxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X21pbl9jeWNsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcXG4gXFx0XFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxcbitcXHRcXHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cXG4gXFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxcbiBcXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxcbiBcXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcXG4rXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbitcXHRkZXBlbmRzIG9uIEVEQUNcXG4rXFx0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXFxuK1xcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbitcXHRoZWxwXFxuK1xcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXFxuK1xcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuK1xcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXFxuK1xcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcXG4rXFx0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cXG4rXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbkBAIC0yLDYgKzIsNyBAQFxcbiBvYmotJChDT05GSUdfUkFTKVxcdCs9IHJhcy5vXFxuIG9iai0kKENPTkZJR19ERUJVR19GUylcXHQrPSBkZWJ1Z2ZzLm9cXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXFx0Kz0gY2VjLm9cXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXFx0Kz0gYWNwaV9yYXMyLm9cXG4gXFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcXHQrPSBhbWQvZm1wbS5vXFxuIG9iai15XFx0XFx0XFx0Kz0gYW1kL2F0bC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhiZjcxMzc1ZWM1MDY4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxuQEAgLTAsMCArMSw1NjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIkFDUEkgUkFTMiBNRU1PUlk6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZGFjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXFxuK1xcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXFxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXFxuK1xcbisvKlxcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxcbisgKi9cXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXFxuK1xcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxcbitcXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbitcXG4rc3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdGlvd3JpdGU4KDAsIFxcdTAwMjZjb21tb24tXFx1MDAzZXNldF9jYXBzWzBdKTtcXG4rXFxuK1xcdHJldHVybiBpb3JlYWQ4KFxcdTAwMjZjb21tb24tXFx1MDAzZWZlYXR1cmVzWzBdKSBcXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxcbitcXHRcXHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IDA7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICAoaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gdHJ1ZTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xcbitzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XFxuK1xcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViKSB7XFxuK1xcdFxcdCpydW5uaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdCpydW5uaW5nID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XFxuK1xcdGlmICghKCpydW5uaW5nKSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkKHZvaWQgKnApXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRpZiAoIXJ1bm5pbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdCptaW4gPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHQqbWF4ID0gcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXFxuK1xcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHQqZW5hYmxlZCA9IHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xcbitcXHRcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRcXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xcbitcXHRcXHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCplbmFibGVkID0gcnVubmluZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJ2X2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicmFzMl9zY3J1Yl9uaWQlZFxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxcbitcXHRcXHRcXHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXFxuK1xcdFxcdFxcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbitcXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXFxuK1xcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcXG4rXFx0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXFxuK1xcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxcbitcXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxcbitcXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxcbitcXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbitcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbitcXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcXG4rXFx0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VkcnZfYWN0aXZlID0gZmFsc2U7XFxuK1xcdGlmIChyYXMyX2N0eCBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcXG4rXFx0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXFxuK1xcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcXG4rXFx0ICogR0VUX1BBVFJPTF9QQVJBTUVURVJTIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3Nlc1xcbitcXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcXG4rXFx0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXFxuK1xcdCAqL1xcbitcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcnZfYWN0aXZlOlxcdFxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJ2X2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0Ljg0MTA3MjA2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4NTk5MTI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOTg0ZThkMjdhMjEwMDZjMTZiODg0YzkyYmRiNmQ3MTBhMzZmMGY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAyMjoyNjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSArMjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbitcdFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXG4gXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9zaXplXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuQEAgLTM0LDYgKzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbitXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbitEYXRlOlx0XHRKYW4gMjAyNlxuK0tlcm5lbFZlcnNpb246XHQ2LjE5XG4rQ29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbitcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbitcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuIEtlcm5lbFZlcnNpb246XHQ2LjE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuK1xuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXG4rXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4rXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMFxuK1xuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbitcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDAwXG4rXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDBcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4rXG4rODY0MDBcbitcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuK1xuKyMgZWNobyA0MzIwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4rXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbitcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuK1xuKyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbitcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxuK1xuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbitcbisjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbitcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4rXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG4rXG4rMFxuK1xuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbitcbisjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuK2NvbmZpZyBBQ1BJX1JBUzJcbitcdGJvb2wgXCJBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4rXHRkZXBlbmRzIG9uIE1BSUxCT1hcbitcdGRlcGVuZHMgb24gUENDXG4rXHRoZWxwXG4rXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4rXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuK1xuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIFx0dHJpc3RhdGUgXCJQcm9jZXNzb3JcIlxuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVx0Kz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQrPSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCs9IGNwcGNfYWNwaS5vXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcdCs9IHNwY3Iub1xuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCs9IHJhczIub1xuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4rXHRhY3BpX3JhczJfaW5pdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxZGRmNWM5Njg4YzY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICsxLDUwOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIkFDUEkgUkFTMjogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9wY2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbisgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4rICogQHBjY19jaGFuOlx0XHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4rICogQHBjY19sb2NrOlx0XHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxuKyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4rICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbisgKlx0XHRcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXG4rICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4rICogQGxhc3RfbXBhcl9yZXNldDpcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XG4rICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbisgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuKyAqIEBsYXN0X2NtZDpcdFx0TGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuKyAqL1xuK3N0cnVjdCByYXMyX3NzcGNjIHtcbitcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuK1x0dTY0XHRcdFx0XHRkZWFkbGluZV91cztcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X2NtZF9jbXBsX3RpbWU7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4rXHRpbnRcdFx0XHRcdG1wYXJfY291bnQ7XG4rXHRpbnRcdFx0XHRcdHBjY19pZDtcbitcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4rXHRzdHJ1Y3Qga3JlZlx0XHRcdGtyZWY7XG4rfTtcbitcbisvKlxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cbisgKi9cbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xuK1xuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXG4rXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuK1xuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHUzMiBjYXBfc3RhdHVzO1xuK1x0dTE2IHN0YXR1cztcbitcdGludCByYztcbitcbitcdC8qXG4rXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXG4rXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cbitcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuK1x0ICpcbitcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcbitcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbitcdCAqIGJpdCBpcyBzZXQuXG4rXHQgKi9cbitcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbitcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcbitcdFx0XHRcdFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cdTAwM2VkZWFkbGluZV91cyk7XG4rXHRpZiAocmMpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCwgcmMpO1xuK1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbitcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4rXHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4rXHRybWIoKTtcbitcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4rXHRcdHJjID0gLUVQRVJNO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4rXHRcdHJjID0gLUVCVVNZO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4rXHRcdHJjID0gLUVJTlZBTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcbisgKiBAcmFzMl9jdHg6XHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXG4rICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxuKyAqL1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHM2NCB0aW1lX2RlbHRhO1xuK1x0dTE2IHZhbDtcbitcdGludCByYztcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbitcdCAqL1xuK1x0aWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuK1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbm5lbC1cdTAwM2VtYm94LVx1MDAzZXR4ZG9uZV9pcnEpXG4rXHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcImFjcGlfcmFzMlwiKTtcbitcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSk7XG4rXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0a2ZyZWUoc3NwY2MpO1xuK31cbitcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0a3JlZl9nZXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbit7XG4rXHRrcmVmX3B1dChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmLCAgXHUwMDI2cmFzMl9saXN0X3BjY19yZWxlYXNlKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX2dldF9zc3BjYyhpbnQgcGNjX2lkKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX2lkICE9IHBjY19pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9nZXRfc3NwY2MocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0XHRrZnJlZShzc3BjYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuK1x0c3NwY2MtXHUwMDNlcGNjX2NoYW5cdFx0PSBwY2NfY2hhbjtcbitcdHNzcGNjLVx1MDAzZWNvbW1fYWRkclx0PSBwY2NfY2hhbi1cdTAwM2VzaG1lbTtcbitcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVx1MDAzZWxhdGVuY3k7XG4rXHRlbHNlXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21ydHRcdFx0PSBwY2NfY2hhbi1cdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21wYXJcdFx0PSBwY2NfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4rXHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbitcbitcdGtyZWZfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0sIFx1MDAyNnJhczJfc3NwY2MpO1xuK1x0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9IHBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4rXHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4rc3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHUzMiBjb21wX25pZDtcbitcdGludCBpZCwgcmM7XG4rXG4rXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcbitcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbitcdFx0cHJfZGVidWcoXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcblwiLCBjaGFubmVsLCBweG1faW5zdCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcbitcbitcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCIsIGNoYW5uZWwsXG4rXHRcdFx0IHB4bV9pbnN0LCByYyk7XG4rXHRcdGdvdG8gY3R4X2ZyZWU7XG4rXHR9XG4rXG4rXHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoaWQgXHUwMDNjIDApIHtcbitcdFx0cmMgPSBpZDtcbitcdFx0Z290byBwY2NfZnJlZTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYubmFtZVx0XHQ9IG5hbWU7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBpZGFfZnJlZTtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbitcdH1cbitcbitcdHJldHVybiByYXMyX2N0eDtcbitcbitpZGFfZnJlZTpcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4rcGNjX2ZyZWU6XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbitjdHhfZnJlZTpcbitcdGtmcmVlKHJhczJfY3R4KTtcbitcbitcdHJldHVybiBFUlJfUFRSKHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MTYgdG90X3RibF9sZW47XG4rXHR1MTYgaTtcbitcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiTm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiUkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgcmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwY3R4X2xpc3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICsgMSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xuK1x0XHRpZiAocGNjX2Rlc2NfbGlzdC1cdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVx1MDAzZWNoYW5uZWxfaWQsXG4rXHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4rXHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuK1x0XHRpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xuK1x0XHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cIiwgUFRSX0VSUihyYXMyX2N0eCkpO1xuK1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbitcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuK1x0XHRcdFx0XHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XG4rXHRcdH1cbitcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4rXHR9XG4rXHRrZnJlZShwY3R4X2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4rICpcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuKyAqIG1lbW9yeSBmZWF0dXJlLlxuKyAqXG4rICogUmV0dXJuczogbm9uZS5cbisgKi9cbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiO1xuK1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcdTAwMjZyYXMyX3RhYik7XG4rXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcblwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwiKTtcbitcbitcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4rKysgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xuIFx0U0NSVUJfQUREUkVTUyxcbiBcdFNDUlVCX1NJWkUsXG4gXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcbitcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgXCIldVxcblwiKVxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcIiV1XFxuXCIpXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiArMTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcbitcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuK1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4rXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHJldHVybiAwNDQ0O1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuK1x0XHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5pbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5AQCAtNDYsNCArNDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuK2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4rXHR0cmlzdGF0ZSBcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4rXHRkZXBlbmRzIG9uIEVEQUNcbitcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuK1x0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4rXHRoZWxwXG4rXHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuK1x0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbitcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4rXHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4rXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxuK1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0Kz0gcmFzLm9cbiBvYmotJChDT05GSUdfREVCVUdfRlMpXHQrPSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCs9IGNlYy5vXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXHQrPSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCs9IGFtZC9hdGwvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YmY3MTM3NWVjNTA2OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbkBAIC0wLDAgKzEsNTYyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqL1xuK1xuKyN1bmRlZiBwcl9mbXRcbisjZGVmaW5lIHByX2ZtdChmbXQpXHRcIkFDUEkgUkFTMiBNRU1PUlk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4rXG4rI2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcbitcbisvKlxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXG4rICovXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuK1xuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcbisjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbitcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4rfTtcbitcbisjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbitcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4rXHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuK1x0XHQqcnVubmluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbitcdGlmICghKCpydW5uaW5nKSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmICghcnVubmluZykge1xuK1x0XHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0bXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbitcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuK1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuK1x0ICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cIixcbitcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4rXHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmVuYWJsZWQgPSBydW5uaW5nO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX2luO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZW5hYmxlKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0LypcbitcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuK1x0ICogd2l0aCAoYmFzZSArIHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgKyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbitcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIiVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuK1x0XHRyZXQgPSAtRVJBTkdFO1xuK1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwiLCByZXQpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdH1cbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2VkcnZfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuK1x0XHRcdFx0XHQgICAgICAgXCJyYXMyX3NjcnViX25pZCVkXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbitcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXG4rXHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHRcdH1cbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XG4rXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXG4rXHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4rXHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcbitcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxuK1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbitcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXG4rXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuK1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbitcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbitcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcbitcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4rXHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJ2X2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4IFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbitcdFx0a3RocmVhZF9zdG9wKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kXG4rXHQgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzXG4rXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcbitcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxuK1x0ICovXG4rXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxuXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbitcdHJhczJfY3R4LVx1MDAzZW1lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRydl9hY3RpdmU6XHRcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxuKyAqL1xuK3N0cnVjdCByYXMyX21lbV9jdHgge1xuK1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2VcdFx0YWRldjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuK1x0dm9pZFx0XHRcdFx0KnNzcGNjO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0KnBjY19sb2NrO1xuK1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4rXHR1NjRcdFx0XHRcdG1lbV9iYXNlO1xuK1x0dTY0XHRcdFx0XHRtZW1fc2l6ZTtcbitcdHU2NFx0XHRcdFx0YmFzZTtcbitcdHU2NFx0XHRcdFx0c2l6ZTtcbitcdHU4XHRcdFx0XHRzY3J1Yl9jeWNsZV9ocnM7XG4rXHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuK1x0dThcdFx0XHRcdG1pbl9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtYXhfc2NydWJfY3ljbGU7XG4rXHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbitcdGJvb2xcdFx0XHRcdGJnX3NjcnViO1xuK1x0Ym9vbFx0XHRcdFx0cmVlbmFibGVfYmdfc2NydWI7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbitcdGJvb2xcdFx0XHRcdGRydl9hY3RpdmU7XG4rfTtcbitcbisjaWZkZWYgQ09ORklHX0FDUElfUkFTMlxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuQEAgLTY4NCw2ICs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxuKyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cbiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG5AQCAtNjk2LDYgKzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4rXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbitcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4gXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuIFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcbiBcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNjo0NC44NDEwNzQzODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5NTk2OTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgb2YgQUNQSSBSQVMyIFN1cHBvcnQgYW5kIE1lbW9yeSBTY3J1YmJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBBQ1BJIFJBUzIgc3VwcG9ydCBhbmQgbWVtb3J5IHNjcnViYmluZy4gSXQncyBnb3QgY2hhbmdlcyBpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AsIGBkcml2ZXJzL3Jhcy9hY3BpX3JhczIuY2AsIGFuZCBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFDUEkgUkFTMiBsZWFucyBoZWF2aWx5IG9uIEFDUEkgdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJBUzIgdGFibGUsIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpLlxuXG5GaXJzdCwgdGhlIFFFTVUvR0NFIHF1ZXN0aW9uLiBEb2VzIHRoZSBmaXJtd2FyZSBhY3R1YWxseSAqcHJvdmlkZSogYSBSQVMyIHRhYmxlIGJ5IGRlZmF1bHQ/IFR5cGljYWxseSwgbm8uIFFFTVUgZG9lc24ndCB1c3VhbGx5IGV4cG9zZSB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZC4gQnV0IHRoZXJlJ3MgU3l6a2FsbGVyLiBDYW4gaXQgaW5qZWN0IEFDUEkgdGFibGVzPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBhbmdsZSB3ZSBjYW4gZXhwbG9pdD9cblxuTGV0IG1lIHNlZS4uLiBgYWNwaV9yYXMyX2luaXRgIGdldHMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgaXNuJ3QgcHJlc2VudCwgaXQganVzdCByZXR1cm5zLiBUaGF0J3MgYSBnb29kIHNhbml0eSBjaGVjayBpbiB0aGUgY29kZSwgYnV0IGl0IG1ha2VzIHRoZSB0YWJsZSBwcmVzZW5jZSAqY3JpdGljYWwqLlxuXG5TeXprYWxsZXIgKmNhbiogaW5qZWN0IHRhYmxlcywgcmlnaHQ/IEkgc2VlbSB0byByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19BQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQuIEJ1dCwgaXQncyBvZnRlbiBhIHBhaW4gdG8gdGFyZ2V0IHNwZWNpZmljIEFDUEkgdGFibGUgaW5qZWN0aW9ucy4gQW5kLCB0aGF0IFBDQyBpbnRlcmFjdGlvbi4uLiBkb2VzIFN5emthbGxlcidzIHRhYmxlIGluamVjdGlvbiBjb3ZlciB0aGF0IHByb3Blcmx5LCBvciBkb2VzIGl0IGxlYXZlIHVzIGV4cG9zZWQ/IEhvbmVzdGx5LCB0aGUgaW5qZWN0aW9uIHRocm91Z2ggYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQgaXMgaGFyZCB0byByZWFjaCB1bmxlc3Mgd2UgYXJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXQuXG5cblNvLCBpZiBgYWNwaV9nZXRfdGFibGVgIGZhaWxzLCBgYWNwaV9yYXMyX2luaXRgIGRvZXMgbm90aGluZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQ/IFNvZnR3YXJlIGVtdWxhdGlvbiwgcGVyaGFwcz8gUENDIGlzIHRoZSBBQ1BJIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbC4gVGhlIGRyaXZlciBqdXN0IHF1aWV0bHkgZG9lcyBub3RoaW5nIGlmIGl0IGNhbid0IGZpbmQgdGhlIHRhYmxlLiBCdXQgaGFuZyBvbiwgU3l6a2FsbGVyIGRvZXMgZnV6eiBBQ1BJIHRhYmxlcyBzb21ldGltZXMsIHNvIHRoYXQgaXMgYSB0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3M6IGBDT05GSUdfQUNQSV9SQVMyYCwgYENPTkZJR19NRU1fQUNQSV9SQVMyYCwgYW5kIGBDT05GSUdfRURBQ19TQ1JVQmAuIEdvdCBpdC5cblxuT2theSwgY2FuIHdlIGZ1enogdGhpcz8gVGhlIGRyaXZlciByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSBpZiB0aGUgUkFTMiB0YWJsZSAqaXMqIHByZXNlbnQsIGFuZCB0aGVuIGByYXMyX21lbV9kcnZfcHJvYmVgIGdldHMgY2FsbGVkLiBUaGF0IHVzZXMgUENDLiBUbyBmdXp6IGVmZmVjdGl2ZWx5LCB3ZSdkICpuZWVkKiB0aGF0IFJBUzIgdGFibGUuIElzIGl0IGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseSwgdGhpcyBpcyBhIG5ldyBkcml2ZXIsIHBhcnNpbmcgQUNQSSB0YWJsZXMsIGFuZCBleHBvc2luZyBzeXNmcyBpbnRlcmZhY2VzLiBIaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzIHRoZXJlLiBCdXQgaWYgd2UgY2FuJ3QgcmVsaWFibHkgaW5qZWN0IHRoZSBBQ1BJIHRhYmxlLi4uIGl0IHdpbGwgYmUgdG91Z2ggZm9yIFN5emthbGxlciB0byB0cmlnZ2VyIGl0LiBJdCB3b3VsZCBuZWVkIHRvIGhhdmUgc29tZXRoaW5nIGxpa2UgYSBgc3l6X2FjcGlfc2V0dXBgIGNhbGwsIG9yIHRoZSBjYXBhYmlsaXR5IHRvIG1vdW50IGNvbmZpZ2ZzIGFuZCBpbmplY3QgQUNQSSB0YWJsZXMuXG5cbkxldCdzIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgY2hhbmdlIGFkZHMgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyByZWFjaGFibGUgaWYgKmFueSogRURBQyBkcml2ZXIgY2FsbHMgYHNldF9lbmFibGVkX29kYC4gSXQgc2VlbXMgYGFjcGlfcmFzMi5jYCAqaXMqIHRoZSBvbmx5IG9uZSBjdXJyZW50bHkgdXNpbmcgaXQuIFNvIGl0IG1ha2VzIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBSQVMyIHRhYmxlIGxlc3Mgb2YgYSBsaW1pdGluZyBmYWN0b3IuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgdXNlcnMgb2YgYGVkYWNfc2NydWJfb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNjo1Ny4wMzcwNDU3ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjA4Mjk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZGFjX3NjcnViX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL2VkYWMuYz0zMjQ9c3RhdGljIGludCBjeGxfcGF0cm9sX3NjcnViX3NldF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU1LVxcbmRyaXZlcnMvY3hsL2NvcmUvZWRhYy5jOjM1NjpzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIGN4bF9wc19zY3J1Yl9vcHMgPSB7XFxuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU3LVxcdC5nZXRfZW5hYmxlZF9iZyA9IGN4bF9wYXRyb2xfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz00MD1zdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYy00NC1cXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdF9jdHggKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShyYXNfZmVhdF9kZXYpO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzo0NTpcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy00Ni1cXHR0eXBlIGRhdGE7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmM9NjU9c3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTcwLVxcdHN0cnVjdCBlZGFjX2Rldl9mZWF0X2N0eCAqY3R4ID0gZGV2X2dldF9kcnZkYXRhKHJhc19mZWF0X2Rldik7XFx0XFx0XFxcXFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjcxOlxcdGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyAqb3BzID0gY3R4LVxcdTAwM2VzY3J1YltpbnN0XS5zY3J1Yl9vcHM7XFx0XFx0XFxcXFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTcyLVxcdHR5cGUgZGF0YTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtOTctXFx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzo5ODpcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTk5LVxcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9MzczPXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ2OC1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo0Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00NzAtXFx0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmg9NjcyPWVudW0gZWRhY19kZXZfZmVhdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02NzktLyoqXFxuaW5jbHVkZS9saW51eC9lZGFjLmg6NjgwOiAqIHN0cnVjdCBlZGFjX3NjcnViX29wcyAtIHNjcnViIGRldmljZSBvcGVyYXRpb25zIChhbGwgZWxlbWVudHMgb3B0aW9uYWwpXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjgxLSAqIEByZWFkX2FkZHI6IHJlYWQgYmFzZSBhZGRyZXNzIG9mIHNjcnViYmluZyByYW5nZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY5My0gKi9cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2OTQ6c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02OTUtXFx0aW50ICgqcmVhZF9hZGRyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODYxPXN0cnVjdCBlZGFjX2Rldl9kYXRhIHtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjItXFx0dW5pb24ge1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg2MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKnNjcnViX29wcztcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjQtXFx0XFx0Y29uc3Qgc3RydWN0IGVkYWNfZWNzX29wcyAqZWNzX29wcztcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTg3OT1zdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODItXFx0dW5pb24ge1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg4MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKnNjcnViX29wcztcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODQtXFx0XFx0Y29uc3Qgc3RydWN0IGVkYWNfZWNzX29wcyAqZWNzX29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6MjY6NTkuMDI5MTM3ODgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNTI5MzE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDWEwgRHJpdmVyJ3MgUkFTMiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhlIENYTCBkcml2ZXIgcmVsaWVzIG9uIGBlZGFjX3NjcnViX29wc2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZSBuZXcgYGVuYWJsZV9kZW1hbmRgIGZlYXR1cmUsIHRoYXQncyBleGNsdXNpdmVseSBpbiBgYWNwaV9yYXMyLmNgLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCAqY2FuKiB3ZSBldmVuIHJlYWNoIGBhY3BpX3JhczIuY2A/IEl0IGhpbmdlcyBvbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQUNQSSBSQVMyIHRhYmxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBoZWxwIGhlcmU/IEkga25vdyBpdCBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIHRocm91Z2ggY29uZmlnZnMgYXQgYC9zeXMva2VybmVsL2NvbmZpZy9hY3BpL3RhYmxlYCwgc28gbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBkZXNjcmlwdGlvbnMgZm9yIEFDUEkgdGFibGUgaW5qZWN0aW9uIGF2YWlsYWJsZSBpbiBzeXprYWxsZXIuXG5cblJpZ2h0LCBzeXprYWxsZXIgKmNhbiogZG8gaXQsIHRoYXQncyBnb29kIG5ld3MuIEhvd2V2ZXIsIGNvbnN0cnVjdGluZyBhIHZhbGlkIFJBUzIgdGFibGUgYW5kIGEgdXNhYmxlIFBDQyBjaGFubmVsIGlzIGEgZGlmZmVyZW50IGNoYWxsZW5nZS4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldyBgYWNwaV9yYXMyLmNgIGRyaXZlciwgYW5kIHRoYXQgaXQgcGFyc2VzIEFDUEkgdGFibGVzIGFuZCBpbnRlcmFjdHMgd2l0aCBQQ0MuIEl0IGlzIGxpa2VseSB0aGUgYXV0aG9yJ3MgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGlzIG5ldyBkcml2ZXIgaXMgdXNlZCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzIHdoZW4gaXQgaXMgdXNlZC4gSSBhbSBubyBsb25nZXIgd29ycmllZCBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBuZXcgZHJpdmVyIGJlIGV4cGxvaXRlZC5cblxuTm93LCBhIGNyaXRpY2FsIHRob3VnaHQ6IGlzIHRoaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gVGhlbiBJIHJlbWVtYmVyZWQ6IFFFTVUgKmRvZXMqIHN1cHBvcnQgQUNQSSB0YWJsZSBpbmplY3Rpb24uIEFuZCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogQUNQSSB0YWJsZXMuIEJ1dCBoZXJlJ3MgdGhlIHNuYWcsIFBDQywgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCwgbmVlZHMgYSBQQ0MgbWFpbGJveCBjaGFubmVsLiBOb3csIGRvZXMgUUVNVSBwcm92aWRlIG9uZT8gVGhpcyBpcyB0aGUgbmV4dCB0aGluZyB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGEgUENDIG1haWxib3ggZHJpdmVyIHRoYXQgY2FuIGJlIGxvYWRlZCwgb3IsIGlkZWFsbHksIGZ1enplZC4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgdnVsbmVyYWJpbGl0eSB3b3JrLCBpZiBpdCBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjA0LjczNDQ0OTUwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2Mjk1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGF0YS1cXHUwMDNlZG9uZSk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XFx0ZGF0YS1cXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmRhdGEtXFx1MDAzZWNsLCBjdHgtXFx1MDAzZXN1YnNwYWNlX2lkKTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cXHRpZiAoSVNfRVJSKGRhdGEtXFx1MDAzZXBjY19jaGFuKSkge1xcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jPTU2Nj1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKGludCBwY2Nfc3NfaWR4KVxcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cXHRpZiAocGNjX3NzX2lkeCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTczLVxcbi0tXFxuZHJpdmVycy9hY3BpL3JhczIuYz0yODM9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzA1OlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XFxuZHJpdmVycy9hY3BpL3JhczIuYy0zMDYtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTA3PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfcmVxdWVzdF9wY2NfY2hhbihzdHJ1Y3QgaGlzaV91bmNvcmVfZnJlcSAqdW5jb3JlKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTctXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYzoxMTg6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnVuY29yZS1cXHUwMDNlY2wsIHVuY29yZS1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTktXFx0aWYgKElTX0VSUihwY2NfY2hhbikpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjktXFx0XFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0gc2xpbXByb19pMmNfcGNjX3J4X2NiO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgY3R4LVxcdTAwM2VtYm94X2lkeCk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlxcdFxcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlxcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0xNzM9c3RhdGljIGludCBoY2NzX3JlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjE4OTpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE5MC1cXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTM3PWV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmluY2x1ZGUvYWNwaS9wY2MuaC00My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjA2LjY5MDc1MDMyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODQ3OTc3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIHRoZSBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHN5emthbGxlciwgd2l0aCBpdHMgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCAqbWlnaHQqIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBQQ0MgbWFpbGJveCBwYXRod2F5LiBUaGUgbG9naWMgZ29lczogYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgcmVxdWVzdHMgdGhlIG1haWxib3ggY2hhbm5lbCwgYW5kIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaW5pdGlhbGl6ZXMgZnJvbSB0aGUgQUNQSSBQQ0NUIHRhYmxlLiBTeXprYWxsZXIgaW5qZWN0aW5nIGJvdGggYSBQQ0NUIHRhYmxlIGFuZCBhIFJBUzIgdGFibGUgY291bGQgKnRoZW9yZXRpY2FsbHkqIGNyZWF0ZSB0aGlzIHNldHVwLlxuXG5Ib3dldmVyLCBnaXZlbiBzeXprYWxsZXIncyBjdXJyZW50IGxpbWl0YXRpb25zIGluIEFDUEkgdGFibGUgbWFuaXB1bGF0aW9uLCBzdWNjZXNzZnVsbHkgY3JhZnRpbmcgYSBjb2hlcmVudCBQQ0NULCBQQ0MgY2hhbm5lbCwgYW5kIFJBUzIgdGFibGUgdGhhdCBhbGwgbGluayBjb3JyZWN0bHkgdG8gdGhlIGBhY3BpX3JhczJgIG1lbW9yeSBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHNlZW1lZCBpbmNyZWRpYmx5IHVubGlrZWx5LiBJdCdzIGp1c3QgYSBsb3QgdG8gZ2V0IHJpZ2h0LlxuXG5UaGVuIEkgc2hpZnRlZCBnZWFycyDigJMgaXMgdGhlcmUgKmFueSogb3RoZXIgcm91dGU/IEkgc2VlIHRoaXMgYHJhczJfbWVtX2Rydl9wcm9iZWAgaXMgcGFydCBvZiBhbiBhdXhpbGlhcnkgZHJpdmVyLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XG5cdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG5cdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcblx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXG5cdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbn07XG5gYGBcblxuQ2FuICp3ZSogY3JlYXRlIGFuIGF1eGlsaWFyeSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IE5vLCB0aGF0J3Mgbm90IGhvdyBpdCB3b3JrczsgYXV4aWxpYXJ5IGRldmljZXMgYXJlIGNyZWF0ZWQgYnkgb3RoZXIga2VybmVsIGRyaXZlcnMuIEluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB0aGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGRyaXZlciBpcyByZXNwb25zaWJsZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgcGFyc2VfcmFzMl90YWJsZWAgZnVuY3Rpb24uIFRoZXJlZm9yZSwgdGhpcyB3aG9sZSBwYXRod2F5ICpzdHJpY3RseSogcmVxdWlyZXMgcGFyc2luZyB0aGUgQUNQSSBSQVMyIHRhYmxlLlxuXG5TbywgY291bGQgc3l6a2FsbGVyIGZ1enogdGhpcz8gSXQncyBwb3NzaWJsZSEgSWYgaXQgY2FuIGluamVjdCBBQ1BJIHRhYmxlcywgaXQgKm1pZ2h0KiByZWFjaCBgcGFyc2VfcmFzMl90YWJsZWAuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgd2hldGhlciBzeXprYWxsZXIgYWN0dWFsbHkgKmRvZXMqIGhhdmUgQUNQSSB0YWJsZSBpbmplY3Rpb24gYXZhaWxhYmxlLiBZZXMsIGl0IGRvZXMhIGBzeXpfYWNwaV9zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgaXMgdXNlZC5cblxuQnV0IHdhaXQuIEV2ZW4gaWYgaXQgKmRvZXMqIHBhcnNlIHRoZSBSQVMyIHRhYmxlLCB0aGF0IGBwYXJzZV9yYXMyX3RhYmxlYCBmdW5jdGlvbiB0aGVuIGNhbGxzIGByZWdpc3Rlcl9wY2NfY2hhbm5lbGAsIHdoaWNoIGNhbGxzIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiBBbmQsIGlmIHRoZXJlIGlzbid0IGEgUENDVCB0YWJsZSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCBmYWlsdXJlIHdpbGwgcHJvcGFnYXRlIHRvIGBhZGRfYXV4X2RldmljZWAsIGFuZCB0aGVyZWZvcmUgdGhlIGF1eGlsaWFyeSBkZXZpY2Ugd29uJ3QgYmUgY3JlYXRlZC4gTWVhbmluZywgYHJhczJfbWVtX2Rydl9wcm9iZWAgd29uJ3QgZXZlciBiZSBjYWxsZWQgdW5sZXNzIGEgKnZhbGlkKiBQQ0NUIHRhYmxlIGlzIHByZXNlbnQgYW5kIGEgUENDIGNoYW5uZWwgaXMgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLlxuXG5UaGUgY29uY2x1c2lvbiBpcyB0aGlzIGlzICpleHRyZW1lbHkqIGhhcmQgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBVbmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2YgbW9jayBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFBDQywgd2UncmUgcHJvYmFibHkgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgZWFzaWx5IHdpdGggZnV6emluZy4gTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3Igc29tZSBQQ0MgZW11bGF0aW9ucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxNS4zNzU1NTE5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyOTY5NzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjE1LjU4Njg1NTkxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDYzNTI2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNYWlsYm94IERyaXZlciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9tYWlsYm94L2AgZGlyZWN0b3J5LiBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgaW4gdGhpcyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgYSBtb2NrZWQgdmVyc2lvbiBvZiBpdCBoZXJlPyBUaGF0J3MgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTWFpbGJveCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBpZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHJlYWwgaGFyZHdhcmUgZHVyaW5nIHRlc3Rpbmcgb3IgZGV2ZWxvcG1lbnQsIHRoZW4gYSBtb2NrIFBDQyB3b3VsZCBiZSB0aGUgbG9naWNhbCB3YXkgdG8gZ28uIFRoaXMgaXMgYSBjcml0aWNhbCBkZXRhaWwgaW4gZmlndXJpbmcgb3V0IGhvdyB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgYW5kIGhvdyByb2J1c3RseSBpdOKAmXMgZGVzaWduZWQuIFdpdGhvdXQgdW5kZXJzdGFuZGluZyB0aGUgUENDIGludGVyYWN0aW9uLCB0aGUgb3ZlcmFsbCBmdW5jdGlvbiBvZiB0aGUgbWFpbGJveCBkcml2ZXIgaXMgdW5jbGVhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxOC41MzMyMTEyNTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE3MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tYWlsYm94L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21haWxib3gvcGNjLmM9MzEzPXN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM0OTogKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzUwLSAqXFx0XFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNjE6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzYyLXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTItfVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTM6RVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5OC0gKiBAcGNoYW46IFBvaW50ZXIgdG8gdGhlIFBDQyBtYWlsYm94IGNoYW5uZWwgYXMgcmV0dXJuZWQgYnlcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXFx0ICAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNDAwLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxOC42NTAzODY4NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3NTY0NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkFTMiBNZW1vcnkgRHJpdmVyIFByb2JlKipcblxuT2theSwgc28gdGhlcmUncyBubyBcIm1vY2sgUENDXCIgaW4gdGhpcyBzY2VuYXJpbywgd2hpY2ggbWVhbnMgdGhlIHBhdGggdG8gYHJhczJfbWVtX2Rydl9wcm9iZWAgaXMgdmVyeSBzcGVjaWZpYyBhbmQgaGluZ2VzIG9uIGEgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBMZXQncyBicmVhayBpdCBkb3duOiBGaXJzdCwgSSBuZWVkIHRvIGhhdmUgYSB2YWxpZCBBQ1BJIFJBUzIgdGFibGUsIHRoYXQncyBzdGVwIG9uZS4gVGhlbiwgSSAqbXVzdCogaGF2ZSBhbiBBQ1BJIFBDQ1QgdGFibGUgd2l0aCBhIHZhbGlkIHN1YnNwYWNlIGRlZmluZWQ7IHRoYXQncyBjcml0aWNhbC4gRm9sbG93aW5nIHRoaXMsIHRoZSBkZXNjcmliZWQgc3Vic3BhY2UgKmhhcyogdG8gaGF2ZSBhIGZ1bmN0aW9uYWwsIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGFzc2lnbmVkIHRvIGl0LCB3aGljaCBpcyB0aGUgdGhpcmQgbmVjZXNzYXJ5IGNvbXBvbmVudC4gRm91cnRoLCB0aGUgUENDIG1haWxib3ggZHJpdmVyIGhhcyB0byBzdWNjZWVkIGluIGl0cyBwcm9iaW5nIHByb2Nlc3MsIGFuZCBhY3R1YWxseSByZWdpc3RlciB0aGUgY2hhbm5lbDsgSSBuZWVkIHRoYXQgZXN0YWJsaXNoZWQgbGluay4gRmlmdGgsIGBhY3BpX3JhczJfaW5pdGAgbmVlZHMgdG8gY29tZSBpbnRvIHBsYXksIHBhcnNlIHRoZSBSQVMyIHRhYmxlLCBmaW5kIHRoZSBQQ0MgY2hhbm5lbCwgYW5kIHRyaWdnZXIgdGhlIGNhbGwgdG8gYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGA7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIFNpeHRoLCBhbiBhdXhpbGlhcnkgZGV2aWNlIG11c3QgYmUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQ7IHRoaXMgaXMgYSBwcmVyZXF1aXNpdGUuXG5cbk5vdywgb25jZSB0aG9zZSBzdGVwcyBhcmUgY29tcGxldGVkLCBJJ2xsIGFycml2ZSBhdCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgc2VuZHMgYSBQQ0MgY29tbWFuZCB0byByZXRyaWV2ZSBwYXRyb2wgcGFyYW1ldGVycy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gcGF1c2UgYW5kIHNlcmlvdXNseSBjb25zaWRlciBob3cgdGhpcyBjb21tYW5kIGludGVyYWN0cyB3aXRoIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gSXQgc2VlbXMgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGhhcyB0byBhY3R1YWxseSAqcmVzcG9uZCosIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBub3QgdGltZSBvdXQuIE9yLCBwZXJoYXBzIGl0IGp1c3Qgd3JpdGVzIHNvbWV0aGluZyB0byBtZW1vcnkgYW5kIHRoZW4gcmluZ3MgYSBkb29yYmVsbCB0byBpbmRpY2F0ZSBjb21wbGV0aW9uPyBMZXQncyBjbGFyaWZ5IHRoaXMuICpBaGEhKiBgcmFzMl9zZW5kX3BjY19jbWRgIHBvbGxzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2l0aGluIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24uIEl0J3MgbG9va2luZyBmb3IgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYC4gU28sIGlmIHRoZXJlJ3Mgbm8gaGFyZHdhcmUgb3IgZW11bGF0b3IgcHJlc2VudCB0byBzZXQgdGhhdCBiaXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciwgYGNoZWNrX3BjY19jaGFuYCBpcyBnb2luZyB0byB0aW1lIG91dCBhbmQgcmV0dXJuIGFuIGVycm9yOyBpdCdzIGEgZGVhZCBlbmQuIEknZCBiZXR0ZXIgY29uZmlybSB0aGlzLCBsZXQgbWUgY2hlY2sgdGhlIGBjaGVja19wY2NfY2hhbmAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjI1LjAyNjAzNDAzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2NzcxNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3BjY19jaGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz03NT1zdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNzYtXFxuZHJpdmVycy9hY3BpL3JhczIuYzo3NzpzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MTQ0PWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMTU5LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MTYwOlxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMTYxLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIzNC1cXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjM1OlxcdFxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMjM2LVxcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjI1Ljg0MjgxMDY0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1Nzc2MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24geW91ciBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gYGNoZWNrX3BjY19jaGFuYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBjaGVja19wY2NfY2hhbmAgd2l0aGluIGBkcml2ZXJzL2FjcGkvcmFzMi5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgZXJyb3IgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBBQ1BJIFJBUyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBmaWxlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIGhhcmR3YXJlIGVycm9yIHJlcG9ydGluZyBvciBwb3RlbnRpYWxseSBldmVuIGNvbmZpZ3VyaW5nIHRoZSBQQ0MgZm9yIGludGVyLXByb2Nlc3NvciBjb21tdW5pY2F0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc29tZSBoYXJkd2FyZSByZXNvdXJjZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUkFTIGFyY2hpdGVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBBQ1BJIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgaXQncyBkZXNpZ25lZCB0byBkZXRlY3QsIGFuZCBob3cgZG9lcyBpdCByZXNwb25kIHRvIHRob3NlIGZhaWx1cmVzPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktcHJvY2Vzc29yIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGlmIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEFDUEkgbmFtZXNwYWNlIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBmcm9tIGFuIHVucHJpdmlsZWdlZCB1c2VyIHNwYWNlLiBJJ20gYWxzbyB3b25kZXJpbmcgaWYgaXQgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudCBvciBzcGVjaWZpYyBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBhbmQgd2hhdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0IHJlcXVpcmVtZW50cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6MzEuMTU4NTkwNDM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzc6XFx0c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbiAgODA6XFx0XFx0dTMyIGNhcF9zdGF0dXM7XFxuICA4MTpcXHRcXHR1MTYgc3RhdHVzO1xcbiAgODI6XFx0XFx0aW50IHJjO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQvKlxcbiAgODU6XFx0XFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbiAgODY6XFx0XFx0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXFxuICA4NzpcXHRcXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cXG4gIDg4OlxcdFxcdCAqXFxuICA4OTpcXHRcXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXFxuICA5MDpcXHRcXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXFxuICA5MTpcXHRcXHQgKiBiaXQgaXMgc2V0LlxcbiAgOTI6XFx0XFx0ICovXFxuICA5MzpcXHRcXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIHN0YXR1cyxcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbiAgOTU6XFx0XFx0XFx0XFx0XFx0XFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMpO1xcbiAgOTY6XFx0XFx0aWYgKHJjKSB7XFxuICA5NzpcXHRcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4gIDk4OlxcdFxcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCwgcmMpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDEwMTpcXHRcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuIDEwNDpcXHRcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXFxcblxcXCIsXFxuIDEwNTpcXHRcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQpO1xcbiAxMDY6XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbiAxMDc6XFx0XFx0XFx0aW93cml0ZTE2KHN0YXR1cywgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuIDEwODpcXHRcXHRcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4gMTA5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMTA6XFx0XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbiAxMTM6XFx0XFx0cm1iKCk7XFxuIDExNDpcXHRcXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuIDExNTpcXHRcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4gMTE2OlxcdFxcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcXG4gMTE3OlxcdFxcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XFxuIDExODpcXHRcXHRcXHRyYyA9IC1FUEVSTTtcXG4gMTE5OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjA6XFx0XFx0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcXG4gMTIxOlxcdFxcdFxcdHJjID0gLUVCVVNZO1xcbiAxMjI6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMzpcXHRcXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XFxuIDEyNDpcXHRcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbiAxMjU6XFx0XFx0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzozMS4xNTg2NzA5MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NDkyMTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBDQyBTdGF0dXMgYW5kIFBvdGVudGlhbCBUaW1lb3V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNoZWNrX3BjY19jaGFuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1c2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcG9sbGluZyBgZ2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXNgIGZvciBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpZiB0aGVyZSdzIG5vIGFjdHVhbCBoYXJkd2FyZSBlbXVsYXRvciB0byBzZXQgdGhhdCBiaXQsIHdlJ3JlIGdvaW5nIHRvIHRpbWUgb3V0LCByaWdodD8gTWFrZXMgc2Vuc2UuXG5cblRoZW4gSSBnb3QgdG8gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBsaWtlLCB3aGF0IGlmIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBqdXN0IHJlZ3VsYXIgUkFNPyBTYXkgaXQncyBiZWluZyBwb2ludGVkIHRvIGJ5IGFuIEFDUEkgdGFibGUuIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIgY291bGQgdmVyeSB3ZWxsIGJlIHplcm8uIEluIHRoYXQgY2FzZSwgd2UnZCBpbW1lZGlhdGVseSB0aW1lIG91dCBvbiB0aGUgZmlyc3QgcmVhZC4gVWdoIVxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgcHJvYmxlbSBoZXJlLiBXaGF0IGlmIHRoZSBpbml0aWFsIHZhbHVlICpkb2VzKiBoYXBwZW4gdG8gaGF2ZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIHNldD8gVGhlbiBgY2hlY2tfcGNjX2NoYW5gIHdvdWxkIHN1Y2NlZWQgdGhlIHZlcnkgZmlyc3QgdGltZSwgd2hpY2ggd291bGQgYmUgd3JvbmcuIEFuZCB0aGVuIGByYXMyX3NlbmRfcGNjX2NtZGAgZ29lcyBhbmQgY2xlYXJzIHRoYXQgYml0IHdpdGggYGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cylgLlxuXG5TbywgaXQgZmxpcHMgdGhlIENNRCBDT01QTEVURSBiaXQgdG8gemVybywgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgaXQgcmluZ3MgdGhlIGRvb3JiZWxsIGFuZCB0aGVuIGNhbGxzIGBjaGVja19wY2NfY2hhbmAgYWdhaW4sIGJ1dCB0aGlzIHRpbWUsIHNpbmNlIHdlIGp1c3QgY2xlYXJlZCB0aGUgYml0LCBhbmQgdGhlcmUncyBubyBhY3R1YWwgaGFyZHdhcmUgdG8gc2V0IGl0IGJhY2ssIHRoZSBzZWNvbmQgYGNoZWNrX3BjY19jaGFuYCBjYWxsIGlzICpkZWZpbml0ZWx5KiBnb2luZyB0byB0aW1lIG91dCEgVGhhdCdzIGEgaHVnZSBwcm9ibGVtLlxuXG5JIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3Igc3BlY2lmaWNhbGx5IHdpdGhpbiBgcmFzMl9zZW5kX3BjY19jbWRgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6MzcuNDMzNTk0MDQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk4OlxcdFxcdFxcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXFx1MDAzZXBjY19tcGFyO1xcbiAxOTk6XFx0XFx0XFx0fVxcbiAyMDA6XFx0XFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQtLTtcXG4gMjAxOlxcdFxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xcbiAyMDQ6XFx0XFx0aW93cml0ZTE2KGNtZCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZWNvbW1hbmQpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cXG4gMjA3OlxcdFxcdGlvd3JpdGUxNigwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0LyogUmluZyBkb29yYmVsbCAqL1xcbiAyMTA6XFx0XFx0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXFx1MDAyNmNtZCk7XFxuIDIxMTpcXHRcXHQvKlxcbiAyMTI6XFx0XFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxcbiAyMTM6XFx0XFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cXG4gMjE0OlxcdFxcdCAqL1xcbiAyMTU6XFx0XFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbiAyMTY6XFx0XFx0XFx0ZGV2X3dhcm4ocmFzMl9jdHgtXFx1MDAzZWRldixcXG4gMjE3OlxcdFxcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4gMjE4OlxcdFxcdFxcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xcbiAyMTk6XFx0XFx0XFx0dmFsID0gaW9yZWFkMTYoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuIDIyMDpcXHRcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuIDIyMTpcXHRcXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4gMjIyOlxcdFxcdFxcdHJldHVybiByYztcXG4gMjIzOlxcdFxcdH0gZWxzZSB7XFxuIDIyNDpcXHRcXHRcXHRyYyA9IDA7XFxuIDIyNTpcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdHNzcGNjLVxcdTAwM2VsYXN0X2NtZCA9IGNtZDtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0LypcXG4gMjMwOlxcdFxcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxcbiAyMzE6XFx0XFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xcbiAyMzI6XFx0XFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuIDIzMzpcXHRcXHQgKi9cXG4gMjM0OlxcdFxcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuIDIzNTpcXHRcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4gMjM2OlxcdFxcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpXFxuIDIzNzpcXHRcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGlmICghcGNjX2NoYW5uZWwtXFx1MDAzZW1ib3gtXFx1MDAzZXR4ZG9uZV9pcnEpXFxuIDI0MTpcXHRcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0cmV0dXJuIHJjO1xcbiAyNDQ6XFx0fVxcbiAyNDU6XFx0RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXFxcImFjcGlfcmFzMlxcXCIpO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHRzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjM3LjQzMzY2OTkzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTczODA4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkFTMiBDb21tYW5kIEV4ZWN1dGlvbioqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHJhczJfc2VuZF9wY2NfY21kYCBoYXMgYSBjcnVjaWFsIHJvbGUg4oCTIHNwZWNpZmljYWxseSwgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCAqY2xlYXJzKiB0aGUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBiaXQuIFRoYXQncyBzdGVwIG9uZS4gIFRoZW4sIGl0IG1vdmVzIG9uIGJ5IGNhbGxpbmcgYG1ib3hfc2VuZF9tZXNzYWdlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuXG5cbk5vdywgaWYgdGhlIGNvbW1hbmQgKGBjbWRgKSBoYXBwZW5zIHRvIGJlIGBQQ0NfQ01EX0VYRUNfUkFTMmAg4oCTIGFuZCwgaW4gdGhpcyBzcGVjaWZpYyBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgY29udGV4dCwgaXQgKmlzKiDigJMgdGhlbiB0aGUgY29kZSBjYWxscyBgY2hlY2tfcGNjX2NoYW5gIGFnYWluLiBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBlbXVsYXRvciBwcmVzZW50IHRvIG1hbnVhbGx5IHRvZ2dsZSB0aGUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBiaXQgYmFjayB0byAnMScsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGNoZWNrX3BjY19jaGFuYCBpcyBnb2luZyB0byB0aW1lIG91dC4gVGhhdCB0aW1lb3V0IGlzIGFuIGVycm9yIGNvbmRpdGlvbi4gVGhlcmVmb3JlLCBpZiBgY2hlY2tfcGNjX2NoYW5gIHRpbWVzIG91dCwgaXQncyBwcmV0dHkgbXVjaCBhIGd1YXJhbnRlZSB0aGF0IGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCB3aWxsICpmYWlsKi5cblxuSSdtIGZhaXJseSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgaXRzZWxmLCBhbmQgSSdsbCBmaW5kIGl0IHdpdGhpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo0Mi4wMDc0ODA4OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTk6XFx0c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4gIDYyOlxcdFxcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4gIDYzOlxcdFxcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbiAgNjc6XFx0XFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4gIDY4OlxcdFxcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4gIDY5OlxcdFxcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4gIDcwOlxcdFxcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuICA3MTpcXHRcXHRpZiAocmV0KSB7XFxuICA3MjpcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuICA3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNzQ6XFx0XFx0fVxcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuICA3NzpcXHRcXHRyYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbiAgNzk6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuICA4MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4gIDgxOlxcdFxcdHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXFxuICA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4gIDgzOlxcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4gIDg0OlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbiAgODU6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbiAgODY6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbiAgODc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA4ODpcXHRcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGlmICAoaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcXG4gIDkxOlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IHRydWU7XFxuICA5MjpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuICA5MzpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XFxuICA5NDpcXHRcXHR9IGVsc2Uge1xcbiAgOTU6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdHJldHVybiAwO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuIDEwMjpcXHRzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4gMTA1OlxcdFxcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4gMTA2OlxcdFxcdGludCByZXQ7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjQyLjAwNzU2MTc1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3MjAzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBFcnJvciBQcm9wYWdhdGlvbioqXG5cblJpZ2h0LCBzbyBpZiBgcmFzMl9zZW5kX3BjY19jbWRgIGhhcyBhIHByb2JsZW0gYW5kIHJldHVybnMgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgaXMgZ29pbmcgdG8gcmVmbGVjdCB0aGF0IGJ5IHJldHVybmluZyBhbiBlcnJvciBhcyB3ZWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcm9vdCBjYXVzZSBoZXJlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNhc2NhZGluZyBmYWlsdXJlLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgZmxvdyBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYC4gSSBuZWVkIHRvIGlkZW50aWZ5ICpldmVyeSogcGxhY2UgaW4gdGhlIGNvZGViYXNlIHdoZXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBvaW50cyBhbmQgYXNzZXNzIHRoZSBicm9hZGVyIHN5c3RlbSBpbXBhY3Qgb2YgdGhhdCBlcnJvciBwcm9wYWdhdGlvbiBmcm9tIGByYXMyX3NlbmRfcGNjX2NtZGAuIExldCdzIGdldCB0byB0aGUgY2FsbCByZWZlcmVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI1NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6NDUuNzc0NzY3NDEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRcXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcXG4gNTExOlxcdFxcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxcbiA1MTI6XFx0XFx0ICovXFxuIDUxMzpcXHRcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4gNTE0OlxcdFxcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbiA1MTU6XFx0XFx0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xcbiA1MTY6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbiA1MTc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNTE4OlxcdFxcdH1cXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbiA1MjE6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XFxuIDUyMjpcXHRcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4gNTIzOlxcdFxcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbiA1MjQ6XFx0XFx0aWYgKHJldClcXG4gNTI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXFxuIDUyODpcXHRcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuIDUyOTpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycztcXG4gNTMwOlxcdFxcdGVsc2VcXG4gNTMxOlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRzcHJpbnRmKHNjcnViX25hbWUsIFxcXCJhY3BpX3Jhc19tZW0lZFxcXCIsIGF1eGRldi1cXHUwMDNlaWQpO1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHRcXHRyYXNfZmVhdHVyZXMuZnRfdHlwZVxcdD0gUkFTX0ZFQVRfU0NSVUI7XFxuIDUzNjpcXHRcXHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcXHQ9IDA7XFxuIDUzNzpcXHRcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuIDUzODpcXHRcXHRyYXNfZmVhdHVyZXMuY3R4XFx0PSByYXMyX2N0eDtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcXHUwMDI2cmFzX2ZlYXR1cmVzKTtcXG4gNTQzOlxcdH1cXG4gNTQ0OlxcdFxcbiA1NDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xcbiA1NDY6XFx0XFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4gNTQ3OlxcdFxcdHsgfVxcbiA1NDg6XFx0fTtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdHN0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuIDU1MzpcXHRcXHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxcbiA1NTQ6XFx0XFx0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxcbiA1NTU6XFx0XFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuIDU1NjpcXHRcXHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXFxuIDU1NzpcXHR9O1xcbiA1NTg6XFx0bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4gNTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo0NS43NzQ4NTI2MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzNjk1NzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIENvZGUgaXMgVW5mdXp6YWJsZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSWYgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIGVycm9ycywgdGhlbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBmYWlscywgd2hpY2ggbWVhbnMgdGhlIEVEQUMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCBtZWFucyB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiBpcyBuZXZlciBldmVuIHJlYWNoZWQuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZXJlJ3Mgbm8gd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBhZnRlciBgcmFzMl9zZW5kX3BjY19jbWRgIGNsZWFycyBpdCwgbWFraW5nIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBmYWlsIEVWRVJZIHRpbWUuXG5cbkkgY29uc2lkZXJlZCBhIGZldyBlZGdlIGNhc2VzLiBDb3VsZCBhIHN5emthbGxlci1pbmplY3RlZCBBQ1BJIHRhYmxlIHBvaW50IHRoZSBQQ0Mgc2hhcmVkIG1lbW9yeSB0byBhIHJlYWwsIHJlc3BvbmRpbmcgZGV2aWNlPyBJdOKAmXMgcG9zc2libGUsIHN1cmUsIGJ1dCBoaWdobHkgdW5saWtlbHkgdGhhdCBzdWNoIGEgZGV2aWNlIHdvdWxkIHBlcmZlY3RseSBlbXVsYXRlIFBDQyBjb21tYW5kIGNvbXBsZXRpb24gYW5kIHNldCB0aGUgYml0IGNvcnJlY3RseS4gU28sIGFsbW9zdCBjZXJ0YWlubHksIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlLiBObyBwcm9iZSBtZWFucyBubyBzeXNmcyBpbnRlcmZhY2VzLiBUaGVuIHRoZSBjb3JlIGxvZ2ljIEknbSBsb29raW5nIGF0IGluIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYCwgYW5kIHNvIG9uLCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5Db3VsZCBzeXprYWxsZXIgaW5qZWN0IGEgZmF1bHQ/IE5vLCB0aGF0J3Mgbm90IGl0cyB0eXBpY2FsIGFwcHJvYWNoIHVubGVzcyB0aGVyZSdzIGFuIGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGUgaGFyZHdhcmUgKGxpa2UgdGhvc2UgaW4gYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBldGMuKS4gQW5kIHRoZXJlJ3MgZGVmaW5pdGVseSBubyBQQ0MgZW11bGF0b3IgaW4gdGhlIGtlcm5lbC4gU28sIGFnYWluLCB0aGlzIGNvZGUncyB1bnJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkkgaGFkIHRvIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcGF0aHMgdG8gdGhlIEVEQUMgc2NydWIgc3lzZnMgY2hhbmdlcy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgZmlsZSBhZGRzIGFuIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUsIHdoaWNoIGlzIHZpc2libGUgb25seSB3aGVuIGBvcHMtXHUwMDNlZ2V0X2VuYWJsZWRfb2RgIGlzIHNldC4gUmlnaHQgbm93LCBvbmx5IGBhY3BpX3JhczIuY2Agc2V0cyBgZ2V0X2VuYWJsZWRfb2RgLiBUaGF0IG1lYW5zIHRoZSBzeXNmcyBmaWxlIGlzbid0IGNyZWF0ZWQgZm9yIGFueSBvdGhlciBkcml2ZXIuIFNvIHRoaXMgRURBQyBzY3J1YiBzdHVmZiBpcyBhbHNvIHVucmVhY2hhYmxlLlxuXG5Ob3cgSSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IGV4cGxpY2l0bHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGludm9sdmVzIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTaW5jZSB0aGlzIHJlcXVpcmVzIEFDUEkgUkFTMiBhbmQgUENDIGhhcmR3YXJlLCB3aGljaCBpcyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VL0dDRSwgaXQncyBpbXBvc3NpYmxlIHRvIGhpdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgZGlkIGEgcXVpY2sgc2VhcmNoIGZvciBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYCBpbiBgdG9vbHMvYCBhbmQgYGRyaXZlcnMvbWFpbGJveC9gIGJ1dCBmb3VuZCBubyBtb2NrcyBvciBlbXVsYXRpb25zLiBObyBvdGhlciBtb2NrLiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo1NS4zMTE4MTE3MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI3NTkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENDX1NUQVRVU19DTURfQ09NUExFVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz03Nz1zdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtOTMtXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuZHJpdmVycy9hY3BpL3JhczIuYzo5NDpcXHRcXHRcXHRcXHRcXHRzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTk1LVxcdFxcdFxcdFxcdFxcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXFx1MDAzZWRlYWRsaW5lX3VzKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MTQ0PWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMjE5LVxcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjIwOlxcdFxcdHZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTtcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIyMS1cXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTg2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfY21kX3NlbmQoc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSxcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMjI5LVxcdHJjID0gcmVhZHdfcG9sbF90aW1lb3V0KFxcdTAwMjZhZGRyLVxcdTAwM2VoZWFkLnN0YXR1cywgc3RhdHVzLFxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MjMwOlxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IChQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSB8XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0yMzEtXFx0XFx0XFx0XFx0XFx0ICBQQ0NfU1RBVFVTX0VSUk9SKSxcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz0xMjQ9c3RhdGljIGludCB4Z2VuZV9od21vbl9wY2NfcmQoc3RydWN0IHhnZW5lX2h3bW9uX2RldiAqY3R4LCB1MzIgKm1zZylcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy0xNDUtXFx0dmFsID0gbGUxNl90b19jcHUoUkVBRF9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpKTtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6MTQ2OlxcdHZhbCBcXHUwMDI2PSB+UENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTE0Ny1cXHRXUklURV9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIGNwdV90b19sZTE2KHZhbCkpO1xcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTUyMj1zdGF0aWMgdm9pZCB4Z2VuZV9od21vbl9wY2NfcnhfY2Ioc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNnKVxcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTU2Mi1cXHRcXHRpZiAoeGdlbmVfd29yZF90c3RfYW5kX2NscihcXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyxcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6NTYzOlxcdFxcdFxcdFxcdFxcdCAgIFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFKSkge1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy01NjQtXFx0XFx0XFx0Y3R4LVxcdTAwM2VzeW5jX21zZy5tc2cgPSAoKHUzMiAqKW1zZylbMF07XFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz0xNDY9c3RhdGljIHZvaWQgc2xpbXByb19pMmNfcGNjX3J4X2NiKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zZylcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTE1Ny1cXHRpZiAoeGdlbmVfd29yZF90c3RfYW5kX2NscihcXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyxcXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzoxNTg6XFx0XFx0XFx0XFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTU5LVxcdFxcdG1zZyA9IGdlbmVyaWNfY29tbV9iYXNlICsgMTtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTE2OT1zdGF0aWMgdm9pZCBzbGltcHJvX2kyY19wY2NfdHhfcHJlcGFyZShzdHJ1Y3Qgc2xpbXByb19pMmNfZGV2ICpjdHgsIHUzMiAqbXNnKVxcbi0tXFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTgzLVxcdHN0YXR1cyA9IGxlMTZfdG9fY3B1KFJFQURfT05DRShnZW5lcmljX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKSk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTg0OlxcdHN0YXR1cyBcXHUwMDI2PSB+UENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTg1LVxcdFdSSVRFX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgY3B1X3RvX2xlMTYoc3RhdHVzKSk7XFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MjMyPXN0YXRpYyBpbnQgaGNjc193YWl0X2NtZF9jb21wbGV0ZV9ieV9wb2xsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDQtXFx0cmV0ID0gcmVhZHdfcG9sbF90aW1lb3V0KFxcdTAwMjZjb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgc3RhdHVzLFxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoyNDU6XFx0XFx0XFx0XFx0IHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDYtXFx0XFx0XFx0XFx0IEhDQ1NfUE9MTF9TVEFUVVNfVElNRV9JTlRFUlZBTF9VUyxcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD0xMj1zdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XFxuLS1cXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjYtLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFN0YXR1cyBGaWVsZCAqL1xcbmluY2x1ZGUvYWNwaS9wY2MuaDoyNzojZGVmaW5lIFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFXFx0XFx0QklUKDApXFxuaW5jbHVkZS9hY3BpL3BjYy5oLTI4LSNkZWZpbmUgUENDX1NUQVRVU19TQ0lfRE9PUkJFTExcXHRcXHRCSVQoMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6NTcuMTg0NTc1NjM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTYzNzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBRRU1VOiBBIFdvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIHRoZSB2ZXJkaWN0IGlzIHByZXR0eSBjbGVhcjogd2UncmUgZGVhbGluZyB3aXRoIHVucmVhY2hhYmxlIGNvZGUuIFRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhlIGNvcmUgbG9naWMgaW4gdGhpcyBlbnZpcm9ubWVudC4gSXQncyBmcnVzdHJhdGluZywgcmVhbGx5LiBUaGUgcm9vdCBjYXVzZSBpcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIuIFRoaXMgZHJpdmVyICpkZW1hbmRzKiBhIHBoeXNpY2FsIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IGFuZCB0aGUgc3VwcG9ydGluZyBBQ1BJIFJBUzIgdGFibGVzLiBBbmQgYXMgd2Uga25vdywgUUVNVSBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIGRvbid0IGVtdWxhdGUgdGhvc2UuIFNvLCBpdCdzIGEgZGVhZCBlbmQuIEJlY2F1c2Ugb2YgdGhpcyBjcml0aWNhbCBkZXBlbmRlbmN5LCB0aGUgY29yZSBsb2dpYyBpcyBzaW1wbHkgbm90IHJlYWNoYWJsZS5cblxuQmVmb3JlIGdpdmluZyB1cCBjb21wbGV0ZWx5LCBJIHF1aWNrbHkgc2Nhbm5lZCB0byBzZWUgaWYgKmFueSogcGFydCBvZiB0aGUgcGF0Y2ggY291bGQgYmUgZXhwbG9pdGVkLiBJIGxvb2tlZCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCwgd2hlcmUgdGhlcmUgd2VyZSBtb2RpZmljYXRpb25zIHRvIGBzY3J1Yl9hdHRyX3Zpc2libGVgIGFuZCBgc2NydWJfY3JlYXRlX2Rlc2NgLiBIb3dldmVyLCB0aG9zZSBjaGFuZ2VzIGFyZSBvbmx5IHRyaWdnZXJlZCBpZiBhIGRyaXZlciBzZXRzIHRoZSBgZ2V0X2VuYWJsZWRfb2RgIGZsYWcuIEJ1dCwgb25seSB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIHNldHMgdGhhdC4gU2luY2UgYGFjcGlfcmFzMmAgaXMgdG90YWxseSB1bnJlYWNoYWJsZS4uLiB0aG9zZSBjaGFuZ2VzIGFyZSBhbHNvIGRlYWQuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGRvY3VtZW50YXRpb24gYW5kIEtjb25maWcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYnV0IG5vdCBpbW1lZGlhdGVseSBmdXp6ZXIgY2FuZGlkYXRlcy5cblxuVGhlcmVmb3JlLCBkZWNsYXJpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS4gVGhlIHByb3ZpZGVkIHJlYXNvbmluZyBhY2N1cmF0ZWx5IGRlc2NyaWJlcyB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1OSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjg6MDMuNzAwOTU3MDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciBhbmQgYWRkcyBkZW1hbmQgc2NydWJiaW5nIHN1cHBvcnQgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLiBUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFNpbmNlIFBDQyBoYXJkd2FyZSBhbmQgdGhlIGFzc29jaWF0ZWQgQUNQSSB0YWJsZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKHNwZWNpZmljYWxseSB0aW1pbmcgb3V0IHdoaWxlIHBvbGxpbmcgZm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb24pLiBDb25zZXF1ZW50bHksIHRoZSBjb3JlIGxvZ2ljIGFuZCB0aGUgbmV3IHN5c2ZzIGludGVyZmFjZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownr4dh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 22:17:59 +0000 UTC FinishedAt: 2026-07-04 22:28:05 +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+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5ODRlOGQyN2EyMTAwNmMxNmI4ODRjOTJiZGI2ZDcxMGEzNmYwZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxZGRmNWM5Njg4YzY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19nZXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbiYjNDM7e1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfZ2V0X3NzcGNjKGludCBwY2NfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsIFx1MDAyNnJhczJfc3NwY2MsIGVsZW0pIHtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJhczJfc3NwY2NfZ2V0KHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkclx0PSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbiYjNDM7XHRrZnJlZShzc3BjYyk7XG4mIzQzO2N0eF9mcmVlOlxuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTE2IHRvdF90YmxfbGVuO1xuJiM0MztcdHUxNiBpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4mIzQzO1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4mIzQzO1x0XHRwcl93YXJuKEZXX1dBUk4gXCYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGN0eF9saXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4mIzQzO1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbiYjNDM7XHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7XG4mIzQzO1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbiYjNDM7XHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbiYjNDM7XHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShwY3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IG5vbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbiYjNDM7XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuJiM0MztcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcJiMzNDsldVxcblwmIzM0OylcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4mIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuJiM0MztcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbiYjNDM7XHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbiYjNDM7XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbiYjNDM7XHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuJiM0MztcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4mIzQzO1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuJiM0MztcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4mIzQzO1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCYjNDM7PSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCYjNDM7PSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCYjNDM7PSBjZWMub1xuJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCYjNDM7PSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCYjNDM7PSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQmIzQzOz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhiZjcxMzc1ZWM1MDY4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCAmIzQzOzEsNTYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KVx0XCYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4mIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWJcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlvd3JpdGU4KDAsIFx1MDAyNmNvbW1vbi1cdTAwM2VzZXRfY2Fwc1swXSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb3JlYWQ4KFx1MDAyNmNvbW1vbi1cdTAwM2VmZWF0dXJlc1swXSkgXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4mIzQzO1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHR1MzIgc2NydWJfcGFyYW1zX291dDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAgKGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIpIHtcbiYjNDM7XHRcdCpydW5uaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpydW5uaW5nID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XG4mIzQzO1x0aWYgKCEoKnJ1bm5pbmcpKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghcnVubmluZykge1xuJiM0MztcdFx0XHRyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LVx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtc2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4mIzQzO1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbiYjNDM7XHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXG4mIzQzO1x0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuJiM0MztcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4mIzQzO1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xuJiM0MztcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCplbmFibGVkID0gcnVubmluZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuJiM0MztcdCAqIHdpdGggKGJhc2UgJiM0Mzsgc2l6ZSkgXHUwMDNlIChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbiYjNDM7XHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FUkFOR0U7XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3JhczJfc2NydWJfbmlkJWRcJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuJiM0MztcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXG4mIzQzO1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlbmFibGVfYmdfc2NydWI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbiYjNDM7XHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXG4mIzQzO1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuJiM0MztcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxuJiM0MztcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4mIzQzO1x0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuJiM0MztcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcbiYjNDM7XHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuJiM0MztcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlZHJ2X2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdGlmIChyYXMyX2N0eCBcdTAwMjZcdTAwMjYgcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcbiYjNDM7XHRjaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxuJiM0MztcdCAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZFxuJiM0MztcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcbiYjNDM7XHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcbiYjNDM7XHQgKiB0byBzdGFydCB0aGUgZGVtYW5kIHNjcnViYmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcdD0gUkFTX0ZFQVRfU0NSVUI7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuY3R4XHQ9IHJhczJfY3R4O1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkcnZfYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiYjNDM7XHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7LlwmIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuJiM0MztcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbiYjNDM7XHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0FDUElfUkFTMlwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmYjU4MGI1ZTM2MThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgJiM0MzsxLDg2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDtyYXMyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCYjMzQ7YWNwaV9yYXMyX21lbVwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xuJiM0MzsgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZGV2Olx0XHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xuJiM0MzsgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbiYjNDM7ICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuJiM0MzsgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuJiM0MzsgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuJiM0MzsgKlx0XHRcdFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCxcbiYjNDM7ICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbiYjNDM7ICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbiYjNDM7ICpcdFx0XHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cbiYjNDM7ICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAYmFzZTpcdFx0QmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZTpcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXG4mIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBvZF9zY3J1YjpcdFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXG4mIzQzOyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuJiM0MzsgKlx0XHRcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4mIzQzOyAqIEBkcnZfYWN0aXZlOlx0XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcnZfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5ODRlOGQyN2EyMTAwNmMxNmI4ODRjOTJiZGI2ZDcxMGEzNmYwZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgpAQCAtMjAsMTEgJiM0MzsyMCw3IEBAIEtlcm5lbFZlcnNpb246CTYuMTUKIENvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKIAkJKFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCi0JCWZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy4KLQkJVGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuCi0KLQkJVGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZAotCQlvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS4KJiM0MzsJCWZvciBkZW1hbmQgc2NydWJiaW5nLgogCiBXaGF0OgkJL3N5cy9idXMvZWRhYy9kZXZpY2VzLyZsdDtkZXYtbmFtZSZndDsvc2NydWJYL3NpemUKIERhdGU6CQlNYXJjaCAyMDI1CkBAIC0zNCw2ICYjNDM7MzAsMTQgQEAgRGVzY3JpcHRpb246CiAJCShSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWQKIAkJKG9uLWRlbWFuZCBzY3J1YmJpbmcpLgogCiYjNDM7V2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kCiYjNDM7RGF0ZToJCUphbiAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNi4xOQomIzQzO0NvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzCiYjNDM7CQlzdXBwb3J0ZWQgb25seSBpZiB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdXBwb3J0IGl0LgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzFkZGY1Yzk2ODhjNjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJaW50CQkJCW1wYXJfY291bnQ7CiYjNDM7CWludAkJCQlwY2NfaWQ7CiYjNDM7CXUxNgkJCQlsYXN0X2NtZDsKJiM0MzsJc3RydWN0IGtyZWYJCQlrcmVmOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmUKJiM0MzsgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlCiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMCiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMAomIzQzOyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDMKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwCiYjNDM7I2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMAomIzQzOwomIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7c3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXUzMiBjYXBfc3RhdHVzOwomIzQzOwl1MTYgc3RhdHVzOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUKJiM0MzsJICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuCiYjNDM7CSAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLgomIzQzOwkgKgomIzQzOwkgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mCiYjNDM7CSAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGUKJiM0MzsJICogYml0IGlzIHNldC4KJiM0MzsJICovCiYjNDM7CXJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMsIHN0YXR1cywKJiM0MzsJCQkJCXN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSwKJiM0MzsJCQkJCVBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtJmd0O2RlYWRsaW5lX3VzKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCwgcmMpOwomIzQzOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19FUlJPUikgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kKTsKJiM0MzsJCXN0YXR1cyAmYW1wOz0gflBDQ19TVEFUVVNfRVJST1I7CiYjNDM7CQlpb3dyaXRlMTYoc3RhdHVzLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cyk7CiYjNDM7CQlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqLwomIzQzOwlybWIoKTsKJiM0MzsJY2FwX3N0YXR1cyA9IGlvcmVhZDMyKCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJc3dpdGNoIChjYXBfc3RhdHVzKSB7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDoKJiM0MzsJCXJjID0gLUVQRVJNOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0JVU1k6CiYjNDM7CQlyYyA9IC1FQlVTWTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9GQUlMRUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQToKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsCiYjNDM7ICogQHJhczJfY3R4Oglwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlCiYjNDM7ICogQGNtZDoJUkFTMiBjb21tYW5kIHRvIHNlbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlOwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwlzNjQgdGltZV9kZWx0YTsKJiM0MzsJdTE2IHZhbDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJc3NwY2MgPSByYXMyX2N0eC0mZ3Q7c3NwY2M7CiYjNDM7CWdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcGNjX2NoYW5uZWwgPSBzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bQomIzQzOwkgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mCiYjNDM7CSAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KSB7CiYjNDM7CQl0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCAmZ3Q7IHRpbWVfZGVsdGEpCiYjNDM7CQkJZnNsZWVwKHNzcGNjLSZndDtwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZQomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhbgomIzQzOwkgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBubwomIzQzOwkgKiBsaW1pdGF0aW9uLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0CiYjNDM7CSAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZQomIzQzOwkgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kCiYjNDM7CSAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVIKJiM0MzsJICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcGFyKSB7CiYjNDM7CQlpZiAoIXNzcGNjLSZndDttcGFyX2NvdW50KSB7CiYjNDM7CQkJdGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KTsKJiM0MzsJCQlpZiAoKHRpbWVfZGVsdGEgJmx0OyA2MCAqIE1TRUNfUEVSX1NFQykgJmFtcDsmYW1wOyBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KSB7CiYjNDM7CQkJCWRldl9kYmcocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdCYjMzQ7LCBjbWQpOwomIzQzOwkJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQl9CiYjNDM7CQkJc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpOwomIzQzOwkJCXNzcGNjLSZndDttcGFyX2NvdW50ID0gc3NwY2MtJmd0O3BjY19tcGFyOwomIzQzOwkJfQomIzQzOwkJc3NwY2MtJmd0O21wYXJfY291bnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovCiYjNDM7CWlvd3JpdGUxNihjbWQsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7Y29tbWFuZCk7CiYjNDM7CiYjNDM7CS8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqLwomIzQzOwlpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBSaW5nIGRvb3JiZWxsICovCiYjNDM7CXJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsICZhbXA7Y21kKTsKJiM0MzsJLyoKJiM0MzsJICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvbgomIzQzOwkgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm4ocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcbiYjMzQ7LCBjbWQsIHJjKTsKJiM0MzsJCS8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqLwomIzQzOwkJdmFsID0gaW9yZWFkMTYoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJdmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFOwomIzQzOwkJaW93cml0ZTE2KHZhbCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtsYXN0X2NtZCA9IGNtZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlCiYjNDM7CSAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmcKJiM0MzsJICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFubmVsLSZndDttYm94LSZndDt0eGRvbmVfaXJxKQomIzQzOwkJbWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgJiMzNDthY3BpX3JhczImIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID0KJiM0MzsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZGVsKCZhbXA7c3NwY2MtJmd0O2VsZW0pOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO3NzcGNjLSZndDtrcmVmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJa3JlZl9wdXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZiwgICZhbXA7cmFzMl9saXN0X3BjY19yZWxlYXNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX2dldF9zc3BjYyhpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCAmYW1wO3JhczJfc3NwY2MsIGVsZW0pIHsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX2lkICE9IHBjY19pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJhczJfc3NwY2NfZ2V0KHNzcGNjKTsKJiM0MzsJCXJldHVybiBzc3BjYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlpZiAocGNjX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7CiYjNDM7CWlmIChzc3BjYykgewomIzQzOwkJcmFzMl9jdHgtJmd0O3NzcGNjCQk9IHNzcGNjOwomIzQzOwkJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7ZGV2CQk9CiYjNDM7CQkJc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwkJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNzcGNjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7c3NwY2MtJmd0O21ib3hfY2xpZW50LCBwY2NfaWQpOwomIzQzOwlpZiAoSVNfRVJSKHBjY19jaGFuKSkgewomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW4tJmd0O3NobWVtKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtwY2NfaWQJCT0gcGNjX2lkOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2NoYW4JCT0gcGNjX2NoYW47CiYjNDM7CXNzcGNjLSZndDtjb21tX2FkZHIJPSBwY2NfY2hhbi0mZ3Q7c2htZW07CiYjNDM7CWlmIChwY2NfY2hhbi0mZ3Q7bGF0ZW5jeSkKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLSZndDtsYXRlbmN5OwomIzQzOwllbHNlCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXJ0dAkJPSBwY2NfY2hhbi0mZ3Q7bWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcGFyCQk9IHBjY19jaGFuLSZndDttYXhfYWNjZXNzX3JhdGU7CiYjNDM7CXNzcGNjLSZndDttYm94X2NsaWVudC5rbm93c190eGRvbmUJPSB0cnVlOwomIzQzOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwlyYXMyX3NzcGNjX2dldChzc3BjYyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXJhczJfY3R4LSZndDtkZXYJCT0gcGNjX2NoYW4tJmd0O21jaGFuLSZndDttYm94LSZndDtkZXY7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwl1MzIgY29tcF9uaWQ7CiYjNDM7CWludCBpZCwgcmM7CiYjNDM7CiYjNDM7CWNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpOwomIzQzOwlpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXG4mIzM0OywgY2hhbm5lbCwgcHhtX2luc3QpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQgPSBjb21wX25pZDsKJiM0MzsKJiM0MzsJcmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7CiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXG4mIzM0OywgY2hhbm5lbCwKJiM0MzsJCQkgcHhtX2luc3QsIHJjKTsKJiM0MzsJCWdvdG8gY3R4X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBpZGFfYWxsb2MoJmFtcDtyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApIHsKJiM0MzsJCXJjID0gaWQ7CiYjNDM7CQlnb3RvIHBjY19mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmlkCQk9IGlkOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5uYW1lCQk9IG5hbWU7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5yZWxlYXNlCT0gcmFzMl9yZWxlYXNlOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucGFyZW50CT0gcmFzMl9jdHgtJmd0O2RldjsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gaWRhX2ZyZWU7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJhczJfY3R4OwomIzQzOwomIzQzO2lkYV9mcmVlOgomIzQzOwlpZGFfZnJlZSgmYW1wO3JhczJfaWRhLCBpZCk7CiYjNDM7cGNjX2ZyZWU6CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO2N0eF9mcmVlOgomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZSgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MTYgdG90X3RibF9sZW47CiYjNDM7CXUxNiBpOwomIzQzOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YoKnJhczJfdGFiKSkgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7QUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAmZ3Q7IFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICYjNDM7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgdG90X3RibF9sZW4pIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O1JBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGN0eF9saXN0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwY2NfZGVzY19saXN0LSZndDtmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC0mZ3Q7Y2hhbm5lbF9pZCwKJiM0MzsJCQkJCSAgcGNjX2Rlc2NfbGlzdC0mZ3Q7aW5zdGFuY2UpOwomIzQzOwkJLyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovCiYjNDM7CQlpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihyYXMyX2N0eCkpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXG4mIzM0OywgUFRSX0VSUihyYXMyX2N0eCkpOwomIzQzOwkJCWZvciAoOyBpICZndDsgMDsgaS0tKSB7CiYjNDM7CQkJCWlmIChwY3R4X2xpc3RbaSAtIDFdKQomIzQzOwkJCQkJcmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7CiYjNDM7CQkJfQomIzQzOwkJCWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpOwomIzQzOwkJfQomIzQzOwkJcGN0eF9saXN0W2ldID0gcmFzMl9jdHg7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCiYjNDM7ICoKJiM0MzsgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhbgomIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMgomIzQzOyAqIG1lbW9yeSBmZWF0dXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbm9uZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CiYjNDM7CWFjcGlfc3RhdHVzIHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKJiM0MzsJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXG4mIzM0OywgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSkKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHsKIAlTQ1JVQl9BRERSRVNTLAogCVNDUlVCX1NJWkUsCiAJU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsCiYjNDM7CVNDUlVCX0VOQUJMRV9ERU1BTkQsCiAJU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX01BWF9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sCkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgJiMzNDsldVxuJiMzNDspCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQpAQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIAogc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZCkKQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50CiAJCQkJcmV0dXJuIDA0NDQ7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDoKJiM0MzsJCWlmIChvcHMtJmd0O2dldF9lbmFibGVkX29kKSB7CiYjNDM7CQkJaWYgKG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2QpCiYjNDM7CQkJCXJldHVybiBhLSZndDttb2RlOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIDA0NDQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKIAljYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjoKIAkJaWYgKG9wcy0mZ3Q7Z2V0X21pbl9jeWNsZSkKIAkJCXJldHVybiBhLSZndDttb2RlOwpAQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldiwKIAkJW1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSwKIAkJW1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSwKIAkJW1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLAomIzQzOwkJW1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSwKIAkJW1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNCiAJICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvbgogCSAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuCiAKJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMgomIzQzOwl0cmlzdGF0ZSAmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJX1JBUzIKJiM0MzsJZGVwZW5kcyBvbiBFREFDCiYjNDM7CWRlcGVuZHMgb24gRURBQ19TQ1JVQgomIzQzOwlzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8KJiM0MzsJaGVscAomIzQzOwkgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMgomIzQzOwkgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0bwomIzQzOwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlcwomIzQzOwkgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyCiYjNDM7CSAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuCiYjNDM7CiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQppbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDcgQEAKIG9iai0kKENPTkZJR19SQVMpCSYjNDM7PSByYXMubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkmIzQzOz0gZGVidWdmcy5vCiBvYmotJChDT05GSUdfUkFTX0NFQykJJiM0Mzs9IGNlYy5vCiYjNDM7b2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpCSYjNDM7PSBhY3BpX3JhczIubwogCiBvYmotJChDT05GSUdfUkFTX0ZNUE0pCSYjNDM7PSBhbWQvZm1wbS5vCiBvYmoteQkJCSYjNDM7PSBhbWQvYXRsLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOGJmNzEzNzVlYzUwNjgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpAQCAtMCwwICYjNDM7MSw1NjIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkJJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWRhYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMAomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMQomIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMgomIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4CiYjNDM7I2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwCiYjNDM7CiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pCiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlvd3JpdGU4KDAsICZhbXA7Y29tbW9uLSZndDtzZXRfY2Fwc1swXSk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQ4KCZhbXA7Y29tbW9uLSZndDtmZWF0dXJlc1swXSkgJmFtcDsgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19vdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoIXJ1bm5pbmcpIHsKJiM0MzsJCQlyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LSZndDtkZXYsIHJhczJfY3R4LCB0cnVlKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJKm1pbiA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CSptYXggPSByYXMyX2N0eC0mZ3Q7bWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuCiYjNDM7CSAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcmFzMl9jdHgtJmd0O2JnX3NjcnViOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgfHwgcnVubmluZykKJiM0MzsJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkJaW93cml0ZTY0KDAsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSzsKJiM0MzsJCXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwkJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghcmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CQlpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTsKJiM0MzsJaW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuJiMzNDssCiYjNDM7CQkJc3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIgPSBlbmFibGU7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlOwomIzQzOwkJLyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovCiYjNDM7CQlyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqZW5hYmxlZCA9IHJ1bm5pbmc7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtJmd0O2NvbW1fYWRkcik7CiYjNDM7CXUzMiBzY3J1Yl9wYXJhbXNfaW47CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFlbmFibGUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWQKJiM0MzsJICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSAmZ3Q7IChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGEKJiM0MzsJICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7c2l6ZSB8fCByYXMyX2N0eC0mZ3Q7YmFzZSAmbHQ7IHJhczJfY3R4LSZndDttZW1fYmFzZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCByYXMyX2N0eC0mZ3Q7YmFzZSwgcmFzMl9jdHgtJmd0O3NpemUpOwomIzQzOwkJcmV0ID0gLUVSQU5HRTsKJiM0MzsJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDtiYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7YmFzZSA9IDA7CiYjNDM7CQkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZW5hYmxlOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiAmYW1wOyZhbXA7IHJhczJfY3R4LSZndDtkcnZfYWN0aXZlICZhbXA7JmFtcDsgIXJhczJfY3R4LSZndDt0aHJlYWQpIHsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgdXNlci9maXJtd2FyZSBtYXkgbmVlZAomIzQzOwkJCSAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2VuYWJsZV9iZ19zY3J1YjoKJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlOwomIzQzOwkJcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJ2X2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpZiAocmFzMl9jdHggJmFtcDsmYW1wOyByYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQlrdGhyZWFkX3N0b3AocmFzMl9jdHgtJmd0O3RocmVhZCk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwlzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7CiYjNDM7CWNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlCiYjNDM7CSAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZAomIzQzOwkgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzCiYjNDM7CSAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUgomIzQzOwkgKiB0byBzdGFydCB0aGUgZGVtYW5kIHNjcnViYmluZy4KJiM0MzsJICovCiYjNDM7CXN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwludW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJaWYgKCFudW1fc3Bhbm5lZF9wYWdlcykgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXG4mIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzOwomIzQzOwllbHNlCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZTsKJiM0MzsKJiM0MzsJc3ByaW50ZihzY3J1Yl9uYW1lLCAmIzM0O2FjcGlfcmFzX21lbSVkJiMzNDssIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwomIzQzOwlyYXNfZmVhdHVyZXMuZnRfdHlwZQk9IFJBU19GRUFUX1NDUlVCOwomIzQzOwlyYXNfZmVhdHVyZXMuaW5zdGFuY2UJPSAwOwomIzQzOwlyYXNfZmVhdHVyZXMuc2NydWJfb3BzCT0gJmFtcDtyYXMyX3NjcnViX29wczsKJiM0MzsJcmFzX2ZlYXR1cmVzLmN0eAk9IHJhczJfY3R4OwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJ2X2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBlZGFjX2Rldl9yZWdpc3RlcigmYW1wO2F1eGRldi0mZ3Q7ZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCAmYW1wO3Jhc19mZWF0dXJlcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHsKJiM0MzsJeyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7LiYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsCiYjNDM7CS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsCiYjNDM7CS5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0FDUElfUkFTMiYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9yYXMyLmggYi9pbmNsdWRlL2FjcGkvcmFzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKQEAgLTAsMCAmIzQzOzEsODYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSAomIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXV4aWxpYXJ5X2J1cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWlsYm94X2NsaWVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2U7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnkKJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7cmFzMiYjMzQ7CiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlcwomIzQzOyAqIEBhZGV2OgkJQXV4aWxpYXJ5IGRldmljZSBvYmplY3QKJiM0MzsgKiBAY29tbV9hZGRyOgkJUG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBkZXY6CQlQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQwomIzQzOyAqIEBzc3BjYzoJCVBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQHBjY19sb2NrOgkJUG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQHN5c19jb21wX25pZDoJTm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZQomIzQzOyAqCQkJaXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyCiYjNDM7ICoJCQlQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsCiYjNDM7ICoJCQlGaWVsZDogSW5zdGFuY2UKJiM0MzsgKiBAbWVtX2Jhc2U6CQlCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBtZW1fc2l6ZQkJU2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAYmFzZToJCUJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzaXplOgkJU2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6CUN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3VycwomIzQzOyAqIEBzZXRfc2NydWJfY3ljbGU6CVNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzCiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZToJTWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6CU1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAb2Rfc2NydWI6CQlTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbikKJiM0MzsgKiBAYmdfc2NydWI6CQlTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nCiYjNDM7ICogQHJlZW5hYmxlX2JnX3NjcnViOglGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZAomIzQzOyAqCQkJc2NydWJiaW5nIGlzIGZpbmlzaGVkCiYjNDM7ICogQHRocmVhZDoJCURlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWQKJiM0MzsgKiBAZHJ2X2FjdGl2ZToJCUZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCByYXMyX21lbV9jdHggewomIzQzOwlzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZQkJYWRldjsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtCSpjb21tX2FkZHI7CiYjNDM7CXN0cnVjdCBkZXZpY2UJCQkqZGV2OwomIzQzOwl2b2lkCQkJCSpzc3BjYzsKJiM0MzsJc3RydWN0IG11dGV4CQkJKnBjY19sb2NrOwomIzQzOwl1MzIJCQkJc3lzX2NvbXBfbmlkOwomIzQzOwl1NjQJCQkJbWVtX2Jhc2U7CiYjNDM7CXU2NAkJCQltZW1fc2l6ZTsKJiM0MzsJdTY0CQkJCWJhc2U7CiYjNDM7CXU2NAkJCQlzaXplOwomIzQzOwl1OAkJCQlzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CXU4CQkJCXNldF9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWluX3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltYXhfc2NydWJfY3ljbGU7CiYjNDM7CWJvb2wJCQkJb2Rfc2NydWI7CiYjNDM7CWJvb2wJCQkJYmdfc2NydWI7CiYjNDM7CWJvb2wJCQkJcmVlbmFibGVfYmdfc2NydWI7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKJiM0MzsJYm9vbAkJCQlkcnZfYWN0aXZlOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzIKJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTsKJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmgKaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaApAQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQgewogICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS4KICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi4KICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLgomIzQzOyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLgomIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi4KICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7CiAJaW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpOwogCWludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwogCWludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiYjNDM7CWludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpOwomIzQzOwlpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwogCWludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7CiAJaW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTsKIAlpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgb2YgQUNQSSBSQVMyIFN1cHBvcnQgYW5kIE1lbW9yeSBTY3J1YmJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIEFDUEkgUkFTMiBzdXBwb3J0IGFuZCBtZW1vcnkgc2NydWJiaW5nLiBJdCYjMzk7cyBnb3QgY2hhbmdlcyBpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AsIGBkcml2ZXJzL3Jhcy9hY3BpX3JhczIuY2AsIGFuZCBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFDUEkgUkFTMiBsZWFucyBoZWF2aWx5IG9uIEFDUEkgdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJBUzIgdGFibGUsIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpLgoKRmlyc3QsIHRoZSBRRU1VL0dDRSBxdWVzdGlvbi4gRG9lcyB0aGUgZmlybXdhcmUgYWN0dWFsbHkgKnByb3ZpZGUqIGEgUkFTMiB0YWJsZSBieSBkZWZhdWx0PyBUeXBpY2FsbHksIG5vLiBRRU1VIGRvZXNuJiMzOTt0IHVzdWFsbHkgZXhwb3NlIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkLiBCdXQgdGhlcmUmIzM5O3MgU3l6a2FsbGVyLiBDYW4gaXQgaW5qZWN0IEFDUEkgdGFibGVzPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBhbmdsZSB3ZSBjYW4gZXhwbG9pdD8KCkxldCBtZSBzZWUuLi4gYGFjcGlfcmFzMl9pbml0YCBnZXRzIGNhbGxlZCBmcm9tIGBhY3BpX2luaXRgIGluIGBkcml2ZXJzL2FjcGkvYnVzLmNgLiBBbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAuLi4pYC4gSWYgdGhlIHRhYmxlIGlzbiYjMzk7dCBwcmVzZW50LCBpdCBqdXN0IHJldHVybnMuIFRoYXQmIzM5O3MgYSBnb29kIHNhbml0eSBjaGVjayBpbiB0aGUgY29kZSwgYnV0IGl0IG1ha2VzIHRoZSB0YWJsZSBwcmVzZW5jZSAqY3JpdGljYWwqLgoKU3l6a2FsbGVyICpjYW4qIGluamVjdCB0YWJsZXMsIHJpZ2h0PyBJIHNlZW0gdG8gcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGBDT05GSUdfQUNQSV9UQUJMRV9VUEdSQURFYCBhbmQgaW5pdHJkLiBCdXQsIGl0JiMzOTtzIG9mdGVuIGEgcGFpbiB0byB0YXJnZXQgc3BlY2lmaWMgQUNQSSB0YWJsZSBpbmplY3Rpb25zLiBBbmQsIHRoYXQgUENDIGludGVyYWN0aW9uLi4uIGRvZXMgU3l6a2FsbGVyJiMzOTtzIHRhYmxlIGluamVjdGlvbiBjb3ZlciB0aGF0IHByb3Blcmx5LCBvciBkb2VzIGl0IGxlYXZlIHVzIGV4cG9zZWQ/IEhvbmVzdGx5LCB0aGUgaW5qZWN0aW9uIHRocm91Z2ggYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQgaXMgaGFyZCB0byByZWFjaCB1bmxlc3Mgd2UgYXJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXQuCgpTbywgaWYgYGFjcGlfZ2V0X3RhYmxlYCBmYWlscywgYGFjcGlfcmFzMl9pbml0YCBkb2VzIG5vdGhpbmcuIElzIHRoZXJlICphbnkqIG90aGVyIGVudHJ5IHBvaW50PyBTb2Z0d2FyZSBlbXVsYXRpb24sIHBlcmhhcHM/IFBDQyBpcyB0aGUgQUNQSSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwuIFRoZSBkcml2ZXIganVzdCBxdWlldGx5IGRvZXMgbm90aGluZyBpZiBpdCBjYW4mIzM5O3QgZmluZCB0aGUgdGFibGUuIEJ1dCBoYW5nIG9uLCBTeXprYWxsZXIgZG9lcyBmdXp6IEFDUEkgdGFibGVzIHNvbWV0aW1lcywgc28gdGhhdCBpcyBhIHRoaW5nIHRvIGtlZXAgaW4gbWluZC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWdzOiBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBHb3QgaXQuCgpPa2F5LCBjYW4gd2UgZnV6eiB0aGlzPyBUaGUgZHJpdmVyIHJlZ2lzdGVycyBhbiBhdXhpbGlhcnkgZGV2aWNlIGlmIHRoZSBSQVMyIHRhYmxlICppcyogcHJlc2VudCwgYW5kIHRoZW4gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQuIFRoYXQgdXNlcyBQQ0MuIFRvIGZ1enogZWZmZWN0aXZlbHksIHdlJiMzOTtkICpuZWVkKiB0aGF0IFJBUzIgdGFibGUuIElzIGl0IGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseSwgdGhpcyBpcyBhIG5ldyBkcml2ZXIsIHBhcnNpbmcgQUNQSSB0YWJsZXMsIGFuZCBleHBvc2luZyBzeXNmcyBpbnRlcmZhY2VzLiBIaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzIHRoZXJlLiBCdXQgaWYgd2UgY2FuJiMzOTt0IHJlbGlhYmx5IGluamVjdCB0aGUgQUNQSSB0YWJsZS4uLiBpdCB3aWxsIGJlIHRvdWdoIGZvciBTeXprYWxsZXIgdG8gdHJpZ2dlciBpdC4gSXQgd291bGQgbmVlZCB0byBoYXZlIHNvbWV0aGluZyBsaWtlIGEgYHN5el9hY3BpX3NldHVwYCBjYWxsLCBvciB0aGUgY2FwYWJpbGl0eSB0byBtb3VudCBjb25maWdmcyBhbmQgaW5qZWN0IEFDUEkgdGFibGVzLgoKTGV0JiMzOTtzIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgY2hhbmdlIGFkZHMgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgcmVhY2hhYmxlIGlmICphbnkqIEVEQUMgZHJpdmVyIGNhbGxzIGBzZXRfZW5hYmxlZF9vZGAuIEl0IHNlZW1zIGBhY3BpX3JhczIuY2AgKmlzKiB0aGUgb25seSBvbmUgY3VycmVudGx5IHVzaW5nIGl0LiBTbyBpdCBtYWtlcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgUkFTMiB0YWJsZSBsZXNzIG9mIGEgbGltaXRpbmcgZmFjdG9yLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHVzZXJzIG9mIGBlZGFjX3NjcnViX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWRhY19zY3J1Yl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jeGwvY29yZS9lZGFjLmM9MzI0PXN0YXRpYyBpbnQgY3hsX3BhdHJvbF9zY3J1Yl9zZXRfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSxcbi0tXG5kcml2ZXJzL2N4bC9jb3JlL2VkYWMuYy0zNTUtXG5kcml2ZXJzL2N4bC9jb3JlL2VkYWMuYzozNTY6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyBjeGxfcHNfc2NydWJfb3BzID0ge1xuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU3LVx0LmdldF9lbmFibGVkX2JnID0gY3hsX3BhdHJvbF9zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz00MD1zdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTQ0LVx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcdFx0XFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjQ1Olx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpvcHMgPSBjdHgtXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1x0XHRcXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtNDYtXHR0eXBlIGRhdGE7XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmM9NjU9c3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4tLVxuZHJpdmVycy9lZGFjL3NjcnViLmMtNzAtXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdF9jdHggKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShyYXNfZmVhdF9kZXYpO1x0XHRcXFxuZHJpdmVycy9lZGFjL3NjcnViLmM6NzE6XHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cdTAwM2VzY3J1YltpbnN0XS5zY3J1Yl9vcHM7XHRcdFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy03Mi1cdHR5cGUgZGF0YTtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTk3LVx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjk4Olx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpvcHMgPSBjdHgtXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xuZHJpdmVycy9lZGFjL3NjcnViLmMtOTktXG4tLVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9MzczPXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00NjgtXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo0Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ3MC1cdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02NzktLyoqXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODA6ICogc3RydWN0IGVkYWNfc2NydWJfb3BzIC0gc2NydWIgZGV2aWNlIG9wZXJhdGlvbnMgKGFsbCBlbGVtZW50cyBvcHRpb25hbClcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4MS0gKiBAcmVhZF9hZGRyOiByZWFkIGJhc2UgYWRkcmVzcyBvZiBzY3J1YmJpbmcgcmFuZ2UuXG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjkzLSAqL1xuaW5jbHVkZS9saW51eC9lZGFjLmg6Njk0OnN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02OTUtXHRpbnQgKCpyZWFkX2FkZHIpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqYmFzZSk7XG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODYxPXN0cnVjdCBlZGFjX2Rldl9kYXRhIHtcbmluY2x1ZGUvbGludXgvZWRhYy5oLTg2Mi1cdHVuaW9uIHtcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg2MzpcdFx0Y29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzICpzY3J1Yl9vcHM7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjQtXHRcdGNvbnN0IHN0cnVjdCBlZGFjX2Vjc19vcHMgKmVjc19vcHM7XG4tLVxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODc5PXN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODItXHR1bmlvbiB7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo4ODM6XHRcdGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyAqc2NydWJfb3BzO1xuaW5jbHVkZS9saW51eC9lZGFjLmgtODg0LVx0XHRjb25zdCBzdHJ1Y3QgZWRhY19lY3Nfb3BzICplY3Nfb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENYTCBEcml2ZXImIzM5O3MgUkFTMiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBDWEwgZHJpdmVyIHJlbGllcyBvbiBgZWRhY19zY3J1Yl9vcHNgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGUgbmV3IGBlbmFibGVfZGVtYW5kYCBmZWF0dXJlLCB0aGF0JiMzOTtzIGV4Y2x1c2l2ZWx5IGluIGBhY3BpX3JhczIuY2AuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsICpjYW4qIHdlIGV2ZW4gcmVhY2ggYGFjcGlfcmFzMi5jYD8gSXQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBhbiBBQ1BJIFJBUzIgdGFibGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGhlbHAgaGVyZT8gSSBrbm93IGl0IGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBhdCBgL3N5cy9rZXJuZWwvY29uZmlnL2FjcGkvdGFibGVgLCBzbyBsZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGRlc2NyaXB0aW9ucyBmb3IgQUNQSSB0YWJsZSBpbmplY3Rpb24gYXZhaWxhYmxlIGluIHN5emthbGxlci4KClJpZ2h0LCBzeXprYWxsZXIgKmNhbiogZG8gaXQsIHRoYXQmIzM5O3MgZ29vZCBuZXdzLiBIb3dldmVyLCBjb25zdHJ1Y3RpbmcgYSB2YWxpZCBSQVMyIHRhYmxlIGFuZCBhIHVzYWJsZSBQQ0MgY2hhbm5lbCBpcyBhIGRpZmZlcmVudCBjaGFsbGVuZ2UuIEkgc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBuZXcgYGFjcGlfcmFzMi5jYCBkcml2ZXIsIGFuZCB0aGF0IGl0IHBhcnNlcyBBQ1BJIHRhYmxlcyBhbmQgaW50ZXJhY3RzIHdpdGggUENDLiBJdCBpcyBsaWtlbHkgdGhlIGF1dGhvciYjMzk7cyBpbnRlbnRpb24gaXMgdG8gZW5zdXJlIHRoaXMgbmV3IGRyaXZlciBpcyB1c2VkIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgd2hlbiBpdCBpcyB1c2VkLiBJIGFtIG5vIGxvbmdlciB3b3JyaWVkIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIG5ldyBkcml2ZXIgYmUgZXhwbG9pdGVkLgoKTm93LCBhIGNyaXRpY2FsIHRob3VnaHQ6IGlzIHRoaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gVGhlbiBJIHJlbWVtYmVyZWQ6IFFFTVUgKmRvZXMqIHN1cHBvcnQgQUNQSSB0YWJsZSBpbmplY3Rpb24uIEFuZCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogQUNQSSB0YWJsZXMuIEJ1dCBoZXJlJiMzOTtzIHRoZSBzbmFnLCBQQ0MsIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwsIG5lZWRzIGEgUENDIG1haWxib3ggY2hhbm5lbC4gTm93LCBkb2VzIFFFTVUgcHJvdmlkZSBvbmU/IFRoaXMgaXMgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBQQ0MgbWFpbGJveCBkcml2ZXIgdGhhdCBjYW4gYmUgbG9hZGVkLCBvciwgaWRlYWxseSwgZnV6emVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgdnVsbmVyYWJpbGl0eSB3b3JrLCBpZiBpdCBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9hY3BpX3BjYy5jPTQ5PWFjcGlfcGNjX2FkZHJlc3Nfc3BhY2Vfc2V0dXAoYWNwaV9oYW5kbGUgcmVnaW9uX2hhbmRsZSwgdTMyIGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRhdGEtXHUwMDNlZG9uZSk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYzo2ODpcdGRhdGEtXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2ZGF0YS1cdTAwM2VjbCwgY3R4LVx1MDAzZXN1YnNwYWNlX2lkKTtcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY5LVx0aWYgKElTX0VSUihkYXRhLVx1MDAzZXBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTcxLVx0aWYgKHBjY19zc19pZHggXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM6NTcyOlx0XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZjcHBjX21ib3hfY2wsIHBjY19zc19pZHgpO1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTI4Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxuZHJpdmVycy9hY3BpL3JhczIuYzozMDU6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA2LVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNz1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExNy1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE4Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2dW5jb3JlLVx1MDAzZWNsLCB1bmNvcmUtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExOS1cdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz02MDk9c3RhdGljIGludCB4Z2VuZV9od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXHRcdGNsLVx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjY2ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzktXHRcdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlx0XHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cbi0tXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE4OC1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cdTAwM2VjaGFuX2lkKTtcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xuaW5jbHVkZS9hY3BpL3BjYy5oLTM5LWV4dGVybiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbik7XG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjQyOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWNjZXNzaWJpbGl0eSBvZiB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHN5emthbGxlciwgd2l0aCBpdHMgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCAqbWlnaHQqIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBQQ0MgbWFpbGJveCBwYXRod2F5LiBUaGUgbG9naWMgZ29lczogYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgcmVxdWVzdHMgdGhlIG1haWxib3ggY2hhbm5lbCwgYW5kIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaW5pdGlhbGl6ZXMgZnJvbSB0aGUgQUNQSSBQQ0NUIHRhYmxlLiBTeXprYWxsZXIgaW5qZWN0aW5nIGJvdGggYSBQQ0NUIHRhYmxlIGFuZCBhIFJBUzIgdGFibGUgY291bGQgKnRoZW9yZXRpY2FsbHkqIGNyZWF0ZSB0aGlzIHNldHVwLgoKSG93ZXZlciwgZ2l2ZW4gc3l6a2FsbGVyJiMzOTtzIGN1cnJlbnQgbGltaXRhdGlvbnMgaW4gQUNQSSB0YWJsZSBtYW5pcHVsYXRpb24sIHN1Y2Nlc3NmdWxseSBjcmFmdGluZyBhIGNvaGVyZW50IFBDQ1QsIFBDQyBjaGFubmVsLCBhbmQgUkFTMiB0YWJsZSB0aGF0IGFsbCBsaW5rIGNvcnJlY3RseSB0byB0aGUgYGFjcGlfcmFzMmAgbWVtb3J5IGRyaXZlciBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZXMgc2VlbWVkIGluY3JlZGlibHkgdW5saWtlbHkuIEl0JiMzOTtzIGp1c3QgYSBsb3QgdG8gZ2V0IHJpZ2h0LgoKVGhlbiBJIHNoaWZ0ZWQgZ2VhcnMg4oCTIGlzIHRoZXJlICphbnkqIG90aGVyIHJvdXRlPyBJIHNlZSB0aGlzIGByYXMyX21lbV9kcnZfcHJvYmVgIGlzIHBhcnQgb2YgYW4gYXV4aWxpYXJ5IGRyaXZlciwgc3BlY2lmaWNhbGx5OgoKYGBgYwpzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0gewoJLm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSwKCS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKCS5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLAoJLmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLAp9OwpgYGAKCkNhbiAqd2UqIGNyZWF0ZSBhbiBhdXhpbGlhcnkgZGV2aWNlIGZyb20gdXNlcnNwYWNlPyBObywgdGhhdCYjMzk7cyBub3QgaG93IGl0IHdvcmtzOyBhdXhpbGlhcnkgZGV2aWNlcyBhcmUgY3JlYXRlZCBieSBvdGhlciBrZXJuZWwgZHJpdmVycy4gSW4gdGhpcyBjYXNlLCBpdCBhcHBlYXJzIHRoZSBgZHJpdmVycy9hY3BpL3JhczIuY2AgZHJpdmVyIGlzIHJlc3BvbnNpYmxlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBwYXJzZV9yYXMyX3RhYmxlYCBmdW5jdGlvbi4gVGhlcmVmb3JlLCB0aGlzIHdob2xlIHBhdGh3YXkgKnN0cmljdGx5KiByZXF1aXJlcyBwYXJzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUuCgpTbywgY291bGQgc3l6a2FsbGVyIGZ1enogdGhpcz8gSXQmIzM5O3MgcG9zc2libGUhIElmIGl0IGNhbiBpbmplY3QgQUNQSSB0YWJsZXMsIGl0ICptaWdodCogcmVhY2ggYHBhcnNlX3JhczJfdGFibGVgLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHdoZXRoZXIgc3l6a2FsbGVyIGFjdHVhbGx5ICpkb2VzKiBoYXZlIEFDUEkgdGFibGUgaW5qZWN0aW9uIGF2YWlsYWJsZS4gWWVzLCBpdCBkb2VzISBgc3l6X2FjcGlfc2V0dXBgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGlzIHVzZWQuCgpCdXQgd2FpdC4gRXZlbiBpZiBpdCAqZG9lcyogcGFyc2UgdGhlIFJBUzIgdGFibGUsIHRoYXQgYHBhcnNlX3JhczJfdGFibGVgIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHJlZ2lzdGVyX3BjY19jaGFubmVsYCwgd2hpY2ggY2FsbHMgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuIEFuZCwgaWYgdGhlcmUgaXNuJiMzOTt0IGEgUENDVCB0YWJsZSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCBmYWlsdXJlIHdpbGwgcHJvcGFnYXRlIHRvIGBhZGRfYXV4X2RldmljZWAsIGFuZCB0aGVyZWZvcmUgdGhlIGF1eGlsaWFyeSBkZXZpY2Ugd29uJiMzOTt0IGJlIGNyZWF0ZWQuIE1lYW5pbmcsIGByYXMyX21lbV9kcnZfcHJvYmVgIHdvbiYjMzk7dCBldmVyIGJlIGNhbGxlZCB1bmxlc3MgYSAqdmFsaWQqIFBDQ1QgdGFibGUgaXMgcHJlc2VudCBhbmQgYSBQQ0MgY2hhbm5lbCBpcyBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQuCgpUaGUgY29uY2x1c2lvbiBpcyB0aGlzIGlzICpleHRyZW1lbHkqIGhhcmQgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBVbmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIG1vY2sgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciBQQ0MsIHdlJiMzOTtyZSBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBoaXQgdGhpcyBlYXNpbHkgd2l0aCBmdXp6aW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGZvciBzb21lIFBDQyBlbXVsYXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1haWxib3ggRHJpdmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbWFpbGJveC9gIGRpcmVjdG9yeS4gSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgYWJvdXQgdGhlIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBpbiB0aGlzIGNvbnRleHQuIEFyZSB3ZSB1c2luZyBhIG1vY2tlZCB2ZXJzaW9uIG9mIGl0IGhlcmU/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTWFpbGJveCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBpZiB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByZWFsIGhhcmR3YXJlIGR1cmluZyB0ZXN0aW5nIG9yIGRldmVsb3BtZW50LCB0aGVuIGEgbW9jayBQQ0Mgd291bGQgYmUgdGhlIGxvZ2ljYWwgd2F5IHRvIGdvLiBUaGlzIGlzIGEgY3JpdGljYWwgZGV0YWlsIGluIGZpZ3VyaW5nIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgdGVzdGVkIGFuZCBob3cgcm9idXN0bHkgaXTigJlzIGRlc2lnbmVkLiBXaXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIFBDQyBpbnRlcmFjdGlvbiwgdGhlIG92ZXJhbGwgZnVuY3Rpb24gb2YgdGhlIG1haWxib3ggZHJpdmVyIGlzIHVuY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjY19tYm94X3JlcXVlc3RfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWFpbGJveC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM0OC0vKipcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzUwLSAqXHRcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTM2MD1zdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzYyLXtcbi0tXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTM6RVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTQtXG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5OC0gKiBAcGNoYW46IFBvaW50ZXIgdG8gdGhlIFBDQyBtYWlsYm94IGNoYW5uZWwgYXMgcmV0dXJuZWQgYnlcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTk6ICpcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNDAwLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUkFTMiBNZW1vcnkgRHJpdmVyIFByb2JlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIG5vICYjMzQ7bW9jayBQQ0MmIzM0OyBpbiB0aGlzIHNjZW5hcmlvLCB3aGljaCBtZWFucyB0aGUgcGF0aCB0byBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBpcyB2ZXJ5IHNwZWNpZmljIGFuZCBoaW5nZXMgb24gYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBGaXJzdCwgSSBuZWVkIHRvIGhhdmUgYSB2YWxpZCBBQ1BJIFJBUzIgdGFibGUsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuIFRoZW4sIEkgKm11c3QqIGhhdmUgYW4gQUNQSSBQQ0NUIHRhYmxlIHdpdGggYSB2YWxpZCBzdWJzcGFjZSBkZWZpbmVkOyB0aGF0JiMzOTtzIGNyaXRpY2FsLiBGb2xsb3dpbmcgdGhpcywgdGhlIGRlc2NyaWJlZCBzdWJzcGFjZSAqaGFzKiB0byBoYXZlIGEgZnVuY3Rpb25hbCwgc2hhcmVkIG1lbW9yeSByZWdpb24gYXNzaWduZWQgdG8gaXQsIHdoaWNoIGlzIHRoZSB0aGlyZCBuZWNlc3NhcnkgY29tcG9uZW50LiBGb3VydGgsIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaGFzIHRvIHN1Y2NlZWQgaW4gaXRzIHByb2JpbmcgcHJvY2VzcywgYW5kIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBjaGFubmVsOyBJIG5lZWQgdGhhdCBlc3RhYmxpc2hlZCBsaW5rLiBGaWZ0aCwgYGFjcGlfcmFzMl9pbml0YCBuZWVkcyB0byBjb21lIGludG8gcGxheSwgcGFyc2UgdGhlIFJBUzIgdGFibGUsIGZpbmQgdGhlIFBDQyBjaGFubmVsLCBhbmQgdHJpZ2dlciB0aGUgY2FsbCB0byBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYDsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gU2l4dGgsIGFuIGF1eGlsaWFyeSBkZXZpY2UgbXVzdCBiZSBzdWNjZXNzZnVsbHkgY3JlYXRlZDsgdGhpcyBpcyBhIHByZXJlcXVpc2l0ZS4KCk5vdywgb25jZSB0aG9zZSBzdGVwcyBhcmUgY29tcGxldGVkLCBJJiMzOTtsbCBhcnJpdmUgYXQgYHJhczJfbWVtX2Rydl9wcm9iZWAuIEhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhlIGRyaXZlciBzZW5kcyBhIFBDQyBjb21tYW5kIHRvIHJldHJpZXZlIHBhdHJvbCBwYXJhbWV0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBwYXVzZSBhbmQgc2VyaW91c2x5IGNvbnNpZGVyIGhvdyB0aGlzIGNvbW1hbmQgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiBJdCBzZWVtcyB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24gaGFzIHRvIGFjdHVhbGx5ICpyZXNwb25kKiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIG5vdCB0aW1lIG91dC4gT3IsIHBlcmhhcHMgaXQganVzdCB3cml0ZXMgc29tZXRoaW5nIHRvIG1lbW9yeSBhbmQgdGhlbiByaW5ncyBhIGRvb3JiZWxsIHRvIGluZGljYXRlIGNvbXBsZXRpb24/IExldCYjMzk7cyBjbGFyaWZ5IHRoaXMuICpBaGEhKiBgcmFzMl9zZW5kX3BjY19jbWRgIHBvbGxzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2l0aGluIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24uIEl0JiMzOTtzIGxvb2tpbmcgZm9yIGBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURWAuIFNvLCBpZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSBvciBlbXVsYXRvciBwcmVzZW50IHRvIHNldCB0aGF0IGJpdCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBgY2hlY2tfcGNjX2NoYW5gIGlzIGdvaW5nIHRvIHRpbWUgb3V0IGFuZCByZXR1cm4gYW4gZXJyb3I7IGl0JiMzOTtzIGEgZGVhZCBlbmQuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhpcywgbGV0IG1lIGNoZWNrIHRoZSBgY2hlY2tfcGNjX2NoYW5gIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBhbmQgdmVyaWZ5IG15IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19wY2NfY2hhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL3JhczIuYz03NT1zdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuZHJpdmVycy9hY3BpL3JhczIuYy03Ni1cbmRyaXZlcnMvYWNwaS9yYXMyLmM6Nzc6c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTc4LXtcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTE0ND1pbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0xNTktXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjE2MDpcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuZHJpdmVycy9hY3BpL3JhczIuYy0xNjEtXHRpZiAocmMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0yMzQtXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG5kcml2ZXJzL2FjcGkvcmFzMi5jOjIzNTpcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIzNi1cdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHlvdXIgcHJvbXB0OgoKKipEaXZpbmcgaW50byBgY2hlY2tfcGNjX2NoYW5gKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfcGNjX2NoYW5gIHdpdGhpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkgYXNzdW1lIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIGVycm9yIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgQUNQSSBSQVMgZnJhbWV3b3JrLiBHaXZlbiB0aGUgZmlsZSBjb250ZXh0LCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgaGFyZHdhcmUgZXJyb3IgcmVwb3J0aW5nIG9yIHBvdGVudGlhbGx5IGV2ZW4gY29uZmlndXJpbmcgdGhlIFBDQyBmb3IgaW50ZXItcHJvY2Vzc29yIGNvbW11bmljYXRpb24gb3IgbWFuYWdlbWVudCBvZiBzb21lIGhhcmR3YXJlIHJlc291cmNlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUkFTIGFyY2hpdGVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBBQ1BJIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0LCBhbmQgaG93IGRvZXMgaXQgcmVzcG9uZCB0byB0aG9zZSBmYWlsdXJlcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBpbiBhIG11bHRpLXRocmVhZGVkIG9yIG11bHRpLXByb2Nlc3NvciBlbnZpcm9ubWVudCwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEFDUEkgbmFtZXNwYWNlIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBmcm9tIGFuIHVucHJpdmlsZWdlZCB1c2VyIHNwYWNlLiBJJiMzOTttIGFsc28gd29uZGVyaW5nIGlmIGl0IGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnQgb3Igc3BlY2lmaWMgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgc3VwcG9ydCByZXF1aXJlbWVudHMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4gIDc4Olx0e1xuICA3OTpcdFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlID0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuICA4MDpcdFx0dTMyIGNhcF9zdGF0dXM7XG4gIDgxOlx0XHR1MTYgc3RhdHVzO1xuICA4MjpcdFx0aW50IHJjO1xuICA4MzpcdFxuICA4NDpcdFx0LypcbiAgODU6XHRcdCAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGVcbiAgODY6XHRcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuICA4NzpcdFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXG4gIDg4Olx0XHQgKlxuICA4OTpcdFx0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuICA5MDpcdFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxuICA5MTpcdFx0ICogYml0IGlzIHNldC5cbiAgOTI6XHRcdCAqL1xuICA5MzpcdFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuICA5NDpcdFx0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuICA5NTpcdFx0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiAgOTY6XHRcdGlmIChyYykge1xuICA5NzpcdFx0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCYjMzQ7LFxuICA5ODpcdFx0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiAgOTk6XHRcbiAxMDA6XHRcdFx0cmV0dXJuIHJjO1xuIDEwMTpcdFx0fVxuIDEwMjpcdFxuIDEwMzpcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xuIDEwNDpcdFx0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiAxMDU6XHRcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbiAxMDY6XHRcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4gMTA3Olx0XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAxMDg6XHRcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuIDEwOTpcdFx0XHRyZXR1cm4gLUVJTztcbiAxMTA6XHRcdH1cbiAxMTE6XHRcbiAxMTI6XHRcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4gMTEzOlx0XHRybWIoKTtcbiAxMTQ6XHRcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4gMTE1Olx0XHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbiAxMTY6XHRcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiAxMTc6XHRcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4gMTE4Olx0XHRcdHJjID0gLUVQRVJNO1xuIDExOTpcdFx0XHRicmVhaztcbiAxMjA6XHRcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4gMTIxOlx0XHRcdHJjID0gLUVCVVNZO1xuIDEyMjpcdFx0XHRicmVhaztcbiAxMjM6XHRcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbiAxMjQ6XHRcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4gMTI1Olx0XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4gMTI2Olx0XHRcdHJjID0gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0MgU3RhdHVzIGFuZCBQb3RlbnRpYWwgVGltZW91dHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNoZWNrX3BjY19jaGFuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBnZW5fY29tbV9iYXNlLSZndDtzdGF0dXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBwb2xsaW5nIGBnZW5fY29tbV9iYXNlLSZndDtzdGF0dXNgIGZvciBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgZW11bGF0b3IgdG8gc2V0IHRoYXQgYml0LCB3ZSYjMzk7cmUgZ29pbmcgdG8gdGltZSBvdXQsIHJpZ2h0PyBNYWtlcyBzZW5zZS4KClRoZW4gSSBnb3QgdG8gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBsaWtlLCB3aGF0IGlmIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBqdXN0IHJlZ3VsYXIgUkFNPyBTYXkgaXQmIzM5O3MgYmVpbmcgcG9pbnRlZCB0byBieSBhbiBBQ1BJIHRhYmxlLiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyIGNvdWxkIHZlcnkgd2VsbCBiZSB6ZXJvLiBJbiB0aGF0IGNhc2UsIHdlJiMzOTtkIGltbWVkaWF0ZWx5IHRpbWUgb3V0IG9uIHRoZSBmaXJzdCByZWFkLiBVZ2ghCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaGVyZS4gV2hhdCBpZiB0aGUgaW5pdGlhbCB2YWx1ZSAqZG9lcyogaGFwcGVuIHRvIGhhdmUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBzZXQ/IFRoZW4gYGNoZWNrX3BjY19jaGFuYCB3b3VsZCBzdWNjZWVkIHRoZSB2ZXJ5IGZpcnN0IHRpbWUsIHdoaWNoIHdvdWxkIGJlIHdyb25nLiBBbmQgdGhlbiBgcmFzMl9zZW5kX3BjY19jbWRgIGdvZXMgYW5kIGNsZWFycyB0aGF0IGJpdCB3aXRoIGBpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpYC4KClNvLCBpdCBmbGlwcyB0aGUgQ01EIENPTVBMRVRFIGJpdCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLiBUaGVuLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBpdCByaW5ncyB0aGUgZG9vcmJlbGwgYW5kIHRoZW4gY2FsbHMgYGNoZWNrX3BjY19jaGFuYCBhZ2FpbiwgYnV0IHRoaXMgdGltZSwgc2luY2Ugd2UganVzdCBjbGVhcmVkIHRoZSBiaXQsIGFuZCB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgdG8gc2V0IGl0IGJhY2ssIHRoZSBzZWNvbmQgYGNoZWNrX3BjY19jaGFuYCBjYWxsIGlzICpkZWZpbml0ZWx5KiBnb2luZyB0byB0aW1lIG91dCEgVGhhdCYjMzk7cyBhIGh1Z2UgcHJvYmxlbS4KCkkgbmVlZCB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvciBzcGVjaWZpY2FsbHkgd2l0aGluIGByYXMyX3NlbmRfcGNjX2NtZGAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvcmFzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTg6XHRcdFx0XHRzc3BjYy1cdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXHUwMDNlcGNjX21wYXI7XG4gMTk5Olx0XHRcdH1cbiAyMDA6XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuIDIwMTpcdFx0fVxuIDIwMjpcdFxuIDIwMzpcdFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuIDIwNDpcdFx0aW93cml0ZTE2KGNtZCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2Vjb21tYW5kKTtcbiAyMDU6XHRcbiAyMDY6XHRcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuIDIwNzpcdFx0aW93cml0ZTE2KDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAyMDg6XHRcbiAyMDk6XHRcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiAyMTA6XHRcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFx1MDAyNmNtZCk7XG4gMjExOlx0XHQvKlxuIDIxMjpcdFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuIDIxMzpcdFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cbiAyMTQ6XHRcdCAqL1xuIDIxNTpcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gMjE2Olx0XHRcdGRldl93YXJuKHJhczJfY3R4LVx1MDAzZWRldixcbiAyMTc6XHRcdFx0XHQgXCYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCYjMzQ7LCBjbWQsIHJjKTtcbiAyMTg6XHRcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4gMjE5Olx0XHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiAyMjA6XHRcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuIDIyMTpcdFx0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4gMjIyOlx0XHRcdHJldHVybiByYztcbiAyMjM6XHRcdH0gZWxzZSB7XG4gMjI0Olx0XHRcdHJjID0gMDtcbiAyMjU6XHRcdH1cbiAyMjY6XHRcbiAyMjc6XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuIDIyODpcdFxuIDIyOTpcdFx0LypcbiAyMzA6XHRcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuIDIzMTpcdFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xuIDIzMjpcdFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXG4gMjMzOlx0XHQgKi9cbiAyMzQ6XHRcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbiAyMzU6XHRcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4gMjM2Olx0XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiAyMzc6XHRcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbiAyMzg6XHRcdH1cbiAyMzk6XHRcbiAyNDA6XHRcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuIDI0MTpcdFx0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbiAyNDI6XHRcbiAyNDM6XHRcdHJldHVybiByYztcbiAyNDQ6XHR9XG4gMjQ1Olx0RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiAyNDY6XHRcbiAyNDc6XHRzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkFTMiBDb21tYW5kIEV4ZWN1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHJhczJfc2VuZF9wY2NfY21kYCBoYXMgYSBjcnVjaWFsIHJvbGUg4oCTIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgKmNsZWFycyogdGhlIGBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURWAgYml0LiBUaGF0JiMzOTtzIHN0ZXAgb25lLiAgVGhlbiwgaXQgbW92ZXMgb24gYnkgY2FsbGluZyBgbWJveF9zZW5kX21lc3NhZ2VgLCB3aGljaCBpcyBleHBlY3RlZC4KCk5vdywgaWYgdGhlIGNvbW1hbmQgKGBjbWRgKSBoYXBwZW5zIHRvIGJlIGBQQ0NfQ01EX0VYRUNfUkFTMmAg4oCTIGFuZCwgaW4gdGhpcyBzcGVjaWZpYyBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgY29udGV4dCwgaXQgKmlzKiDigJMgdGhlbiB0aGUgY29kZSBjYWxscyBgY2hlY2tfcGNjX2NoYW5gIGFnYWluLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBTaW5jZSB3ZSBkb24mIzM5O3QgaGF2ZSBhIGhhcmR3YXJlIGVtdWxhdG9yIHByZXNlbnQgdG8gbWFudWFsbHkgdG9nZ2xlIHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBiYWNrIHRvICYjMzk7MSYjMzk7LCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBjaGVja19wY2NfY2hhbmAgaXMgZ29pbmcgdG8gdGltZSBvdXQuIFRoYXQgdGltZW91dCBpcyBhbiBlcnJvciBjb25kaXRpb24uIFRoZXJlZm9yZSwgaWYgYGNoZWNrX3BjY19jaGFuYCB0aW1lcyBvdXQsIGl0JiMzOTtzIHByZXR0eSBtdWNoIGEgZ3VhcmFudGVlIHRoYXQgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIHdpbGwgKmZhaWwqLgoKSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIFRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBmaW5kIGl0IHdpdGhpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU5Olx0c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuICA2MDpcdHtcbiAgNjE6XHRcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4gIDYyOlx0XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuICA2MzpcdFx0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4gIDY0Olx0XHRpbnQgcmV0O1xuICA2NTpcdFxuICA2NjpcdFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiAgNjc6XHRcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuICA2ODpcdFx0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuICA2OTpcdFx0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuICA3MDpcdFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiAgNzE6XHRcdGlmIChyZXQpIHtcbiAgNzI6XHRcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiAgNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4gIDc3Olx0XHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuICA3ODpcdFx0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiAgNzk6XHRcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4gIDgwOlx0XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuICA4MTpcdFx0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuICA4MjpcdFx0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiAgODM6XHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuICA4NDpcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuICA4NTpcdFx0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiAgODY6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4gIDg3Olx0XHRcdHJldHVybiAwO1xuICA4ODpcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuICA5MTpcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4gIDkyOlx0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbiAgOTM6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuICA5NDpcdFx0fSBlbHNlIHtcbiAgOTU6XHRcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiAgOTY6XHRcdH1cbiAgOTc6XHRcbiAgOTg6XHRcdHJldHVybiAwO1xuICA5OTpcdH1cbiAxMDA6XHRcbiAxMDE6XHQvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4gMTAyOlx0c3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbiAxMDM6XHR7XG4gMTA0Olx0XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuIDEwNTpcdFx0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiAxMDY6XHRcdGludCByZXQ7XG4gMTA3Olx0XG4gMTA4Olx0XHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjU2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRXJyb3IgUHJvcGFnYXRpb24qKgoKUmlnaHQsIHNvIGlmIGByYXMyX3NlbmRfcGNjX2NtZGAgaGFzIGEgcHJvYmxlbSBhbmQgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBpcyBnb2luZyB0byByZWZsZWN0IHRoYXQgYnkgcmV0dXJuaW5nIGFuIGVycm9yIGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGhlcmUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgY2FzY2FkaW5nIGZhaWx1cmUsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCBmbG93IG9mIHRoaXMuIE15IGZpcnN0IG1vdmU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLiBJIG5lZWQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBwbGFjZSBpbiB0aGUgY29kZWJhc2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGZhaWx1cmUgcG9pbnRzIGFuZCBhc3Nlc3MgdGhlIGJyb2FkZXIgc3lzdGVtIGltcGFjdCBvZiB0aGF0IGVycm9yIHByb3BhZ2F0aW9uIGZyb20gYHJhczJfc2VuZF9wY2NfY21kYC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY2FsbCByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRcdCAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUlxuIDUxMTpcdFx0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4gNTEyOlx0XHQgKi9cbiA1MTM6XHRcdHN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4gNTE0Olx0XHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuIDUxNTpcdFx0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuIDUxNjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxuXCYjMzQ7LCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuIDUxNzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDUxODpcdFx0fVxuIDUxOTpcdFxuIDUyMDpcdFx0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4gNTIxOlx0XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuIDUyMjpcdFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiA1MjM6XHRcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuIDUyNDpcdFx0aWYgKHJldClcbiA1MjU6XHRcdFx0cmV0dXJuIHJldDtcbiA1MjY6XHRcbiA1Mjc6XHRcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4gNTI4Olx0XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4gNTI5Olx0XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycztcbiA1MzA6XHRcdGVsc2VcbiA1MzE6XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuIDUzMjpcdFxuIDUzMzpcdFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiA1MzQ6XHRcbiA1MzU6XHRcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuIDUzNjpcdFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4gNTM3Olx0XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuIDUzODpcdFx0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbiA1Mzk6XHRcbiA1NDA6XHRcdHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xuIDU0MTpcdFxuIDU0MjpcdFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4gNTQzOlx0fVxuIDU0NDpcdFxuIDU0NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiA1NDY6XHRcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuIDU0NzpcdFx0eyB9XG4gNTQ4Olx0fTtcbiA1NDk6XHRcbiA1NTA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcbiA1NTE6XHRcbiA1NTI6XHRzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuIDU1MzpcdFx0Lm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSxcbiA1NTQ6XHRcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiA1NTU6XHRcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuIDU1NjpcdFx0LmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLFxuIDU1NzpcdH07XG4gNTU4Olx0bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiA1NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuZnV6emFibGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSWYgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIGVycm9ycywgdGhlbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBmYWlscywgd2hpY2ggbWVhbnMgdGhlIEVEQUMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2UgaXQgbWVhbnMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIG5ldmVyIGV2ZW4gcmVhY2hlZC4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBhZnRlciBgcmFzMl9zZW5kX3BjY19jbWRgIGNsZWFycyBpdCwgbWFraW5nIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBmYWlsIEVWRVJZIHRpbWUuCgpJIGNvbnNpZGVyZWQgYSBmZXcgZWRnZSBjYXNlcy4gQ291bGQgYSBzeXprYWxsZXItaW5qZWN0ZWQgQUNQSSB0YWJsZSBwb2ludCB0aGUgUENDIHNoYXJlZCBtZW1vcnkgdG8gYSByZWFsLCByZXNwb25kaW5nIGRldmljZT8gSXTigJlzIHBvc3NpYmxlLCBzdXJlLCBidXQgaGlnaGx5IHVubGlrZWx5IHRoYXQgc3VjaCBhIGRldmljZSB3b3VsZCBwZXJmZWN0bHkgZW11bGF0ZSBQQ0MgY29tbWFuZCBjb21wbGV0aW9uIGFuZCBzZXQgdGhlIGJpdCBjb3JyZWN0bHkuIFNvLCBhbG1vc3QgY2VydGFpbmx5LCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZS4gTm8gcHJvYmUgbWVhbnMgbm8gc3lzZnMgaW50ZXJmYWNlcy4gVGhlbiB0aGUgY29yZSBsb2dpYyBJJiMzOTttIGxvb2tpbmcgYXQgaW4gYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBhbmQgc28gb24sIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpDb3VsZCBzeXprYWxsZXIgaW5qZWN0IGEgZmF1bHQ/IE5vLCB0aGF0JiMzOTtzIG5vdCBpdHMgdHlwaWNhbCBhcHByb2FjaCB1bmxlc3MgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZSAobGlrZSB0aG9zZSBpbiBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGV0Yy4pLiBBbmQgdGhlcmUmIzM5O3MgZGVmaW5pdGVseSBubyBQQ0MgZW11bGF0b3IgaW4gdGhlIGtlcm5lbC4gU28sIGFnYWluLCB0aGlzIGNvZGUmIzM5O3MgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSBoYWQgdG8gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSB3ZXJlIGFueSBvdGhlciBwYXRocyB0byB0aGUgRURBQyBzY3J1YiBzeXNmcyBjaGFuZ2VzLiBUaGUgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCBmaWxlIGFkZHMgYW4gYGVuYWJsZV9kZW1hbmRgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgdmlzaWJsZSBvbmx5IHdoZW4gYG9wcy0mZ3Q7Z2V0X2VuYWJsZWRfb2RgIGlzIHNldC4gUmlnaHQgbm93LCBvbmx5IGBhY3BpX3JhczIuY2Agc2V0cyBgZ2V0X2VuYWJsZWRfb2RgLiBUaGF0IG1lYW5zIHRoZSBzeXNmcyBmaWxlIGlzbiYjMzk7dCBjcmVhdGVkIGZvciBhbnkgb3RoZXIgZHJpdmVyLiBTbyB0aGlzIEVEQUMgc2NydWIgc3R1ZmYgaXMgYWxzbyB1bnJlYWNoYWJsZS4KCk5vdyBJIHJldmlld2VkIHRoZSBpbnN0cnVjdGlvbnM6IFRoZXkgZXhwbGljaXRseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGEgcGF0Y2ggaW52b2x2ZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIFNpbmNlIHRoaXMgcmVxdWlyZXMgQUNQSSBSQVMyIGFuZCBQQ0MgaGFyZHdhcmUsIHdoaWNoIGlzICpub3QqIGVtdWxhdGVkIGluIFFFTVUvR0NFLCBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGhpdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGRpZCBhIHF1aWNrIHNlYXJjaCBmb3IgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaW4gYHRvb2xzL2AgYW5kIGBkcml2ZXJzL21haWxib3gvYCBidXQgZm91bmQgbm8gbW9ja3Mgb3IgZW11bGF0aW9ucy4gTm8gb3RoZXIgbW9jay4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDQ19TVEFUVVNfQ01EX0NPTVBMRVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9yYXMyLmM9Nzc9c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy05My1cdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6OTQ6XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTk1LVx0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTE0ND1pbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4tLVxuZHJpdmVycy9hY3BpL3JhczIuYy0yMTktXHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjIwOlx0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIyMS1cdFx0aW93cml0ZTE2KHZhbCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuLS1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTg2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfY21kX3NlbmQoc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSxcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTIyOS1cdHJjID0gcmVhZHdfcG9sbF90aW1lb3V0KFx1MDAyNmFkZHItXHUwMDNlaGVhZC5zdGF0dXMsIHN0YXR1cyxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MjMwOlx0XHRcdFx0c3RhdHVzIFx1MDAyNiAoUENDX1NUQVRVU19DTURfQ09NUExFVEUgfFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0yMzEtXHRcdFx0XHRcdCAgUENDX1NUQVRVU19FUlJPUiksXG4tLVxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTEyND1zdGF0aWMgaW50IHhnZW5lX2h3bW9uX3BjY19yZChzdHJ1Y3QgeGdlbmVfaHdtb25fZGV2ICpjdHgsIHUzMiAqbXNnKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy0xNDUtXHR2YWwgPSBsZTE2X3RvX2NwdShSRUFEX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKSk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6MTQ2Olx0dmFsIFx1MDAyNj0gflBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTE0Ny1cdFdSSVRFX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLCBjcHVfdG9fbGUxNih2YWwpKTtcbi0tXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NTIyPXN0YXRpYyB2b2lkIHhnZW5lX2h3bW9uX3BjY19yeF9jYihzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc2cpXG4tLVxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTU2Mi1cdFx0aWYgKHhnZW5lX3dvcmRfdHN0X2FuZF9jbHIoXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjU2MzpcdFx0XHRcdFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNTY0LVx0XHRcdGN0eC1cdTAwM2VzeW5jX21zZy5tc2cgPSAoKHUzMiAqKW1zZylbMF07XG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM9MTQ2PXN0YXRpYyB2b2lkIHNsaW1wcm9faTJjX3BjY19yeF9jYihzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCB2b2lkICptc2cpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTU3LVx0aWYgKHhnZW5lX3dvcmRfdHN0X2FuZF9jbHIoXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTU4Olx0XHRcdFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy0xNTktXHRcdG1zZyA9IGdlbmVyaWNfY29tbV9iYXNlICYjNDM7IDE7XG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM9MTY5PXN0YXRpYyB2b2lkIHNsaW1wcm9faTJjX3BjY190eF9wcmVwYXJlKHN0cnVjdCBzbGltcHJvX2kyY19kZXYgKmN0eCwgdTMyICptc2cpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTgzLVx0c3RhdHVzID0gbGUxNl90b19jcHUoUkVBRF9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVx1MDAzZXN0YXR1cykpO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTg0Olx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTg1LVx0V1JJVEVfT05DRShnZW5lcmljX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIGNwdV90b19sZTE2KHN0YXR1cykpO1xuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0yMzI9c3RhdGljIGludCBoY2NzX3dhaXRfY21kX2NvbXBsZXRlX2J5X3BvbGwoc3RydWN0IGhjY3NfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDQtXHRyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQoXHUwMDI2Y29tbV9iYXNlLVx1MDAzZXN0YXR1cywgc3RhdHVzLFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjI0NTpcdFx0XHRcdCBzdGF0dXMgXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTI0Ni1cdFx0XHRcdCBIQ0NTX1BPTExfU1RBVFVTX1RJTUVfSU5URVJWQUxfVVMsXG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTEyPXN0cnVjdCBwY2NfbWJveF9jaGFuIHtcbi0tXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjYtLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFN0YXR1cyBGaWVsZCAqL1xuaW5jbHVkZS9hY3BpL3BjYy5oOjI3OiNkZWZpbmUgUENDX1NUQVRVU19DTURfQ09NUExFVEVcdFx0QklUKDApXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjgtI2RlZmluZSBQQ0NfU1RBVFVTX1NDSV9ET09SQkVMTFx0XHRCSVQoMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxNTkKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gUUVNVTogQSBXb3J0aEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIHRoZSB2ZXJkaWN0IGlzIHByZXR0eSBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bnJlYWNoYWJsZSBjb2RlLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpZ2dlciB0aGUgY29yZSBsb2dpYyBpbiB0aGlzIGVudmlyb25tZW50LiBJdCYjMzk7cyBmcnVzdHJhdGluZywgcmVhbGx5LiBUaGUgcm9vdCBjYXVzZSBpcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIuIFRoaXMgZHJpdmVyICpkZW1hbmRzKiBhIHBoeXNpY2FsIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IGFuZCB0aGUgc3VwcG9ydGluZyBBQ1BJIFJBUzIgdGFibGVzLiBBbmQgYXMgd2Uga25vdywgUUVNVSBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIGRvbiYjMzk7dCBlbXVsYXRlIHRob3NlLiBTbywgaXQmIzM5O3MgYSBkZWFkIGVuZC4gQmVjYXVzZSBvZiB0aGlzIGNyaXRpY2FsIGRlcGVuZGVuY3ksIHRoZSBjb3JlIGxvZ2ljIGlzIHNpbXBseSBub3QgcmVhY2hhYmxlLgoKQmVmb3JlIGdpdmluZyB1cCBjb21wbGV0ZWx5LCBJIHF1aWNrbHkgc2Nhbm5lZCB0byBzZWUgaWYgKmFueSogcGFydCBvZiB0aGUgcGF0Y2ggY291bGQgYmUgZXhwbG9pdGVkLiBJIGxvb2tlZCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCwgd2hlcmUgdGhlcmUgd2VyZSBtb2RpZmljYXRpb25zIHRvIGBzY3J1Yl9hdHRyX3Zpc2libGVgIGFuZCBgc2NydWJfY3JlYXRlX2Rlc2NgLiBIb3dldmVyLCB0aG9zZSBjaGFuZ2VzIGFyZSBvbmx5IHRyaWdnZXJlZCBpZiBhIGRyaXZlciBzZXRzIHRoZSBgZ2V0X2VuYWJsZWRfb2RgIGZsYWcuIEJ1dCwgb25seSB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIHNldHMgdGhhdC4gU2luY2UgYGFjcGlfcmFzMmAgaXMgdG90YWxseSB1bnJlYWNoYWJsZS4uLiB0aG9zZSBjaGFuZ2VzIGFyZSBhbHNvIGRlYWQuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGRvY3VtZW50YXRpb24gYW5kIEtjb25maWcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYnV0IG5vdCBpbW1lZGlhdGVseSBmdXp6ZXIgY2FuZGlkYXRlcy4KClRoZXJlZm9yZSwgZGVjbGFyaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIFRoZSBwcm92aWRlZCByZWFzb25pbmcgYWNjdXJhdGVseSBkZXNjcmliZXMgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0LjQ4ODQwMDEzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjEyNTkxMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0LjQ4ODQwNzg0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxODk1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDk4NGU4ZDI3YTIxMDA2YzE2Yjg4NGM5MmJkYjZkNzEwYTM2ZjBmOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDIyOjI2OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuIENvbnRhY3Q6XFx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcXG4gRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxcbi1cXHRcXHRmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuXFxuLVxcdFxcdFRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0Llxcbi1cXG4tXFx0XFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxcbi1cXHRcXHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cXG4rXFx0XFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXFxuIFxcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9zaXplXFxuIERhdGU6XFx0XFx0TWFyY2ggMjAyNVxcbkBAIC0zNCw2ICszMCwxNCBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxcbiBcXHRcXHQob24tZGVtYW5kIHNjcnViYmluZykuXFxuIFxcbitXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXFxuK0RhdGU6XFx0XFx0SmFuIDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHQ2LjE5XFxuK0NvbnRhY3Q6XFx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcXG4rRGVzY3JpcHRpb246XFxuK1xcdFxcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcXG4rXFx0XFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1xcdTAwM2NkZXYtbmFtZVxcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXFxuIERhdGU6XFx0XFx0TWFyY2ggMjAyNVxcbiBLZXJuZWxWZXJzaW9uOlxcdDYuMTVcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxcbiBcXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxcbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcXG4rXFxuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXFxuK1xcbiszLjEuIERlbWFuZCBzY3J1YmJpbmcgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbi5cXG4rXFxuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXFxuK1xcbiswXFxuK1xcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXFxuK1xcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXFxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMzYwMDBcXG4rXFxuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxcbitUaGUgdW5pdCBvZiB0aGUgc2NydWIgY3ljbGUgcmFuZ2UgaXMgc2Vjb25kcy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDBcXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9tYXhfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzg2NDAwXFxuK1xcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cXG4rXFxuKyMgZWNobyA0MzIwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXFxuK1xcbitTZXQgJ2FkZHInIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxcbitcXG4rIyBlY2hvIDB4ODAwMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkclxcbitcXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDIwMDAwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXFxuK1xcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxcbitcXG4rV2hlbiBhIGRlbWFuZCBzY3J1YiBpcyBzdGFydGVkLCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXFxuK1xcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XFxuK1xcbiszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy5cXG4rXFxuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbitcXG4rMFxcbitcXG4rMy4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMFxcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cXG4rXFxuKyMgZWNobyAyMTYwMCBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszLjIuMy4gU3RhcnQgJ2JhY2tncm91bmQgc2NydWJiaW5nJy5cXG4rXFxuKyMgZWNobyAxIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXFxuIFxcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXFxuIFxcdCAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuIFxcbitjb25maWcgQUNQSV9SQVMyXFxuK1xcdGJvb2wgXFxcIkFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuK1xcdGRlcGVuZHMgb24gTUFJTEJPWFxcbitcXHRkZXBlbmRzIG9uIFBDQ1xcbitcXHRoZWxwXFxuK1xcdCAgQWRkIHN1cHBvcnQgZm9yIHRoZSBSQVMyIGZlYXR1cmUgdGFibGUgYW5kIHByb3ZpZGUgaW50ZXJmYWNlcyBmb3JcXG4rXFx0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cXG4rXFxuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxcbiBcXHR0cmlzdGF0ZSBcXFwiUHJvY2Vzc29yXFxcIlxcbiBcXHRkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1ZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXFxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcXHQrPSBlY19zeXMub1xcbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVxcdFxcdCs9IGJncnQub1xcbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcXHQrPSBjcHBjX2FjcGkub1xcbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVxcdCs9IHNwY3Iub1xcbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVxcdFxcdCs9IHJhczIub1xcbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXFxuIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIFxcdCs9IHBwdHQub1xcbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcXHQrPSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYWNwaS9hcGVpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm10LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3JhczIuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXFxuIFxcdGFjcGlfZGVidWdnZXJfaW5pdCgpO1xcbiBcXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XFxuIFxcdGFjcGlfdmlvdF9pbml0KCk7XFxuK1xcdGFjcGlfcmFzMl9pbml0KCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zMWRkZjVjOTY4OGM2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxuQEAgLTAsMCArMSw1MDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxcbisgKlxcbisgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXFxuKyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxcbisgKi9cXG4rXFxuKyN1bmRlZiBwcl9mbXRcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiQUNQSSBSQVMyOiBcXFwiIGZtdFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcGNjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3JhczIuaFxcdTAwM2VcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmFzMl9zc3BjYyAtIERhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxcbisgKiBAbWJveF9jbGllbnQ6XFx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxcbisgKiBAcGNjX2NoYW46XFx0XFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGVsZW06XFx0XFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xcbisgKiBAcGNjX2xvY2s6XFx0XFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQGRlYWRsaW5lX3VzOlxcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xcbisgKlxcdFxcdFxcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXFxuKyAqIEBwY2NfbXBhcjpcXHRcXHRNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKSBmb3IgUENDIGNoYW5uZWxcXG4rICogQHBjY19tcnR0OlxcdFxcdE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpIGluIG1pY3Jvc2Vjc1xcbisgKlxcdFxcdFxcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXFxuKyAqXFx0XFx0XFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcXG4rICogQGxhc3RfY21kX2NtcGxfdGltZTogQ29tcGxldGlvbiB0aW1lIG9mIGxhc3QgUENDIGNvbW1hbmRcXG4rICogQGxhc3RfbXBhcl9yZXNldDpcXHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxcbisgKiBAbXBhcl9jb3VudDpcXHRcXHRNUEFSIGNvdW50XFxuKyAqIEBwY2NfaWQ6XFx0XFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcXG4rICogQGxhc3RfY21kOlxcdFxcdExhc3QgUENDIGNvbW1hbmRcXG4rICogQGtyZWY6XFx0XFx0a3JlZiBvYmplY3RcXG4rICovXFxuK3N0cnVjdCByYXMyX3NzcGNjIHtcXG4rXFx0c3RydWN0IG1ib3hfY2xpZW50XFx0XFx0bWJveF9jbGllbnQ7XFxuK1xcdHN0cnVjdCBwY2NfbWJveF9jaGFuXFx0XFx0KnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cXHQqY29tbV9hZGRyO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0ZWxlbTtcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGNjX2xvY2s7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGRlYWRsaW5lX3VzO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRwY2NfbXBhcjtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21ydHQ7XFxuK1xcdGt0aW1lX3RcXHRcXHRcXHRcXHRsYXN0X2NtZF9jbXBsX3RpbWU7XFxuK1xcdGt0aW1lX3RcXHRcXHRcXHRcXHRsYXN0X21wYXJfcmVzZXQ7XFxuK1xcdGludFxcdFxcdFxcdFxcdG1wYXJfY291bnQ7XFxuK1xcdGludFxcdFxcdFxcdFxcdHBjY19pZDtcXG4rXFx0dTE2XFx0XFx0XFx0XFx0bGFzdF9jbWQ7XFxuK1xcdHN0cnVjdCBrcmVmXFx0XFx0XFx0a3JlZjtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxcbisgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlXFxuKyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMXFxuKyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDBcXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xcbitcXG4rI2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMFxcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXFxuK1xcbisvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovXFxuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rc3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTtcXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcdHUzMiBjYXBfc3RhdHVzO1xcbitcXHR1MTYgc3RhdHVzO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXFxuK1xcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxcbitcXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cXG4rXFx0ICpcXG4rXFx0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxcbitcXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXFxuK1xcdCAqIGJpdCBpcyBzZXQuXFxuK1xcdCAqL1xcbitcXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIHN0YXR1cyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXFxuK1xcdFxcdFxcdFxcdFxcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXFx1MDAzZWRlYWRsaW5lX3VzKTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQsIHJjKTtcXG4rXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfRVJST1IpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiUENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQpO1xcbitcXHRcXHRzdGF0dXMgXFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XFxuK1xcdFxcdGlvd3JpdGUxNihzdGF0dXMsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXFxuK1xcdHJtYigpO1xcbitcXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XFxuK1xcdFxcdHJjID0gLUVQRVJNO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcXG4rXFx0XFx0cmMgPSAtRUJVU1k7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQTpcXG4rXFx0XFx0cmMgPSAtRUlOVkFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcXG4rICogQHJhczJfY3R4OlxcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcXG4rICogQGNtZDpcXHRSQVMyIGNvbW1hbmQgdG8gc2VuZFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxcbisgKi9cXG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTtcXG4rXFx0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XFxuK1xcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcXG4rXFx0czY0IHRpbWVfZGVsdGE7XFxuK1xcdHUxNiB2YWw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRzc3BjYyA9IHJhczJfY3R4LVxcdTAwM2Vzc3BjYztcXG4rXFx0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcbitcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cGNjX2NoYW5uZWwgPSBzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW1cXG4rXFx0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxcbitcXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0IFxcdTAwM2UgdGltZV9kZWx0YSlcXG4rXFx0XFx0XFx0ZnNsZWVwKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcXG4rXFx0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cXG4rXFx0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cXG4rXFx0ICogbGltaXRhdGlvbi5cXG4rXFx0ICpcXG4rXFx0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxcbitcXHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcXG4rXFx0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxcbitcXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXFxuK1xcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXBhcikge1xcbitcXHRcXHRpZiAoIXNzcGNjLVxcdTAwM2VtcGFyX2NvdW50KSB7XFxuK1xcdFxcdFxcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XFxuK1xcdFxcdFxcdGlmICgodGltZV9kZWx0YSBcXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcXHUwMDI2XFx1MDAyNiBzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9kYmcocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIlBDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXRcXFwiLCBjbWQpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XFxuK1xcdFxcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXFx1MDAzZXBjY19tcGFyO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50LS07XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cXG4rXFx0aW93cml0ZTE2KGNtZCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZWNvbW1hbmQpO1xcbitcXG4rXFx0LyogRmxpcCBDTUQgQ09NUExFVEUgYml0ICovXFxuK1xcdGlvd3JpdGUxNigwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFxuK1xcdC8qIFJpbmcgZG9vcmJlbGwgKi9cXG4rXFx0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXFx1MDAyNmNtZCk7XFxuK1xcdC8qXFxuK1xcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cXG4rXFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X3dhcm4ocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0IFxcXCJFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXFxcblxcXCIsIGNtZCwgcmMpO1xcbitcXHRcXHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cXG4rXFx0XFx0dmFsID0gaW9yZWFkMTYoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdHZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTtcXG4rXFx0XFx0aW93cml0ZTE2KHZhbCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIGlzIG5vbi16ZXJvLCBuZWVkIHRvIHJlY29yZCB0aGVcXG4rXFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xcbitcXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cXG4rXFx0ICovXFxuK1xcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuK1xcdFxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19tcnR0KVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW5uZWwtXFx1MDAzZW1ib3gtXFx1MDAzZXR4ZG9uZV9pcnEpXFxuK1xcdFxcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMocmFzMl9zZW5kX3BjY19jbWQsIFxcXCJhY3BpX3JhczJcXFwiKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MgPVxcbitcXHRcXHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2RlbChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0pO1xcbitcXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXFx1MDAzZXBjY19jaGFuKTtcXG4rXFx0a2ZyZWUoc3NwY2MpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuK3tcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNnNzcGNjLVxcdTAwM2VrcmVmKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfZ2V0X3NzcGNjKGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyYXMyX3NzcGNjX2dldChzc3BjYyk7XFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfZ2V0X3NzcGNjKHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cXHUwMDNlcGNjX2NoYW4pO1xcbitcXHRcXHRrZnJlZShzc3BjYyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRzc3BjYy1cXHUwMDNlcGNjX2lkXFx0XFx0PSBwY2NfaWQ7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfY2hhblxcdFxcdD0gcGNjX2NoYW47XFxuK1xcdHNzcGNjLVxcdTAwM2Vjb21tX2FkZHJcXHQ9IHBjY19jaGFuLVxcdTAwM2VzaG1lbTtcXG4rXFx0aWYgKHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5KVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cXHUwMDNlbGF0ZW5jeTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfbXJ0dFxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWU7XFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfbXBhclxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcXG4rXFx0c3NwY2MtXFx1MDAzZW1ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZVxcdD0gdHJ1ZTtcXG4rXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtLCBcXHUwMDI2cmFzMl9zc3BjYyk7XFxuK1xcdHJhczJfc3NwY2NfZ2V0KHNzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2tcXHQ9IFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cXHUwMDNlc3NwY2MpO1xcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChzc3BjYy1cXHUwMDNlcGNjX2NoYW4pO1xcbitcXHRrZnJlZShzc3BjYyk7XFxuK2N0eF9mcmVlOlxcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK1xcbitcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcXG4rXFx0dTE2IHRvdF90YmxfbGVuO1xcbitcXHR1MTYgaTtcXG4rXFxuK1xcdGlmIChyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCBcXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XFxuK1xcdFxcdHByX3dhcm4oRldfV0FSTiBcXFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyBcXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgdG90X3RibF9sZW4pIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBjdHhfbGlzdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xcbitcXHRcXHRpZiAocGNjX2Rlc2NfbGlzdC1cXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVxcdTAwM2VjaGFubmVsX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBjY19kZXNjX2xpc3QtXFx1MDAzZWluc3RhbmNlKTtcXG4rXFx0XFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXFxuK1xcdFxcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxcXG5cXFwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XFxuK1xcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxcbitcXHRcXHRcXHRcXHRcXHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocGN0eF9saXN0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXFxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxcbisgKiBtZW1vcnkgZmVhdHVyZS5cXG4rICpcXG4rICogUmV0dXJuczogbm9uZS5cXG4rICovXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG4rXFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcXFxuXFxcIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xcbiBcXHRTQ1JVQl9BRERSRVNTLFxcbiBcXHRTQ1JVQl9TSVpFLFxcbiBcXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcXG4rXFx0U0NSVUJfRU5BQkxFX0RFTUFORCxcXG4gXFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxcbiBcXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXFxcIjB4JWxseFxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X21pbl9jeWNsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcXG4gXFx0XFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxcbitcXHRcXHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cXG4gXFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxcbiBcXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxcbiBcXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcXG4rXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbitcXHRkZXBlbmRzIG9uIEVEQUNcXG4rXFx0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXFxuK1xcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbitcXHRoZWxwXFxuK1xcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXFxuK1xcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuK1xcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXFxuK1xcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcXG4rXFx0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cXG4rXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbkBAIC0yLDYgKzIsNyBAQFxcbiBvYmotJChDT05GSUdfUkFTKVxcdCs9IHJhcy5vXFxuIG9iai0kKENPTkZJR19ERUJVR19GUylcXHQrPSBkZWJ1Z2ZzLm9cXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXFx0Kz0gY2VjLm9cXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXFx0Kz0gYWNwaV9yYXMyLm9cXG4gXFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcXHQrPSBhbWQvZm1wbS5vXFxuIG9iai15XFx0XFx0XFx0Kz0gYW1kL2F0bC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhiZjcxMzc1ZWM1MDY4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxuQEAgLTAsMCArMSw1NjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIkFDUEkgUkFTMiBNRU1PUlk6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZGFjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXFxuK1xcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXFxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXFxuK1xcbisvKlxcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxcbisgKi9cXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXFxuK1xcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxcbitcXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbitcXG4rc3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdGlvd3JpdGU4KDAsIFxcdTAwMjZjb21tb24tXFx1MDAzZXNldF9jYXBzWzBdKTtcXG4rXFxuK1xcdHJldHVybiBpb3JlYWQ4KFxcdTAwMjZjb21tb24tXFx1MDAzZWZlYXR1cmVzWzBdKSBcXHUwMDI2IFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxcbitcXHRcXHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IDA7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICAoaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gdHJ1ZTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xcbitzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XFxuK1xcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViKSB7XFxuK1xcdFxcdCpydW5uaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdCpydW5uaW5nID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkc7XFxuK1xcdGlmICghKCpydW5uaW5nKSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkKHZvaWQgKnApXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRpZiAoIXJ1bm5pbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdCptaW4gPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHQqbWF4ID0gcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXFxuK1xcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHQqZW5hYmxlZCA9IHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViIHx8IHJ1bm5pbmcpXFxuK1xcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xcbitcXHRcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRcXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgPSBlbmFibGU7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3Igcm91bmRpbmcgb2Ygc3VwcGxpZWQgcGFyYW1ldGVycyBhbmQgc2ltaWxhciAqL1xcbitcXHRcXHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCplbmFibGVkID0gcnVubmluZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWVuYWJsZSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJ2X2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicmFzMl9zY3J1Yl9uaWQlZFxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxcbitcXHRcXHRcXHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXFxuK1xcdFxcdFxcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbitcXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXFxuK1xcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcXG4rXFx0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXFxuK1xcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxcbitcXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxcbitcXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxcbitcXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbitcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbitcXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcXG4rXFx0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VkcnZfYWN0aXZlID0gZmFsc2U7XFxuK1xcdGlmIChyYXMyX2N0eCBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcXG4rXFx0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXFxuK1xcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcXG4rXFx0ICogR0VUX1BBVFJPTF9QQVJBTUVURVJTIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3Nlc1xcbitcXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcXG4rXFx0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXFxuK1xcdCAqL1xcbitcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSA9IG51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcnZfYWN0aXZlOlxcdFxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJ2X2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI2OjQ0Ljg0MTA3MjA2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4NTk5MTI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIgYW5kIGFkZHMgZGVtYW5kIHNjcnViYmluZyBzdXBwb3J0IHRvIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS4gVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBtYWlsYm94IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLiBTaW5jZSBQQ0MgaGFyZHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIEFDUEkgdGFibGVzIGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIChzcGVjaWZpY2FsbHkgdGltaW5nIG91dCB3aGlsZSBwb2xsaW5nIGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uKS4gQ29uc2VxdWVudGx5LCB0aGUgY29yZSBsb2dpYyBhbmQgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOTg0ZThkMjdhMjEwMDZjMTZiODg0YzkyYmRiNmQ3MTBhMzZmMGY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAyMjoyNjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSArMjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbitcdFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXG4gXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9zaXplXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuQEAgLTM0LDYgKzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbitXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbitEYXRlOlx0XHRKYW4gMjAyNlxuK0tlcm5lbFZlcnNpb246XHQ2LjE5XG4rQ29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbitcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbitcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuIEtlcm5lbFZlcnNpb246XHQ2LjE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuK1xuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXG4rXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4rXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMFxuK1xuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbitcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDAwXG4rXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDBcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4rXG4rODY0MDBcbitcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuK1xuKyMgZWNobyA0MzIwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4rXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbitcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuK1xuKyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbitcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxuK1xuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbitcbisjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbitcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4rXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG4rXG4rMFxuK1xuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbitcbisjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuK2NvbmZpZyBBQ1BJX1JBUzJcbitcdGJvb2wgXCJBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4rXHRkZXBlbmRzIG9uIE1BSUxCT1hcbitcdGRlcGVuZHMgb24gUENDXG4rXHRoZWxwXG4rXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4rXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuK1xuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIFx0dHJpc3RhdGUgXCJQcm9jZXNzb3JcIlxuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVx0Kz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQrPSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCs9IGNwcGNfYWNwaS5vXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcdCs9IHNwY3Iub1xuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCs9IHJhczIub1xuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4rXHRhY3BpX3JhczJfaW5pdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxZGRmNWM5Njg4YzY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICsxLDUwOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIkFDUEkgUkFTMjogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9wY2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbisgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4rICogQHBjY19jaGFuOlx0XHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4rICogQHBjY19sb2NrOlx0XHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxuKyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4rICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbisgKlx0XHRcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXG4rICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4rICogQGxhc3RfbXBhcl9yZXNldDpcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XG4rICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbisgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuKyAqIEBsYXN0X2NtZDpcdFx0TGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuKyAqL1xuK3N0cnVjdCByYXMyX3NzcGNjIHtcbitcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuK1x0dTY0XHRcdFx0XHRkZWFkbGluZV91cztcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X2NtZF9jbXBsX3RpbWU7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4rXHRpbnRcdFx0XHRcdG1wYXJfY291bnQ7XG4rXHRpbnRcdFx0XHRcdHBjY19pZDtcbitcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4rXHRzdHJ1Y3Qga3JlZlx0XHRcdGtyZWY7XG4rfTtcbitcbisvKlxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cbisgKi9cbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xuK1xuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXG4rXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuK1xuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHUzMiBjYXBfc3RhdHVzO1xuK1x0dTE2IHN0YXR1cztcbitcdGludCByYztcbitcbitcdC8qXG4rXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXG4rXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cbitcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuK1x0ICpcbitcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcbitcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbitcdCAqIGJpdCBpcyBzZXQuXG4rXHQgKi9cbitcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbitcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcbitcdFx0XHRcdFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cdTAwM2VkZWFkbGluZV91cyk7XG4rXHRpZiAocmMpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCwgcmMpO1xuK1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbitcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4rXHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4rXHRybWIoKTtcbitcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4rXHRcdHJjID0gLUVQRVJNO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4rXHRcdHJjID0gLUVCVVNZO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4rXHRcdHJjID0gLUVJTlZBTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcbisgKiBAcmFzMl9jdHg6XHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXG4rICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxuKyAqL1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHM2NCB0aW1lX2RlbHRhO1xuK1x0dTE2IHZhbDtcbitcdGludCByYztcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbitcdCAqL1xuK1x0aWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuK1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbm5lbC1cdTAwM2VtYm94LVx1MDAzZXR4ZG9uZV9pcnEpXG4rXHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcImFjcGlfcmFzMlwiKTtcbitcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSk7XG4rXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0a2ZyZWUoc3NwY2MpO1xuK31cbitcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX2dldChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0a3JlZl9nZXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJhczJfc3NwY2NfcHV0KHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbit7XG4rXHRrcmVmX3B1dChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmLCAgXHUwMDI2cmFzMl9saXN0X3BjY19yZWxlYXNlKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX2dldF9zc3BjYyhpbnQgcGNjX2lkKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX2lkICE9IHBjY19pZClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9nZXRfc3NwY2MocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0XHRrZnJlZShzc3BjYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuK1x0c3NwY2MtXHUwMDNlcGNjX2NoYW5cdFx0PSBwY2NfY2hhbjtcbitcdHNzcGNjLVx1MDAzZWNvbW1fYWRkclx0PSBwY2NfY2hhbi1cdTAwM2VzaG1lbTtcbitcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVx1MDAzZWxhdGVuY3k7XG4rXHRlbHNlXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21ydHRcdFx0PSBwY2NfY2hhbi1cdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21wYXJcdFx0PSBwY2NfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4rXHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbitcbitcdGtyZWZfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VrcmVmKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0sIFx1MDAyNnJhczJfc3NwY2MpO1xuK1x0cmFzMl9zc3BjY19nZXQoc3NwY2MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9IHBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4rXHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4rc3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHUzMiBjb21wX25pZDtcbitcdGludCBpZCwgcmM7XG4rXG4rXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcbitcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbitcdFx0cHJfZGVidWcoXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcblwiLCBjaGFubmVsLCBweG1faW5zdCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcbitcbitcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCIsIGNoYW5uZWwsXG4rXHRcdFx0IHB4bV9pbnN0LCByYyk7XG4rXHRcdGdvdG8gY3R4X2ZyZWU7XG4rXHR9XG4rXG4rXHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoaWQgXHUwMDNjIDApIHtcbitcdFx0cmMgPSBpZDtcbitcdFx0Z290byBwY2NfZnJlZTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYubmFtZVx0XHQ9IG5hbWU7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBpZGFfZnJlZTtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbitcdH1cbitcbitcdHJldHVybiByYXMyX2N0eDtcbitcbitpZGFfZnJlZTpcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4rcGNjX2ZyZWU6XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbitjdHhfZnJlZTpcbitcdGtmcmVlKHJhczJfY3R4KTtcbitcbitcdHJldHVybiBFUlJfUFRSKHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MTYgdG90X3RibF9sZW47XG4rXHR1MTYgaTtcbitcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiTm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiUkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgcmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwY3R4X2xpc3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICsgMSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xuK1x0XHRpZiAocGNjX2Rlc2NfbGlzdC1cdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVx1MDAzZWNoYW5uZWxfaWQsXG4rXHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4rXHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuK1x0XHRpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xuK1x0XHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cIiwgUFRSX0VSUihyYXMyX2N0eCkpO1xuK1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbitcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuK1x0XHRcdFx0XHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XG4rXHRcdH1cbitcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4rXHR9XG4rXHRrZnJlZShwY3R4X2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4rICpcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuKyAqIG1lbW9yeSBmZWF0dXJlLlxuKyAqXG4rICogUmV0dXJuczogbm9uZS5cbisgKi9cbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiO1xuK1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcdTAwMjZyYXMyX3RhYik7XG4rXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcblwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwiKTtcbitcbitcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4rKysgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xuIFx0U0NSVUJfQUREUkVTUyxcbiBcdFNDUlVCX1NJWkUsXG4gXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcbitcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgXCIldVxcblwiKVxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcIiV1XFxuXCIpXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiArMTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcbitcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuK1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4rXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHJldHVybiAwNDQ0O1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuK1x0XHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5pbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5AQCAtNDYsNCArNDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuK2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4rXHR0cmlzdGF0ZSBcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4rXHRkZXBlbmRzIG9uIEVEQUNcbitcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuK1x0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4rXHRoZWxwXG4rXHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuK1x0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbitcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4rXHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4rXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxuK1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0Kz0gcmFzLm9cbiBvYmotJChDT05GSUdfREVCVUdfRlMpXHQrPSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCs9IGNlYy5vXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXHQrPSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCs9IGFtZC9hdGwvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YmY3MTM3NWVjNTA2OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbkBAIC0wLDAgKzEsNTYyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqL1xuK1xuKyN1bmRlZiBwcl9mbXRcbisjZGVmaW5lIHByX2ZtdChmbXQpXHRcIkFDUEkgUkFTMiBNRU1PUlk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4rXG4rI2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcbitcbisvKlxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXG4rICovXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuK1xuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcbisjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbitcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4rfTtcbitcbisjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbitcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4rXHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuK1x0XHQqcnVubmluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbitcdGlmICghKCpydW5uaW5nKSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmICghcnVubmluZykge1xuK1x0XHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0bXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbitcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuK1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuK1x0ICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cIixcbitcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4rXHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmVuYWJsZWQgPSBydW5uaW5nO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX2luO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZW5hYmxlKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJldCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0LypcbitcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuK1x0ICogd2l0aCAoYmFzZSArIHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgKyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbitcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIiVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuK1x0XHRyZXQgPSAtRVJBTkdFO1xuK1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwiLCByZXQpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdH1cbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2VkcnZfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuK1x0XHRcdFx0XHQgICAgICAgXCJyYXMyX3NjcnViX25pZCVkXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbitcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyB1c2VyL2Zpcm13YXJlIG1heSBuZWVkXG4rXHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHRcdH1cbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgcmFzMl9zY3J1Yl9vcHMgPSB7XG4rXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXG4rXHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4rXHQud3JpdGVfYWRkciA9IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcixcbitcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxuK1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbitcdC5zZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcsXG4rXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuK1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbitcdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbitcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcbitcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4rXHQuc2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHJhczJfbWVtX2Rydl9yZW1vdmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJ2X2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4IFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbitcdFx0a3RocmVhZF9zdG9wKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kXG4rXHQgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzXG4rXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcbitcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxuK1x0ICovXG4rXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxuXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbitcdHJhczJfY3R4LVx1MDAzZW1lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZWZiNTgwYjVlMzYxOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRydl9hY3RpdmU6XHRcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxuKyAqL1xuK3N0cnVjdCByYXMyX21lbV9jdHgge1xuK1x0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2VcdFx0YWRldjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuK1x0dm9pZFx0XHRcdFx0KnNzcGNjO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0KnBjY19sb2NrO1xuK1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4rXHR1NjRcdFx0XHRcdG1lbV9iYXNlO1xuK1x0dTY0XHRcdFx0XHRtZW1fc2l6ZTtcbitcdHU2NFx0XHRcdFx0YmFzZTtcbitcdHU2NFx0XHRcdFx0c2l6ZTtcbitcdHU4XHRcdFx0XHRzY3J1Yl9jeWNsZV9ocnM7XG4rXHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuK1x0dThcdFx0XHRcdG1pbl9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtYXhfc2NydWJfY3ljbGU7XG4rXHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbitcdGJvb2xcdFx0XHRcdGJnX3NjcnViO1xuK1x0Ym9vbFx0XHRcdFx0cmVlbmFibGVfYmdfc2NydWI7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbitcdGJvb2xcdFx0XHRcdGRydl9hY3RpdmU7XG4rfTtcbitcbisjaWZkZWYgQ09ORklHX0FDUElfUkFTMlxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuQEAgLTY4NCw2ICs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxuKyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cbiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG5AQCAtNjk2LDYgKzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4rXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbitcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4gXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuIFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcbiBcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNjo0NC44NDEwNzQzODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5NTk2OTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emFiaWxpdHkgb2YgQUNQSSBSQVMyIFN1cHBvcnQgYW5kIE1lbW9yeSBTY3J1YmJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBBQ1BJIFJBUzIgc3VwcG9ydCBhbmQgbWVtb3J5IHNjcnViYmluZy4gSXQncyBnb3QgY2hhbmdlcyBpbiBgZHJpdmVycy9hY3BpL3JhczIuY2AsIGBkcml2ZXJzL3Jhcy9hY3BpX3JhczIuY2AsIGFuZCBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gd2UgYWN0dWFsbHkgdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFDUEkgUkFTMiBsZWFucyBoZWF2aWx5IG9uIEFDUEkgdGFibGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJBUzIgdGFibGUsIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpLlxuXG5GaXJzdCwgdGhlIFFFTVUvR0NFIHF1ZXN0aW9uLiBEb2VzIHRoZSBmaXJtd2FyZSBhY3R1YWxseSAqcHJvdmlkZSogYSBSQVMyIHRhYmxlIGJ5IGRlZmF1bHQ/IFR5cGljYWxseSwgbm8uIFFFTVUgZG9lc24ndCB1c3VhbGx5IGV4cG9zZSB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZC4gQnV0IHRoZXJlJ3MgU3l6a2FsbGVyLiBDYW4gaXQgaW5qZWN0IEFDUEkgdGFibGVzPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBhbmdsZSB3ZSBjYW4gZXhwbG9pdD9cblxuTGV0IG1lIHNlZS4uLiBgYWNwaV9yYXMyX2luaXRgIGdldHMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEFuZCB0aGF0IGluIHR1cm4gY2FsbHMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgaXNuJ3QgcHJlc2VudCwgaXQganVzdCByZXR1cm5zLiBUaGF0J3MgYSBnb29kIHNhbml0eSBjaGVjayBpbiB0aGUgY29kZSwgYnV0IGl0IG1ha2VzIHRoZSB0YWJsZSBwcmVzZW5jZSAqY3JpdGljYWwqLlxuXG5TeXprYWxsZXIgKmNhbiogaW5qZWN0IHRhYmxlcywgcmlnaHQ/IEkgc2VlbSB0byByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19BQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQuIEJ1dCwgaXQncyBvZnRlbiBhIHBhaW4gdG8gdGFyZ2V0IHNwZWNpZmljIEFDUEkgdGFibGUgaW5qZWN0aW9ucy4gQW5kLCB0aGF0IFBDQyBpbnRlcmFjdGlvbi4uLiBkb2VzIFN5emthbGxlcidzIHRhYmxlIGluamVjdGlvbiBjb3ZlciB0aGF0IHByb3Blcmx5LCBvciBkb2VzIGl0IGxlYXZlIHVzIGV4cG9zZWQ/IEhvbmVzdGx5LCB0aGUgaW5qZWN0aW9uIHRocm91Z2ggYGNvbmZpZyBBQ1BJX1RBQkxFX1VQR1JBREVgIGFuZCBpbml0cmQgaXMgaGFyZCB0byByZWFjaCB1bmxlc3Mgd2UgYXJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXQuXG5cblNvLCBpZiBgYWNwaV9nZXRfdGFibGVgIGZhaWxzLCBgYWNwaV9yYXMyX2luaXRgIGRvZXMgbm90aGluZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnQ/IFNvZnR3YXJlIGVtdWxhdGlvbiwgcGVyaGFwcz8gUENDIGlzIHRoZSBBQ1BJIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbC4gVGhlIGRyaXZlciBqdXN0IHF1aWV0bHkgZG9lcyBub3RoaW5nIGlmIGl0IGNhbid0IGZpbmQgdGhlIHRhYmxlLiBCdXQgaGFuZyBvbiwgU3l6a2FsbGVyIGRvZXMgZnV6eiBBQ1BJIHRhYmxlcyBzb21ldGltZXMsIHNvIHRoYXQgaXMgYSB0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3M6IGBDT05GSUdfQUNQSV9SQVMyYCwgYENPTkZJR19NRU1fQUNQSV9SQVMyYCwgYW5kIGBDT05GSUdfRURBQ19TQ1JVQmAuIEdvdCBpdC5cblxuT2theSwgY2FuIHdlIGZ1enogdGhpcz8gVGhlIGRyaXZlciByZWdpc3RlcnMgYW4gYXV4aWxpYXJ5IGRldmljZSBpZiB0aGUgUkFTMiB0YWJsZSAqaXMqIHByZXNlbnQsIGFuZCB0aGVuIGByYXMyX21lbV9kcnZfcHJvYmVgIGdldHMgY2FsbGVkLiBUaGF0IHVzZXMgUENDLiBUbyBmdXp6IGVmZmVjdGl2ZWx5LCB3ZSdkICpuZWVkKiB0aGF0IFJBUzIgdGFibGUuIElzIGl0IGV2ZW4gd29ydGggdGhlIGVmZm9ydD8gQWJzb2x1dGVseSwgdGhpcyBpcyBhIG5ldyBkcml2ZXIsIHBhcnNpbmcgQUNQSSB0YWJsZXMsIGFuZCBleHBvc2luZyBzeXNmcyBpbnRlcmZhY2VzLiBIaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzIHRoZXJlLiBCdXQgaWYgd2UgY2FuJ3QgcmVsaWFibHkgaW5qZWN0IHRoZSBBQ1BJIHRhYmxlLi4uIGl0IHdpbGwgYmUgdG91Z2ggZm9yIFN5emthbGxlciB0byB0cmlnZ2VyIGl0LiBJdCB3b3VsZCBuZWVkIHRvIGhhdmUgc29tZXRoaW5nIGxpa2UgYSBgc3l6X2FjcGlfc2V0dXBgIGNhbGwsIG9yIHRoZSBjYXBhYmlsaXR5IHRvIG1vdW50IGNvbmZpZ2ZzIGFuZCBpbmplY3QgQUNQSSB0YWJsZXMuXG5cbkxldCdzIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgY2hhbmdlIGFkZHMgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyByZWFjaGFibGUgaWYgKmFueSogRURBQyBkcml2ZXIgY2FsbHMgYHNldF9lbmFibGVkX29kYC4gSXQgc2VlbXMgYGFjcGlfcmFzMi5jYCAqaXMqIHRoZSBvbmx5IG9uZSBjdXJyZW50bHkgdXNpbmcgaXQuIFNvIGl0IG1ha2VzIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBSQVMyIHRhYmxlIGxlc3Mgb2YgYSBsaW1pdGluZyBmYWN0b3IuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgdXNlcnMgb2YgYGVkYWNfc2NydWJfb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNjo1Ny4wMzcwNDU3ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjA4Mjk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZGFjX3NjcnViX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2N4bC9jb3JlL2VkYWMuYz0zMjQ9c3RhdGljIGludCBjeGxfcGF0cm9sX3NjcnViX3NldF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLFxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU1LVxcbmRyaXZlcnMvY3hsL2NvcmUvZWRhYy5jOjM1NjpzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIGN4bF9wc19zY3J1Yl9vcHMgPSB7XFxuZHJpdmVycy9jeGwvY29yZS9lZGFjLmMtMzU3LVxcdC5nZXRfZW5hYmxlZF9iZyA9IGN4bF9wYXRyb2xfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz00MD1zdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYy00NC1cXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdF9jdHggKmN0eCA9IGRldl9nZXRfZHJ2ZGF0YShyYXNfZmVhdF9kZXYpO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzo0NTpcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xcdFxcdFxcXFxcXG5kcml2ZXJzL2VkYWMvc2NydWIuYy00Ni1cXHR0eXBlIGRhdGE7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmM9NjU9c3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTcwLVxcdHN0cnVjdCBlZGFjX2Rldl9mZWF0X2N0eCAqY3R4ID0gZGV2X2dldF9kcnZkYXRhKHJhc19mZWF0X2Rldik7XFx0XFx0XFxcXFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjcxOlxcdGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyAqb3BzID0gY3R4LVxcdTAwM2VzY3J1YltpbnN0XS5zY3J1Yl9vcHM7XFx0XFx0XFxcXFxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTcyLVxcdHR5cGUgZGF0YTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtOTctXFx0c3RydWN0IGVkYWNfZGV2X2ZlYXRfY3R4ICpjdHggPSBkZXZfZ2V0X2RydmRhdGEocmFzX2ZlYXRfZGV2KTtcXG5kcml2ZXJzL2VkYWMvc2NydWIuYzo5ODpcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKm9wcyA9IGN0eC1cXHUwMDNlc2NydWJbaW5zdF0uc2NydWJfb3BzO1xcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTk5LVxcbi0tXFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM9MzczPXN0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ2OC1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzo0Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00NzAtXFx0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmg9NjcyPWVudW0gZWRhY19kZXZfZmVhdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02NzktLyoqXFxuaW5jbHVkZS9saW51eC9lZGFjLmg6NjgwOiAqIHN0cnVjdCBlZGFjX3NjcnViX29wcyAtIHNjcnViIGRldmljZSBvcGVyYXRpb25zIChhbGwgZWxlbWVudHMgb3B0aW9uYWwpXFxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjgxLSAqIEByZWFkX2FkZHI6IHJlYWQgYmFzZSBhZGRyZXNzIG9mIHNjcnViYmluZyByYW5nZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY5My0gKi9cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2OTQ6c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02OTUtXFx0aW50ICgqcmVhZF9hZGRyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lZGFjLmg9ODYxPXN0cnVjdCBlZGFjX2Rldl9kYXRhIHtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjItXFx0dW5pb24ge1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg2MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKnNjcnViX29wcztcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04NjQtXFx0XFx0Y29uc3Qgc3RydWN0IGVkYWNfZWNzX29wcyAqZWNzX29wcztcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oPTg3OT1zdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODItXFx0dW5pb24ge1xcbmluY2x1ZGUvbGludXgvZWRhYy5oOjg4MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgKnNjcnViX29wcztcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC04ODQtXFx0XFx0Y29uc3Qgc3RydWN0IGVkYWNfZWNzX29wcyAqZWNzX29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6MjY6NTkuMDI5MTM3ODgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNTI5MzE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDWEwgRHJpdmVyJ3MgUkFTMiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhlIENYTCBkcml2ZXIgcmVsaWVzIG9uIGBlZGFjX3NjcnViX29wc2AsIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZSBuZXcgYGVuYWJsZV9kZW1hbmRgIGZlYXR1cmUsIHRoYXQncyBleGNsdXNpdmVseSBpbiBgYWNwaV9yYXMyLmNgLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCAqY2FuKiB3ZSBldmVuIHJlYWNoIGBhY3BpX3JhczIuY2A/IEl0IGhpbmdlcyBvbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQUNQSSBSQVMyIHRhYmxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBoZWxwIGhlcmU/IEkga25vdyBpdCBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIHRocm91Z2ggY29uZmlnZnMgYXQgYC9zeXMva2VybmVsL2NvbmZpZy9hY3BpL3RhYmxlYCwgc28gbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGFyZSBkZXNjcmlwdGlvbnMgZm9yIEFDUEkgdGFibGUgaW5qZWN0aW9uIGF2YWlsYWJsZSBpbiBzeXprYWxsZXIuXG5cblJpZ2h0LCBzeXprYWxsZXIgKmNhbiogZG8gaXQsIHRoYXQncyBnb29kIG5ld3MuIEhvd2V2ZXIsIGNvbnN0cnVjdGluZyBhIHZhbGlkIFJBUzIgdGFibGUgYW5kIGEgdXNhYmxlIFBDQyBjaGFubmVsIGlzIGEgZGlmZmVyZW50IGNoYWxsZW5nZS4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIG5ldyBgYWNwaV9yYXMyLmNgIGRyaXZlciwgYW5kIHRoYXQgaXQgcGFyc2VzIEFDUEkgdGFibGVzIGFuZCBpbnRlcmFjdHMgd2l0aCBQQ0MuIEl0IGlzIGxpa2VseSB0aGUgYXV0aG9yJ3MgaW50ZW50aW9uIGlzIHRvIGVuc3VyZSB0aGlzIG5ldyBkcml2ZXIgaXMgdXNlZCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzIHdoZW4gaXQgaXMgdXNlZC4gSSBhbSBubyBsb25nZXIgd29ycmllZCBhYm91dCByZWFjaGFiaWxpdHkuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBuZXcgZHJpdmVyIGJlIGV4cGxvaXRlZC5cblxuTm93LCBhIGNyaXRpY2FsIHRob3VnaHQ6IGlzIHRoaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gVGhlbiBJIHJlbWVtYmVyZWQ6IFFFTVUgKmRvZXMqIHN1cHBvcnQgQUNQSSB0YWJsZSBpbmplY3Rpb24uIEFuZCBzeXprYWxsZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogQUNQSSB0YWJsZXMuIEJ1dCBoZXJlJ3MgdGhlIHNuYWcsIFBDQywgdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCwgbmVlZHMgYSBQQ0MgbWFpbGJveCBjaGFubmVsLiBOb3csIGRvZXMgUUVNVSBwcm92aWRlIG9uZT8gVGhpcyBpcyB0aGUgbmV4dCB0aGluZyB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGEgUENDIG1haWxib3ggZHJpdmVyIHRoYXQgY2FuIGJlIGxvYWRlZCwgb3IsIGlkZWFsbHksIGZ1enplZC4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgdnVsbmVyYWJpbGl0eSB3b3JrLCBpZiBpdCBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjA0LjczNDQ0OTUwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2Mjk1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjcGkvYWNwaV9wY2MuYz00OT1hY3BpX3BjY19hZGRyZXNzX3NwYWNlX3NldHVwKGFjcGlfaGFuZGxlIHJlZ2lvbl9oYW5kbGUsIHUzMiBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGF0YS1cXHUwMDNlZG9uZSk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM6Njg6XFx0ZGF0YS1cXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmRhdGEtXFx1MDAzZWNsLCBjdHgtXFx1MDAzZXN1YnNwYWNlX2lkKTtcXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02OS1cXHRpZiAoSVNfRVJSKGRhdGEtXFx1MDAzZXBjY19jaGFuKSkge1xcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jPTU2Nj1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKGludCBwY2Nfc3NfaWR4KVxcbi0tXFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3MS1cXHRpZiAocGNjX3NzX2lkeCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jOjU3MjpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2Y3BwY19tYm94X2NsLCBwY2Nfc3NfaWR4KTtcXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTczLVxcbi0tXFxuZHJpdmVycy9hY3BpL3JhczIuYz0yODM9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MzA1OlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQsIHBjY19pZCk7XFxuZHJpdmVycy9hY3BpL3JhczIuYy0zMDYtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTA3PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfcmVxdWVzdF9wY2NfY2hhbihzdHJ1Y3QgaGlzaV91bmNvcmVfZnJlcSAqdW5jb3JlKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTctXFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYzoxMTg6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnVuY29yZS1cXHUwMDNlY2wsIHVuY29yZS1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0xMTktXFx0aWYgKElTX0VSUihwY2NfY2hhbikpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM9NjA5PXN0YXRpYyBpbnQgeGdlbmVfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYzo2Njg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjktXFx0XFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzctXFx0XFx0Y2wtXFx1MDAzZXJ4X2NhbGxiYWNrID0gc2xpbXByb19pMmNfcGNjX3J4X2NiO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcXHRcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgY3R4LVxcdTAwM2VtYm94X2lkeCk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTMxMz1zdGF0aWMgaXJxcmV0dXJuX3QgcGNjX21ib3hfaXJxKGludCBpcnEsIHZvaWQgKnApXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzQ4LS8qKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNDk6ICogcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsIC0gUENDIGNsaWVudHMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlxcdFxcdHJlcXVlc3QgYSBwb2ludGVyIHRvIHRoZWlyIFBDQyBzdWJzcGFjZSwgZnJvbSB3aGljaCB0aGV5XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM9MzYwPXN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzYxOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzkyLX1cXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5NC1cXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5OTogKlxcdCAgIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgpXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYz0xNzM9c3RhdGljIGludCBoY2NzX3JlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xODgtXFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jOjE4OTpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cXHUwMDNlY2hhbl9pZCk7XFxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE5MC1cXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTM3PWV4dGVybiBzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xcbmluY2x1ZGUvYWNwaS9wY2MuaC0zOS1leHRlcm4gdm9pZCBwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3RydWN0IHBjY19tYm94X2NoYW4gKmNoYW4pO1xcbi0tXFxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDo0MjpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmluY2x1ZGUvYWNwaS9wY2MuaC00My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjA2LjY5MDc1MDMyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODQ3OTc3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IG9mIHRoZSBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHN5emthbGxlciwgd2l0aCBpdHMgQUNQSSB0YWJsZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCAqbWlnaHQqIGJlIGFibGUgdG8gdHJpZ2dlciB0aGUgYHJhczJfbWVtX2Rydl9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBQQ0MgbWFpbGJveCBwYXRod2F5LiBUaGUgbG9naWMgZ29lczogYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgcmVxdWVzdHMgdGhlIG1haWxib3ggY2hhbm5lbCwgYW5kIHRoZSBQQ0MgbWFpbGJveCBkcml2ZXIgaW5pdGlhbGl6ZXMgZnJvbSB0aGUgQUNQSSBQQ0NUIHRhYmxlLiBTeXprYWxsZXIgaW5qZWN0aW5nIGJvdGggYSBQQ0NUIHRhYmxlIGFuZCBhIFJBUzIgdGFibGUgY291bGQgKnRoZW9yZXRpY2FsbHkqIGNyZWF0ZSB0aGlzIHNldHVwLlxuXG5Ib3dldmVyLCBnaXZlbiBzeXprYWxsZXIncyBjdXJyZW50IGxpbWl0YXRpb25zIGluIEFDUEkgdGFibGUgbWFuaXB1bGF0aW9uLCBzdWNjZXNzZnVsbHkgY3JhZnRpbmcgYSBjb2hlcmVudCBQQ0NULCBQQ0MgY2hhbm5lbCwgYW5kIFJBUzIgdGFibGUgdGhhdCBhbGwgbGluayBjb3JyZWN0bHkgdG8gdGhlIGBhY3BpX3JhczJgIG1lbW9yeSBkcml2ZXIgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2VzIHNlZW1lZCBpbmNyZWRpYmx5IHVubGlrZWx5LiBJdCdzIGp1c3QgYSBsb3QgdG8gZ2V0IHJpZ2h0LlxuXG5UaGVuIEkgc2hpZnRlZCBnZWFycyDigJMgaXMgdGhlcmUgKmFueSogb3RoZXIgcm91dGU/IEkgc2VlIHRoaXMgYHJhczJfbWVtX2Rydl9wcm9iZWAgaXMgcGFydCBvZiBhbiBhdXhpbGlhcnkgZHJpdmVyLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XG5cdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG5cdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcblx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXG5cdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbn07XG5gYGBcblxuQ2FuICp3ZSogY3JlYXRlIGFuIGF1eGlsaWFyeSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IE5vLCB0aGF0J3Mgbm90IGhvdyBpdCB3b3JrczsgYXV4aWxpYXJ5IGRldmljZXMgYXJlIGNyZWF0ZWQgYnkgb3RoZXIga2VybmVsIGRyaXZlcnMuIEluIHRoaXMgY2FzZSwgaXQgYXBwZWFycyB0aGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGRyaXZlciBpcyByZXNwb25zaWJsZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgcGFyc2VfcmFzMl90YWJsZWAgZnVuY3Rpb24uIFRoZXJlZm9yZSwgdGhpcyB3aG9sZSBwYXRod2F5ICpzdHJpY3RseSogcmVxdWlyZXMgcGFyc2luZyB0aGUgQUNQSSBSQVMyIHRhYmxlLlxuXG5TbywgY291bGQgc3l6a2FsbGVyIGZ1enogdGhpcz8gSXQncyBwb3NzaWJsZSEgSWYgaXQgY2FuIGluamVjdCBBQ1BJIHRhYmxlcywgaXQgKm1pZ2h0KiByZWFjaCBgcGFyc2VfcmFzMl90YWJsZWAuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgd2hldGhlciBzeXprYWxsZXIgYWN0dWFsbHkgKmRvZXMqIGhhdmUgQUNQSSB0YWJsZSBpbmplY3Rpb24gYXZhaWxhYmxlLiBZZXMsIGl0IGRvZXMhIGBzeXpfYWNwaV9zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgaXMgdXNlZC5cblxuQnV0IHdhaXQuIEV2ZW4gaWYgaXQgKmRvZXMqIHBhcnNlIHRoZSBSQVMyIHRhYmxlLCB0aGF0IGBwYXJzZV9yYXMyX3RhYmxlYCBmdW5jdGlvbiB0aGVuIGNhbGxzIGByZWdpc3Rlcl9wY2NfY2hhbm5lbGAsIHdoaWNoIGNhbGxzIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiBBbmQsIGlmIHRoZXJlIGlzbid0IGEgUENDVCB0YWJsZSwgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCBmYWlsdXJlIHdpbGwgcHJvcGFnYXRlIHRvIGBhZGRfYXV4X2RldmljZWAsIGFuZCB0aGVyZWZvcmUgdGhlIGF1eGlsaWFyeSBkZXZpY2Ugd29uJ3QgYmUgY3JlYXRlZC4gTWVhbmluZywgYHJhczJfbWVtX2Rydl9wcm9iZWAgd29uJ3QgZXZlciBiZSBjYWxsZWQgdW5sZXNzIGEgKnZhbGlkKiBQQ0NUIHRhYmxlIGlzIHByZXNlbnQgYW5kIGEgUENDIGNoYW5uZWwgaXMgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLlxuXG5UaGUgY29uY2x1c2lvbiBpcyB0aGlzIGlzICpleHRyZW1lbHkqIGhhcmQgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uLiBVbmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2YgbW9jayBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIFBDQywgd2UncmUgcHJvYmFibHkgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gaGl0IHRoaXMgZWFzaWx5IHdpdGggZnV6emluZy4gTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBmb3Igc29tZSBQQ0MgZW11bGF0aW9ucy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxNS4zNzU1NTE5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyOTY5NzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjY19tYm94X3JlcXVlc3RfY2hhbm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjE1LjU4Njg1NTkxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDYzNTI2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNYWlsYm94IERyaXZlciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy9tYWlsYm94L2AgZGlyZWN0b3J5LiBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IHRoZSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkgaW4gdGhpcyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgYSBtb2NrZWQgdmVyc2lvbiBvZiBpdCBoZXJlPyBUaGF0J3MgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTWFpbGJveCBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBpZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHJlYWwgaGFyZHdhcmUgZHVyaW5nIHRlc3Rpbmcgb3IgZGV2ZWxvcG1lbnQsIHRoZW4gYSBtb2NrIFBDQyB3b3VsZCBiZSB0aGUgbG9naWNhbCB3YXkgdG8gZ28uIFRoaXMgaXMgYSBjcml0aWNhbCBkZXRhaWwgaW4gZmlndXJpbmcgb3V0IGhvdyB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgYW5kIGhvdyByb2J1c3RseSBpdOKAmXMgZGVzaWduZWQuIFdpdGhvdXQgdW5kZXJzdGFuZGluZyB0aGUgUENDIGludGVyYWN0aW9uLCB0aGUgb3ZlcmFsbCBmdW5jdGlvbiBvZiB0aGUgbWFpbGJveCBkcml2ZXIgaXMgdW5jbGVhci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxOC41MzMyMTEyNTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE3MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tYWlsYm94L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL21haWxib3gvcGNjLmM9MzEzPXN0YXRpYyBpcnFyZXR1cm5fdCBwY2NfbWJveF9pcnEoaW50IGlycSwgdm9pZCAqcClcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM0OTogKiBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwgLSBQQ0MgY2xpZW50cyBjYWxsIHRoaXMgZnVuY3Rpb24gdG9cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzUwLSAqXFx0XFx0cmVxdWVzdCBhIHBvaW50ZXIgdG8gdGhlaXIgUENDIHN1YnNwYWNlLCBmcm9tIHdoaWNoIHRoZXlcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozNjE6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzYyLXtcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTItfVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTM6RVhQT1JUX1NZTUJPTF9HUEwocGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKTtcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5OC0gKiBAcGNoYW46IFBvaW50ZXIgdG8gdGhlIFBDQyBtYWlsYm94IGNoYW5uZWwgYXMgcmV0dXJuZWQgYnlcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXFx0ICAgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKClcXG5kcml2ZXJzL21haWxib3gvcGNjLmMtNDAwLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzoxOC42NTAzODY4NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3NTY0NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkFTMiBNZW1vcnkgRHJpdmVyIFByb2JlKipcblxuT2theSwgc28gdGhlcmUncyBubyBcIm1vY2sgUENDXCIgaW4gdGhpcyBzY2VuYXJpbywgd2hpY2ggbWVhbnMgdGhlIHBhdGggdG8gYHJhczJfbWVtX2Rydl9wcm9iZWAgaXMgdmVyeSBzcGVjaWZpYyBhbmQgaGluZ2VzIG9uIGEgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBMZXQncyBicmVhayBpdCBkb3duOiBGaXJzdCwgSSBuZWVkIHRvIGhhdmUgYSB2YWxpZCBBQ1BJIFJBUzIgdGFibGUsIHRoYXQncyBzdGVwIG9uZS4gVGhlbiwgSSAqbXVzdCogaGF2ZSBhbiBBQ1BJIFBDQ1QgdGFibGUgd2l0aCBhIHZhbGlkIHN1YnNwYWNlIGRlZmluZWQ7IHRoYXQncyBjcml0aWNhbC4gRm9sbG93aW5nIHRoaXMsIHRoZSBkZXNjcmliZWQgc3Vic3BhY2UgKmhhcyogdG8gaGF2ZSBhIGZ1bmN0aW9uYWwsIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGFzc2lnbmVkIHRvIGl0LCB3aGljaCBpcyB0aGUgdGhpcmQgbmVjZXNzYXJ5IGNvbXBvbmVudC4gRm91cnRoLCB0aGUgUENDIG1haWxib3ggZHJpdmVyIGhhcyB0byBzdWNjZWVkIGluIGl0cyBwcm9iaW5nIHByb2Nlc3MsIGFuZCBhY3R1YWxseSByZWdpc3RlciB0aGUgY2hhbm5lbDsgSSBuZWVkIHRoYXQgZXN0YWJsaXNoZWQgbGluay4gRmlmdGgsIGBhY3BpX3JhczJfaW5pdGAgbmVlZHMgdG8gY29tZSBpbnRvIHBsYXksIHBhcnNlIHRoZSBSQVMyIHRhYmxlLCBmaW5kIHRoZSBQQ0MgY2hhbm5lbCwgYW5kIHRyaWdnZXIgdGhlIGNhbGwgdG8gYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGA7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIFNpeHRoLCBhbiBhdXhpbGlhcnkgZGV2aWNlIG11c3QgYmUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQ7IHRoaXMgaXMgYSBwcmVyZXF1aXNpdGUuXG5cbk5vdywgb25jZSB0aG9zZSBzdGVwcyBhcmUgY29tcGxldGVkLCBJJ2xsIGFycml2ZSBhdCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgc2VuZHMgYSBQQ0MgY29tbWFuZCB0byByZXRyaWV2ZSBwYXRyb2wgcGFyYW1ldGVycy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gcGF1c2UgYW5kIHNlcmlvdXNseSBjb25zaWRlciBob3cgdGhpcyBjb21tYW5kIGludGVyYWN0cyB3aXRoIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gSXQgc2VlbXMgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGhhcyB0byBhY3R1YWxseSAqcmVzcG9uZCosIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBub3QgdGltZSBvdXQuIE9yLCBwZXJoYXBzIGl0IGp1c3Qgd3JpdGVzIHNvbWV0aGluZyB0byBtZW1vcnkgYW5kIHRoZW4gcmluZ3MgYSBkb29yYmVsbCB0byBpbmRpY2F0ZSBjb21wbGV0aW9uPyBMZXQncyBjbGFyaWZ5IHRoaXMuICpBaGEhKiBgcmFzMl9zZW5kX3BjY19jbWRgIHBvbGxzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2l0aGluIHRoYXQgc2hhcmVkIG1lbW9yeSByZWdpb24uIEl0J3MgbG9va2luZyBmb3IgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYC4gU28sIGlmIHRoZXJlJ3Mgbm8gaGFyZHdhcmUgb3IgZW11bGF0b3IgcHJlc2VudCB0byBzZXQgdGhhdCBiaXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciwgYGNoZWNrX3BjY19jaGFuYCBpcyBnb2luZyB0byB0aW1lIG91dCBhbmQgcmV0dXJuIGFuIGVycm9yOyBpdCdzIGEgZGVhZCBlbmQuIEknZCBiZXR0ZXIgY29uZmlybSB0aGlzLCBsZXQgbWUgY2hlY2sgdGhlIGBjaGVja19wY2NfY2hhbmAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjI1LjAyNjAzNDAzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2NzcxNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3BjY19jaGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz03NT1zdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNzYtXFxuZHJpdmVycy9hY3BpL3JhczIuYzo3NzpzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MTQ0PWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMTU5LVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MTYwOlxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMTYxLVxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIzNC1cXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjM1OlxcdFxcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMjM2LVxcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjI1Ljg0MjgxMDY0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1Nzc2MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24geW91ciBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gYGNoZWNrX3BjY19jaGFuYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBjaGVja19wY2NfY2hhbmAgd2l0aGluIGBkcml2ZXJzL2FjcGkvcmFzMi5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgZXJyb3IgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBBQ1BJIFJBUyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBmaWxlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIGhhcmR3YXJlIGVycm9yIHJlcG9ydGluZyBvciBwb3RlbnRpYWxseSBldmVuIGNvbmZpZ3VyaW5nIHRoZSBQQ0MgZm9yIGludGVyLXByb2Nlc3NvciBjb21tdW5pY2F0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc29tZSBoYXJkd2FyZSByZXNvdXJjZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgUkFTIGFyY2hpdGVjdHVyZS4gSXMgaXQgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlzIGl0IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBBQ1BJIGV2ZW50cz8gV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgaXQncyBkZXNpZ25lZCB0byBkZXRlY3QsIGFuZCBob3cgZG9lcyBpdCByZXNwb25kIHRvIHRob3NlIGZhaWx1cmVzPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktcHJvY2Vzc29yIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGlmIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIEFDUEkgbmFtZXNwYWNlIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBmcm9tIGFuIHVucHJpdmlsZWdlZCB1c2VyIHNwYWNlLiBJJ20gYWxzbyB3b25kZXJpbmcgaWYgaXQgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudCBvciBzcGVjaWZpYyBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyBhbmQgd2hhdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0IHJlcXVpcmVtZW50cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6MzEuMTU4NTkwNDM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzc6XFx0c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbiAgODA6XFx0XFx0dTMyIGNhcF9zdGF0dXM7XFxuICA4MTpcXHRcXHR1MTYgc3RhdHVzO1xcbiAgODI6XFx0XFx0aW50IHJjO1xcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQvKlxcbiAgODU6XFx0XFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbiAgODY6XFx0XFx0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXFxuICA4NzpcXHRcXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cXG4gIDg4OlxcdFxcdCAqXFxuICA4OTpcXHRcXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXFxuICA5MDpcXHRcXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXFxuICA5MTpcXHRcXHQgKiBiaXQgaXMgc2V0LlxcbiAgOTI6XFx0XFx0ICovXFxuICA5MzpcXHRcXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIHN0YXR1cyxcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbiAgOTU6XFx0XFx0XFx0XFx0XFx0XFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cXHUwMDNlZGVhZGxpbmVfdXMpO1xcbiAgOTY6XFx0XFx0aWYgKHJjKSB7XFxuICA5NzpcXHRcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4gIDk4OlxcdFxcdFxcdFxcdHNzcGNjLVxcdTAwM2VwY2NfaWQsIHNzcGNjLVxcdTAwM2VsYXN0X2NtZCwgcmMpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDEwMTpcXHRcXHR9XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuIDEwNDpcXHRcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXFxcblxcXCIsXFxuIDEwNTpcXHRcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2lkLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWQpO1xcbiAxMDY6XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbiAxMDc6XFx0XFx0XFx0aW93cml0ZTE2KHN0YXR1cywgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuIDEwODpcXHRcXHRcXHRpb3dyaXRlMzIoMHgwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcXG4gMTA5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAxMTA6XFx0XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbiAxMTM6XFx0XFx0cm1iKCk7XFxuIDExNDpcXHRcXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuIDExNTpcXHRcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4gMTE2OlxcdFxcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcXG4gMTE3OlxcdFxcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XFxuIDExODpcXHRcXHRcXHRyYyA9IC1FUEVSTTtcXG4gMTE5OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjA6XFx0XFx0Y2FzZSBBQ1BJX1JBUzJfQlVTWTpcXG4gMTIxOlxcdFxcdFxcdHJjID0gLUVCVVNZO1xcbiAxMjI6XFx0XFx0XFx0YnJlYWs7XFxuIDEyMzpcXHRcXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XFxuIDEyNDpcXHRcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbiAxMjU6XFx0XFx0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzozMS4xNTg2NzA5MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NDkyMTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBDQyBTdGF0dXMgYW5kIFBvdGVudGlhbCBUaW1lb3V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNoZWNrX3BjY19jaGFuYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1c2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgcG9sbGluZyBgZ2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXNgIGZvciBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpZiB0aGVyZSdzIG5vIGFjdHVhbCBoYXJkd2FyZSBlbXVsYXRvciB0byBzZXQgdGhhdCBiaXQsIHdlJ3JlIGdvaW5nIHRvIHRpbWUgb3V0LCByaWdodD8gTWFrZXMgc2Vuc2UuXG5cblRoZW4gSSBnb3QgdG8gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBsaWtlLCB3aGF0IGlmIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBqdXN0IHJlZ3VsYXIgUkFNPyBTYXkgaXQncyBiZWluZyBwb2ludGVkIHRvIGJ5IGFuIEFDUEkgdGFibGUuIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzdGF0dXMgcmVnaXN0ZXIgY291bGQgdmVyeSB3ZWxsIGJlIHplcm8uIEluIHRoYXQgY2FzZSwgd2UnZCBpbW1lZGlhdGVseSB0aW1lIG91dCBvbiB0aGUgZmlyc3QgcmVhZC4gVWdoIVxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgcHJvYmxlbSBoZXJlLiBXaGF0IGlmIHRoZSBpbml0aWFsIHZhbHVlICpkb2VzKiBoYXBwZW4gdG8gaGF2ZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIHNldD8gVGhlbiBgY2hlY2tfcGNjX2NoYW5gIHdvdWxkIHN1Y2NlZWQgdGhlIHZlcnkgZmlyc3QgdGltZSwgd2hpY2ggd291bGQgYmUgd3JvbmcuIEFuZCB0aGVuIGByYXMyX3NlbmRfcGNjX2NtZGAgZ29lcyBhbmQgY2xlYXJzIHRoYXQgYml0IHdpdGggYGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cylgLlxuXG5TbywgaXQgZmxpcHMgdGhlIENNRCBDT01QTEVURSBiaXQgdG8gemVybywgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgaXQgcmluZ3MgdGhlIGRvb3JiZWxsIGFuZCB0aGVuIGNhbGxzIGBjaGVja19wY2NfY2hhbmAgYWdhaW4sIGJ1dCB0aGlzIHRpbWUsIHNpbmNlIHdlIGp1c3QgY2xlYXJlZCB0aGUgYml0LCBhbmQgdGhlcmUncyBubyBhY3R1YWwgaGFyZHdhcmUgdG8gc2V0IGl0IGJhY2ssIHRoZSBzZWNvbmQgYGNoZWNrX3BjY19jaGFuYCBjYWxsIGlzICpkZWZpbml0ZWx5KiBnb2luZyB0byB0aW1lIG91dCEgVGhhdCdzIGEgaHVnZSBwcm9ibGVtLlxuXG5JIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3Igc3BlY2lmaWNhbGx5IHdpdGhpbiBgcmFzMl9zZW5kX3BjY19jbWRgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6MzcuNDMzNTk0MDQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk4OlxcdFxcdFxcdFxcdHNzcGNjLVxcdTAwM2VtcGFyX2NvdW50ID0gc3NwY2MtXFx1MDAzZXBjY19tcGFyO1xcbiAxOTk6XFx0XFx0XFx0fVxcbiAyMDA6XFx0XFx0XFx0c3NwY2MtXFx1MDAzZW1wYXJfY291bnQtLTtcXG4gMjAxOlxcdFxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xcbiAyMDQ6XFx0XFx0aW93cml0ZTE2KGNtZCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZWNvbW1hbmQpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cXG4gMjA3OlxcdFxcdGlvd3JpdGUxNigwLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0LyogUmluZyBkb29yYmVsbCAqL1xcbiAyMTA6XFx0XFx0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXFx1MDAyNmNtZCk7XFxuIDIxMTpcXHRcXHQvKlxcbiAyMTI6XFx0XFx0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxcbiAyMTM6XFx0XFx0ICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS5cXG4gMjE0OlxcdFxcdCAqL1xcbiAyMTU6XFx0XFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbiAyMTY6XFx0XFx0XFx0ZGV2X3dhcm4ocmFzMl9jdHgtXFx1MDAzZWRldixcXG4gMjE3OlxcdFxcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4gMjE4OlxcdFxcdFxcdC8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqL1xcbiAyMTk6XFx0XFx0XFx0dmFsID0gaW9yZWFkMTYoXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuIDIyMDpcXHRcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuIDIyMTpcXHRcXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4gMjIyOlxcdFxcdFxcdHJldHVybiByYztcXG4gMjIzOlxcdFxcdH0gZWxzZSB7XFxuIDIyNDpcXHRcXHRcXHRyYyA9IDA7XFxuIDIyNTpcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdHNzcGNjLVxcdTAwM2VsYXN0X2NtZCA9IGNtZDtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0LypcXG4gMjMwOlxcdFxcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxcbiAyMzE6XFx0XFx0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xcbiAyMzI6XFx0XFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuIDIzMzpcXHRcXHQgKi9cXG4gMjM0OlxcdFxcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXFx1MDAzZXBjY19tcnR0KSB7XFxuIDIzNTpcXHRcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4gMjM2OlxcdFxcdFxcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpXFxuIDIzNzpcXHRcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGlmICghcGNjX2NoYW5uZWwtXFx1MDAzZW1ib3gtXFx1MDAzZXR4ZG9uZV9pcnEpXFxuIDI0MTpcXHRcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0cmV0dXJuIHJjO1xcbiAyNDQ6XFx0fVxcbiAyNDU6XFx0RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXFxcImFjcGlfcmFzMlxcXCIpO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHRzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjM3LjQzMzY2OTkzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTczODA4OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkFTMiBDb21tYW5kIEV4ZWN1dGlvbioqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHJhczJfc2VuZF9wY2NfY21kYCBoYXMgYSBjcnVjaWFsIHJvbGUg4oCTIHNwZWNpZmljYWxseSwgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCAqY2xlYXJzKiB0aGUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBiaXQuIFRoYXQncyBzdGVwIG9uZS4gIFRoZW4sIGl0IG1vdmVzIG9uIGJ5IGNhbGxpbmcgYG1ib3hfc2VuZF9tZXNzYWdlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuXG5cbk5vdywgaWYgdGhlIGNvbW1hbmQgKGBjbWRgKSBoYXBwZW5zIHRvIGJlIGBQQ0NfQ01EX0VYRUNfUkFTMmAg4oCTIGFuZCwgaW4gdGhpcyBzcGVjaWZpYyBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgY29udGV4dCwgaXQgKmlzKiDigJMgdGhlbiB0aGUgY29kZSBjYWxscyBgY2hlY2tfcGNjX2NoYW5gIGFnYWluLiBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBlbXVsYXRvciBwcmVzZW50IHRvIG1hbnVhbGx5IHRvZ2dsZSB0aGUgYFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFYCBiaXQgYmFjayB0byAnMScsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGNoZWNrX3BjY19jaGFuYCBpcyBnb2luZyB0byB0aW1lIG91dC4gVGhhdCB0aW1lb3V0IGlzIGFuIGVycm9yIGNvbmRpdGlvbi4gVGhlcmVmb3JlLCBpZiBgY2hlY2tfcGNjX2NoYW5gIHRpbWVzIG91dCwgaXQncyBwcmV0dHkgbXVjaCBhIGd1YXJhbnRlZSB0aGF0IGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCB3aWxsICpmYWlsKi5cblxuSSdtIGZhaXJseSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgaXRzZWxmLCBhbmQgSSdsbCBmaW5kIGl0IHdpdGhpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo0Mi4wMDc0ODA4OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTk6XFx0c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4gIDYyOlxcdFxcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4gIDYzOlxcdFxcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbiAgNjc6XFx0XFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4gIDY4OlxcdFxcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4gIDY5OlxcdFxcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4gIDcwOlxcdFxcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuICA3MTpcXHRcXHRpZiAocmV0KSB7XFxuICA3MjpcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcXFxuXFxcIik7XFxuICA3MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNzQ6XFx0XFx0fVxcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuICA3NzpcXHRcXHRyYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbiAgNzk6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuICA4MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4gIDgxOlxcdFxcdHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnMgPSBGSUVMRF9HRVQoUkFTMl9QU19TQ19IUlNfT1VUX01BU0ssXFxuICA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4gIDgzOlxcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4gIDg0OlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbiAgODU6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbiAgODY6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbiAgODc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA4ODpcXHRcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGlmICAoaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuZmxhZ3MpIFxcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcXG4gIDkxOlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IHRydWU7XFxuICA5MjpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuICA5MzpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7XFxuICA5NDpcXHRcXHR9IGVsc2Uge1xcbiAgOTU6XFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdHJldHVybiAwO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0XFxuIDEwMTpcXHQvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuIDEwMjpcXHRzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4gMTA1OlxcdFxcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4gMTA2OlxcdFxcdGludCByZXQ7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDIyOjI3OjQyLjAwNzU2MTc1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3MjAzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBFcnJvciBQcm9wYWdhdGlvbioqXG5cblJpZ2h0LCBzbyBpZiBgcmFzMl9zZW5kX3BjY19jbWRgIGhhcyBhIHByb2JsZW0gYW5kIHJldHVybnMgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAgaXMgZ29pbmcgdG8gcmVmbGVjdCB0aGF0IGJ5IHJldHVybmluZyBhbiBlcnJvciBhcyB3ZWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcm9vdCBjYXVzZSBoZXJlLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNhc2NhZGluZyBmYWlsdXJlLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgZmxvdyBvZiB0aGlzLiBNeSBmaXJzdCBtb3ZlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYC4gSSBuZWVkIHRvIGlkZW50aWZ5ICpldmVyeSogcGxhY2UgaW4gdGhlIGNvZGViYXNlIHdoZXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBvaW50cyBhbmQgYXNzZXNzIHRoZSBicm9hZGVyIHN5c3RlbSBpbXBhY3Qgb2YgdGhhdCBlcnJvciBwcm9wYWdhdGlvbiBmcm9tIGByYXMyX3NlbmRfcGNjX2NtZGAuIExldCdzIGdldCB0byB0aGUgY2FsbCByZWZlcmVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI1NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6NDUuNzc0NzY3NDEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRcXHQgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVJcXG4gNTExOlxcdFxcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxcbiA1MTI6XFx0XFx0ICovXFxuIDUxMzpcXHRcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4gNTE0OlxcdFxcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbiA1MTU6XFx0XFx0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xcbiA1MTY6XFx0XFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbiA1MTc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNTE4OlxcdFxcdH1cXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbiA1MjE6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplID0gbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XFxuIDUyMjpcXHRcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4gNTIzOlxcdFxcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbiA1MjQ6XFx0XFx0aWYgKHJldClcXG4gNTI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXFxuIDUyODpcXHRcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuIDUyOTpcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycztcXG4gNTMwOlxcdFxcdGVsc2VcXG4gNTMxOlxcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRzcHJpbnRmKHNjcnViX25hbWUsIFxcXCJhY3BpX3Jhc19tZW0lZFxcXCIsIGF1eGRldi1cXHUwMDNlaWQpO1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHRcXHRyYXNfZmVhdHVyZXMuZnRfdHlwZVxcdD0gUkFTX0ZFQVRfU0NSVUI7XFxuIDUzNjpcXHRcXHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcXHQ9IDA7XFxuIDUzNzpcXHRcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuIDUzODpcXHRcXHRyYXNfZmVhdHVyZXMuY3R4XFx0PSByYXMyX2N0eDtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWRydl9hY3RpdmUgPSB0cnVlO1xcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcXHUwMDI2cmFzX2ZlYXR1cmVzKTtcXG4gNTQzOlxcdH1cXG4gNTQ0OlxcdFxcbiA1NDU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xcbiA1NDY6XFx0XFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4gNTQ3OlxcdFxcdHsgfVxcbiA1NDg6XFx0fTtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdHN0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuIDU1MzpcXHRcXHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxcbiA1NTQ6XFx0XFx0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxcbiA1NTU6XFx0XFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuIDU1NjpcXHRcXHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXFxuIDU1NzpcXHR9O1xcbiA1NTg6XFx0bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4gNTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo0NS43NzQ4NTI2MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUzNjk1NzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIENvZGUgaXMgVW5mdXp6YWJsZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gSWYgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgIGVycm9ycywgdGhlbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYCBmYWlscywgd2hpY2ggbWVhbnMgdGhlIEVEQUMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCBtZWFucyB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiBpcyBuZXZlciBldmVuIHJlYWNoZWQuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZXJlJ3Mgbm8gd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBgUENDX1NUQVRVU19DTURfQ09NUExFVEVgIGJpdCBhZnRlciBgcmFzMl9zZW5kX3BjY19jbWRgIGNsZWFycyBpdCwgbWFraW5nIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCBmYWlsIEVWRVJZIHRpbWUuXG5cbkkgY29uc2lkZXJlZCBhIGZldyBlZGdlIGNhc2VzLiBDb3VsZCBhIHN5emthbGxlci1pbmplY3RlZCBBQ1BJIHRhYmxlIHBvaW50IHRoZSBQQ0Mgc2hhcmVkIG1lbW9yeSB0byBhIHJlYWwsIHJlc3BvbmRpbmcgZGV2aWNlPyBJdOKAmXMgcG9zc2libGUsIHN1cmUsIGJ1dCBoaWdobHkgdW5saWtlbHkgdGhhdCBzdWNoIGEgZGV2aWNlIHdvdWxkIHBlcmZlY3RseSBlbXVsYXRlIFBDQyBjb21tYW5kIGNvbXBsZXRpb24gYW5kIHNldCB0aGUgYml0IGNvcnJlY3RseS4gU28sIGFsbW9zdCBjZXJ0YWlubHksIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlLiBObyBwcm9iZSBtZWFucyBubyBzeXNmcyBpbnRlcmZhY2VzLiBUaGVuIHRoZSBjb3JlIGxvZ2ljIEknbSBsb29raW5nIGF0IGluIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYCwgYW5kIHNvIG9uLCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5Db3VsZCBzeXprYWxsZXIgaW5qZWN0IGEgZmF1bHQ/IE5vLCB0aGF0J3Mgbm90IGl0cyB0eXBpY2FsIGFwcHJvYWNoIHVubGVzcyB0aGVyZSdzIGFuIGV4cGxpY2l0IHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGUgaGFyZHdhcmUgKGxpa2UgdGhvc2UgaW4gYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBldGMuKS4gQW5kIHRoZXJlJ3MgZGVmaW5pdGVseSBubyBQQ0MgZW11bGF0b3IgaW4gdGhlIGtlcm5lbC4gU28sIGFnYWluLCB0aGlzIGNvZGUncyB1bnJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkkgaGFkIHRvIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcGF0aHMgdG8gdGhlIEVEQUMgc2NydWIgc3lzZnMgY2hhbmdlcy4gVGhlIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AgZmlsZSBhZGRzIGFuIGBlbmFibGVfZGVtYW5kYCBhdHRyaWJ1dGUsIHdoaWNoIGlzIHZpc2libGUgb25seSB3aGVuIGBvcHMtXHUwMDNlZ2V0X2VuYWJsZWRfb2RgIGlzIHNldC4gUmlnaHQgbm93LCBvbmx5IGBhY3BpX3JhczIuY2Agc2V0cyBgZ2V0X2VuYWJsZWRfb2RgLiBUaGF0IG1lYW5zIHRoZSBzeXNmcyBmaWxlIGlzbid0IGNyZWF0ZWQgZm9yIGFueSBvdGhlciBkcml2ZXIuIFNvIHRoaXMgRURBQyBzY3J1YiBzdHVmZiBpcyBhbHNvIHVucmVhY2hhYmxlLlxuXG5Ob3cgSSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IGV4cGxpY2l0bHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGludm9sdmVzIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBTaW5jZSB0aGlzIHJlcXVpcmVzIEFDUEkgUkFTMiBhbmQgUENDIGhhcmR3YXJlLCB3aGljaCBpcyAqbm90KiBlbXVsYXRlZCBpbiBRRU1VL0dDRSwgaXQncyBpbXBvc3NpYmxlIHRvIGhpdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgZGlkIGEgcXVpY2sgc2VhcmNoIGZvciBgcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsYCBpbiBgdG9vbHMvYCBhbmQgYGRyaXZlcnMvbWFpbGJveC9gIGJ1dCBmb3VuZCBubyBtb2NrcyBvciBlbXVsYXRpb25zLiBObyBvdGhlciBtb2NrLiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQyMjoyNzo1NS4zMTE4MTE3MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI3NTkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENDX1NUQVRVU19DTURfQ09NUExFVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz03Nz1zdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtOTMtXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuZHJpdmVycy9hY3BpL3JhczIuYzo5NDpcXHRcXHRcXHRcXHRcXHRzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTk1LVxcdFxcdFxcdFxcdFxcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXFx1MDAzZWRlYWRsaW5lX3VzKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MTQ0PWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMjE5LVxcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmM6MjIwOlxcdFxcdHZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTtcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTIyMS1cXHRcXHRpb3dyaXRlMTYodmFsLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM9MTg2PXN0YXRpYyBpbnQgaGlzaV91bmNvcmVfY21kX3NlbmQoc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSxcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMjI5LVxcdHJjID0gcmVhZHdfcG9sbF90aW1lb3V0KFxcdTAwMjZhZGRyLVxcdTAwM2VoZWFkLnN0YXR1cywgc3RhdHVzLFxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MjMwOlxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IChQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSB8XFxuZHJpdmVycy9kZXZmcmVxL2hpc2lfdW5jb3JlX2ZyZXEuYy0yMzEtXFx0XFx0XFx0XFx0XFx0ICBQQ0NfU1RBVFVTX0VSUk9SKSxcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz0xMjQ9c3RhdGljIGludCB4Z2VuZV9od21vbl9wY2NfcmQoc3RydWN0IHhnZW5lX2h3bW9uX2RldiAqY3R4LCB1MzIgKm1zZylcXG4tLVxcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy0xNDUtXFx0dmFsID0gbGUxNl90b19jcHUoUkVBRF9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpKTtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6MTQ2OlxcdHZhbCBcXHUwMDI2PSB+UENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTE0Ny1cXHRXUklURV9PTkNFKGdlbmVyaWNfY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMsIGNwdV90b19sZTE2KHZhbCkpO1xcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTUyMj1zdGF0aWMgdm9pZCB4Z2VuZV9od21vbl9wY2NfcnhfY2Ioc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgdm9pZCAqbXNnKVxcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jLTU2Mi1cXHRcXHRpZiAoeGdlbmVfd29yZF90c3RfYW5kX2NscihcXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyxcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6NTYzOlxcdFxcdFxcdFxcdFxcdCAgIFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFKSkge1xcbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy01NjQtXFx0XFx0XFx0Y3R4LVxcdTAwM2VzeW5jX21zZy5tc2cgPSAoKHUzMiAqKW1zZylbMF07XFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz0xNDY9c3RhdGljIHZvaWQgc2xpbXByb19pMmNfcGNjX3J4X2NiKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIHZvaWQgKm1zZylcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTE1Ny1cXHRpZiAoeGdlbmVfd29yZF90c3RfYW5kX2NscihcXHUwMDI2Z2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyxcXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzoxNTg6XFx0XFx0XFx0XFx0ICAgUENDX1NUQVRVU19DTURfQ09NUExFVEUpKSB7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTU5LVxcdFxcdG1zZyA9IGdlbmVyaWNfY29tbV9iYXNlICsgMTtcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTE2OT1zdGF0aWMgdm9pZCBzbGltcHJvX2kyY19wY2NfdHhfcHJlcGFyZShzdHJ1Y3Qgc2xpbXByb19pMmNfZGV2ICpjdHgsIHUzMiAqbXNnKVxcbi0tXFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTgzLVxcdHN0YXR1cyA9IGxlMTZfdG9fY3B1KFJFQURfT05DRShnZW5lcmljX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKSk7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmM6MTg0OlxcdHN0YXR1cyBcXHUwMDI2PSB+UENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtMTg1LVxcdFdSSVRFX09OQ0UoZ2VuZXJpY19jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgY3B1X3RvX2xlMTYoc3RhdHVzKSk7XFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MjMyPXN0YXRpYyBpbnQgaGNjc193YWl0X2NtZF9jb21wbGV0ZV9ieV9wb2xsKHN0cnVjdCBoY2NzX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDQtXFx0cmV0ID0gcmVhZHdfcG9sbF90aW1lb3V0KFxcdTAwMjZjb21tX2Jhc2UtXFx1MDAzZXN0YXR1cywgc3RhdHVzLFxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoyNDU6XFx0XFx0XFx0XFx0IHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0yNDYtXFx0XFx0XFx0XFx0IEhDQ1NfUE9MTF9TVEFUVVNfVElNRV9JTlRFUlZBTF9VUyxcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD0xMj1zdHJ1Y3QgcGNjX21ib3hfY2hhbiB7XFxuLS1cXG5pbmNsdWRlL2FjcGkvcGNjLmgtMjYtLyogR2VuZXJpYyBDb21tdW5pY2F0aW9ucyBDaGFubmVsIFN0YXR1cyBGaWVsZCAqL1xcbmluY2x1ZGUvYWNwaS9wY2MuaDoyNzojZGVmaW5lIFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFXFx0XFx0QklUKDApXFxuaW5jbHVkZS9hY3BpL3BjYy5oLTI4LSNkZWZpbmUgUENDX1NUQVRVU19TQ0lfRE9PUkJFTExcXHRcXHRCSVQoMSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjc6NTcuMTg0NTc1NjM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTYzNzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBRRU1VOiBBIFdvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIHRoZSB2ZXJkaWN0IGlzIHByZXR0eSBjbGVhcjogd2UncmUgZGVhbGluZyB3aXRoIHVucmVhY2hhYmxlIGNvZGUuIFRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhlIGNvcmUgbG9naWMgaW4gdGhpcyBlbnZpcm9ubWVudC4gSXQncyBmcnVzdHJhdGluZywgcmVhbGx5LiBUaGUgcm9vdCBjYXVzZSBpcyB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIuIFRoaXMgZHJpdmVyICpkZW1hbmRzKiBhIHBoeXNpY2FsIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKSBtYWlsYm94IGFuZCB0aGUgc3VwcG9ydGluZyBBQ1BJIFJBUzIgdGFibGVzLiBBbmQgYXMgd2Uga25vdywgUUVNVSBhbmQgb3RoZXIgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIGRvbid0IGVtdWxhdGUgdGhvc2UuIFNvLCBpdCdzIGEgZGVhZCBlbmQuIEJlY2F1c2Ugb2YgdGhpcyBjcml0aWNhbCBkZXBlbmRlbmN5LCB0aGUgY29yZSBsb2dpYyBpcyBzaW1wbHkgbm90IHJlYWNoYWJsZS5cblxuQmVmb3JlIGdpdmluZyB1cCBjb21wbGV0ZWx5LCBJIHF1aWNrbHkgc2Nhbm5lZCB0byBzZWUgaWYgKmFueSogcGFydCBvZiB0aGUgcGF0Y2ggY291bGQgYmUgZXhwbG9pdGVkLiBJIGxvb2tlZCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCwgd2hlcmUgdGhlcmUgd2VyZSBtb2RpZmljYXRpb25zIHRvIGBzY3J1Yl9hdHRyX3Zpc2libGVgIGFuZCBgc2NydWJfY3JlYXRlX2Rlc2NgLiBIb3dldmVyLCB0aG9zZSBjaGFuZ2VzIGFyZSBvbmx5IHRyaWdnZXJlZCBpZiBhIGRyaXZlciBzZXRzIHRoZSBgZ2V0X2VuYWJsZWRfb2RgIGZsYWcuIEJ1dCwgb25seSB0aGUgYGFjcGlfcmFzMmAgZHJpdmVyIHNldHMgdGhhdC4gU2luY2UgYGFjcGlfcmFzMmAgaXMgdG90YWxseSB1bnJlYWNoYWJsZS4uLiB0aG9zZSBjaGFuZ2VzIGFyZSBhbHNvIGRlYWQuIFRoZSByZXN0IG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGRvY3VtZW50YXRpb24gYW5kIEtjb25maWcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYnV0IG5vdCBpbW1lZGlhdGVseSBmdXp6ZXIgY2FuZGlkYXRlcy5cblxuVGhlcmVmb3JlLCBkZWNsYXJpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS4gVGhlIHByb3ZpZGVkIHJlYXNvbmluZyBhY2N1cmF0ZWx5IGRlc2NyaWJlcyB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1OSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMjI6Mjg6MDMuNzAwOTU3MDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciBhbmQgYWRkcyBkZW1hbmQgc2NydWJiaW5nIHN1cHBvcnQgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLiBUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCB0aGUgUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIChQQ0MpIG1haWxib3ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuIFNpbmNlIFBDQyBoYXJkd2FyZSBhbmQgdGhlIGFzc29jaWF0ZWQgQUNQSSB0YWJsZXMgYXJlIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgKHNwZWNpZmljYWxseSB0aW1pbmcgb3V0IHdoaWxlIHBvbGxpbmcgZm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb24pLiBDb25zZXF1ZW50bHksIHRoZSBjb3JlIGxvZ2ljIGFuZCB0aGUgbmV3IHN5c2ZzIGludGVyZmFjZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyIGFuZCBhZGRzIGRlbWFuZCBzY3J1YmJpbmcgc3VwcG9ydCB0byB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgbWFpbGJveCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4gU2luY2UgUENDIGhhcmR3YXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBBQ1BJIHRhYmxlcyBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSAoc3BlY2lmaWNhbGx5IHRpbWluZyBvdXQgd2hpbGUgcG9sbGluZyBmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbikuIENvbnNlcXVlbnRseSwgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlcyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownr4dh[1] Phase: Running StartedAt: 2026-07-04 22:28:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownr4dh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-04 22:28:15 +0000 UTC FinishedAt: 2026-07-04 22:28:23 +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,}