Name: series-workflowsqnx6 Phase: Failed StartedAt: 2026-06-27 01:30:16 +0000 UTC FinishedAt: 2026-06-27 01:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsqnx6[0] Phase: Succeeded StartedAt: 2026-06-27 01:30:16 +0000 UTC FinishedAt: 2026-06-27 01:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsqnx6[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 01:30:16 +0000 UTC FinishedAt: 2026-06-27 01:39:56 +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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGZlNjAxMTBkY2VkN2E5NmM3OTNjN2NkM2MwYzRmMjY0OTQ5ZDBmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDAxOjM5OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Yi4uODhjNmM4MDQ2ZGRlYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTEsNiAmIzQzOzExLDcgQEAgTElCS1ZNICYjNDM7PSBsaWIva3ZtX3V0aWwuY1xuIExJQktWTSAmIzQzOz0gbGliL2xydV9nZW5fdXRpbC5jXG4gTElCS1ZNICYjNDM7PSBsaWIvbWVtc3RyZXNzLmNcbiBMSUJLVk0gJiM0Mzs9IGxpYi9ndWVzdF9zcHJpbnRmLmNcbiYjNDM7TElCS1ZNICYjNDM7PSBsaWIvcHJvY191dGlsLmNcbiBMSUJLVk0gJiM0Mzs9IGxpYi9yYnRyZWUuY1xuIExJQktWTSAmIzQzOz0gbGliL3NwYXJzZWJpdC5jXG4gTElCS1ZNICYjNDM7PSBsaWIvdGVzdF91dGlsLmNcbkBAIC0xNTcsNiAmIzQzOzE1OCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGlycV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3RlYWxfdGltZVxuQEAgLTI1OSw2ICYjNDM7MjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcbiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS5cbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcbiYjNDM7aW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rXG4gXG4gSU5TVEFMTF9IRFJfUEFUSCA9ICQodG9wX3NyY2RpcikvdXNyXG4gTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvXG5AQCAtMzEzLDcgJiM0MzszMTYsOSBAQCBMSUJLVk1fUyA6PSAkKGZpbHRlciAlLlMsJChMSUJLVk0pKVxuIExJQktWTV9DX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fQykpXG4gTElCS1ZNX1NfT0JKIDo9ICQocGF0c3Vic3QgJS5TLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TKSlcbiBMSUJLVk1fU1RSSU5HX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fU1RSSU5HKSlcbi1MSUJLVk1fT0JKUyA9ICQoTElCS1ZNX0NfT0JKKSAkKExJQktWTV9TX09CSikgJChMSUJLVk1fU1RSSU5HX09CSikgJChMSUJDR1JPVVBfTylcbiYjNDM7TElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopXG4mIzQzO0xJQktWTV9PQkpTICYjNDM7PSAkKExJQkNHUk9VUF9PKVxuJiM0MztMSUJLVk1fT0JKUyAmIzQzOz0gJChMSUJWRklPX08pXG4gU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpXG4gU1BMSVRfVEVTVF9HRU5fT0JKIDo9ICQocGF0c3Vic3QgJSwgJChPVVRQVVQpLyQoQVJDSCkvJS5vLCAkKFNQTElUX1RFU1RTKSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggOTBjNDc1YTYxYjIyYjYuLmY4YjAyNTk3ODk3YmQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuQEAgLTg1LDcgJiM0Mzs4NSw3IEBAIHN0YXRpYyB1MzIgdGVzdF9nZXRfcGNwdSh2b2lkKVxuIFx0Y3B1X3NldF90IG9ubGluZV9jcHVzZXQ7XG4gXG4gXHRucHJvY19jb25mID0gZ2V0X25wcm9jc19jb25mKCk7XG4tXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3NldF90KSwgXHUwMDI2b25saW5lX2NwdXNldCk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcdTAwMjZvbmxpbmVfY3B1c2V0KTtcbiBcbiBcdC8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovXG4gXHRkbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jXG5pbmRleCBmNzYyNWViNzExZDZiOC4uZDljOTM3N2E2MzI1NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xuQEAgLTEwMzksNyAmIzQzOzEwMzksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKVxuIFx0XHRleGl0KEtTRlRfU0tJUCk7XG4gXG4tXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcdTAwMjZkZWZhdWx0X2NwdXNldCk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksIFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcbiBcdHNldF9jb3VudGVyX2RlZmF1bHRzKCk7XG4gXG4gXHRpZiAodGVzdF9hcmdzLnRlc3RfdmlydHVhbCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuaW5kZXggMzAyYzQ5MjNkMDkzMGYuLmY4YjNkMGI2ODgzMGQ3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbkBAIC01Nyw3ICYjNDM7NTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLFxuIFx0XHRzdHJ1Y3QgdWZmZF9tc2cgKm1zZylcbiB7XG4tXHRwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbiYjNDM7XHRwaWRfdCB0aWQgPSBrdm1fZ2V0dGlkKCk7XG4gXHR1NjQgYWRkciA9IG1zZy1cdTAwM2VhcmcucGFnZWZhdWx0LmFkZHJlc3M7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuaW5kZXggZWY3NzlmYTkxODI3YzkuLjdjNWFiZTFhZTllMDE4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGludCBvcHQ7XG4gXG4gXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXG4tXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XG4mIzQzO1x0a3ZtX3JhbmRvbV9zZWVkID0gMTtcbiBcbiBcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XG4gXHRcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcbkBAIC0zNTcsNyAmIzQzOzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0cC5waHlzX29mZnNldCA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4tXHRcdFx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwmIzM0O1JhbmRvbSBzZWVkXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwmIzM0O1JhbmRvbSBzZWVkXCYjMzQ7LCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7cyYjMzk7OlxuIFx0XHRcdHAuYmFja2luZ19zcmMgPSBwYXJzZV9iYWNraW5nX3NyY190eXBlKG9wdGFyZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuaW5kZXggNzRjYTA5NmJmOTc2YjUuLmU4NDE5ZDdkYTFlYWI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR3aGlsZSAoIVJFQURfT05DRSh2Y3B1X3N0b3ApKSB7XG4gXHRcdFx0YWRkciA9IGd1ZXN0X3Rlc3RfdmlydF9tZW07XG4tXHRcdFx0YWRkciAmIzQzOz0gKGd1ZXN0X3JhbmRvbV91NjQoXHUwMDI2Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbiYjNDM7XHRcdFx0YWRkciAmIzQzOz0gKGt2bV9yYW5kb21fdTY0KFx1MDAyNmt2bV9ybmcpICUgZ3Vlc3RfbnVtX3BhZ2VzKVxuIFx0XHRcdFx0KiBndWVzdF9wYWdlX3NpemU7XG4gXHRcdFx0YWRkciA9IGFsaWduX2Rvd24oYWRkciwgaG9zdF9wYWdlX3NpemUpO1xuIFxuQEAgLTcwOCw4ICYjNDM7NzA4LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcbiBcdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XG4gXG4tXHRcdFdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7XG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTtcbiBcbiBcdFx0ZGlydHlfcmluZ19wcmV2X2l0ZXJhdGlvbl9sYXN0X3BhZ2UgPSBkaXJ0eV9yaW5nX2xhc3RfcGFnZTtcbiBcdFx0V1JJVEVfT05DRShkaXJ0eV9yaW5nX3ZjcHVfcmluZ19mdWxsLCBmYWxzZSk7XG5AQCAtNzc1LDE2ICYjNDM7Nzc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRcdCAqIHdyaXRpbmcgbWVtb3J5IGR1cmluZyB2ZXJpZmljYXRpb24sIHBhZ2VzIHRoYXQgdGhpcyB0aHJlYWRcbiBcdFx0ICogc2VlcyBhcyBjbGVhbiBtYXkgYmUgd3JpdHRlbiB3aXRoIHRoaXMgaXRlcmF0aW9uJiMzOTtzIHZhbHVlLlxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbiYjNDM7XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCB2Y3B1X3N0b3AsIHRydWUpO1xuIFx0XHRzZW1fd2FpdChcdTAwMjZzZW1fdmNwdV9zdG9wKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogQ2xlYXIgdmNwdV9zdG9wIGFmdGVyIHRoZSB2Q1BVIHRocmVhZCBoYXMgYWNrbm93bGVkZ2UgdGhlXG4gXHRcdCAqIHN0b3AgcmVxdWVzdCBhbmQgaXMgd2FpdGluZywgaS5lLiBpcyBkZWZpbml0ZWx5IG5vdCBydW5uaW5nIVxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIGZhbHNlKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHZjcHVfc3RvcCk7XG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCBmYWxzZSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFN5bmMgdGhlIG51bWJlciBvZiB3cml0ZXMgcGVyZm9ybWVkIGJlZm9yZSB2ZXJpZmljYXRpb24sIHRoZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbmluZGV4IDZjYjNiZWQyOWI4MWFiLi41ZGFlNjE0M2RkYjA0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfdXRpbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQVBfQVJHUzAobSwuLi4pXG5AQCAtODMsMTEgJiM0Mzs4NCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fZHVwKGludCBmZClcbiBcdHJldHVybiBuZXdfZmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbiYjNDM7fVxuJiM0MztcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtdW5tYXAsIDIsIHZvaWQgKiwgbWVtLCBzaXplX3QsIHNpemUpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGNsb3NlLCAxLCBpbnQsIGZkKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmYWxsb2NhdGUsIDQsIGludCwgZmQsIGludCwgbW9kZSwgbG9mZl90LCBvZmZzZXQsIGxvZmZfdCwgbGVuKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKG1hZHZpc2UsIDMsIHZvaWQgKiwgYWRkciwgc2l6ZV90LCBsZW5ndGgsIGludCwgYWR2aWNlKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuICNkZWZpbmUga3ZtX2ZyZWVfZmQoZmQpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggMDRhOTEwMTY0YTI5NmEuLmIzOWU3MTNjMzBhNDY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O0ZhaWxlZCB0byBzZXQgdGhyZWFkIGFmZmluaXR5IHRvIHBDUFUgJiMzOTsldSYjMzk7XCYjMzQ7LCBjcHUpO1xuIH1cbiBcbiYjNDM7dm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxuIHtcbiBcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcbkBAIC0xMTM4LDYgJiM0MzsxMTQwLDE2IEBAIHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHVuc2lnbmVkIGludCBudW1fZ3Vlc3RfcGFnZXMpXG4gXHRtZW1jcHkoXHUwMDI2KGcpLCBfcCwgc2l6ZW9mKGcpKTtcdFx0XHRcdFxcXG4gfSlcbiBcbiYjNDM7I2RlZmluZSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoX3ZtLCBfdmFyaWFibGUpICh7XHRcdFxcXG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdChfdm0sIF92YXJpYWJsZSk7XHRcdFx0XFxcbiYjNDM7XHRSRUFEX09OQ0UoX3ZhcmlhYmxlKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgV1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QoX3ZtLCBfdmFyaWFibGUsIF92YWx1ZSkgZG8ge1x0XFxcbiYjNDM7XHRXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTtcdFx0XHRcdFxcXG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1x0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuIC8qXG4gICogV3JpdGUgYSBnbG9iYWwgdmFsdWUsIGJ1dCBvbmx5IGluIHRoZSBWTSYjMzk7cyAoZ3Vlc3QmIzM5O3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkXG4gICogZm9yIFwmIzM0O2dsb2JhbHNcJiMzNDsgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOyNpZm5kZWYgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4mIzQzOyNkZWZpbmUgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7dW5zaWduZWQgaW50IHZmaW9fbXNpeF90b19ob3N0X2lycShjb25zdCBjaGFyICp2ZmlvX2RldmljZV9iZGYsIGludCBtc2l4KTtcbiYjNDM7XG4mIzQzO3ZvaWQgcHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMDgsMzIgJiM0MzsxMDgsMzUgQEAgc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX3N1YihzdHJ1Y3QgdGltZXNwZWMgdHMxLCBzdHJ1Y3QgdGltZXNwZWMgdHMyKTtcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpO1xuIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19kaXYoc3RydWN0IHRpbWVzcGVjIHRzLCBpbnQgZGl2aXNvcik7XG4gXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7XG4mIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHtcbiBcdHUzMiBzZWVkO1xuIH07XG4gXG4tZXh0ZXJuIHUzMiBndWVzdF9yYW5kb21fc2VlZDtcbi1leHRlcm4gc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XG4mIzQzO2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xuJiM0MztleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIG5ld19ndWVzdF9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xuJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgX19ndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSxcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fa3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSxcbiBcdFx0XHRcdCAgICAgICB1OCBwZXJjZW50KVxuIHtcbi1cdHJldHVybiAoZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSkgJSAxMDApIFx1MDAzYyBwZXJjZW50O1xuJiM0MztcdHJldHVybiAoa3ZtX3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcdTAwM2MgcGVyY2VudDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGd1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRyZXR1cm4gX19ndWVzdF9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuJiM0MztcdHJldHVybiBfX2t2bV9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBndWVzdF9yYW5kb21fdTY0KHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0cmV0dXJuICgodTY0KWd1ZXN0X3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBndWVzdF9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuJiM0MztcdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO1xuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbkBAIC01NSw5ICYjNDM7NTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaClcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRjb25zdCB0eXBlb2YobWVtKSB2YWwgPSAoX192YWwpO1x0XHRcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRpZiAoIWlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZCB8fCBndWVzdF9yYW5kb21fYm9vbChcdTAwMjZndWVzdF9ybmcpKSB7XHRcdFxcXG4mIzQzO1x0aWYgKCFpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQgfHwga3ZtX3JhbmRvbV9ib29sKFx1MDAyNmt2bV9ybmcpKSB7XHRcdFxcXG4gXHRcdChtZW0pID0gdmFsO1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0fSBlbHNlIGlmIChndWVzdF9yYW5kb21fYm9vbChcdTAwMjZndWVzdF9ybmcpKSB7XHRcdFx0XHRcdFxcXG4mIzQzO1x0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXHUwMDI2a3ZtX3JuZykpIHtcdFx0XHRcdFx0XFxcbiBcdFx0X19hc21fXyBfX3ZvbGF0aWxlX18oS1ZNX0ZFUCBcJiMzNDttb3YgJTEsICUwXCYjMzQ7XHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICA6IFwmIzM0OyYjNDM7bVwmIzM0OyAobWVtKVx0XHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsgKHZhbCkgOiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMzYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2NfdXRpbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNpbmZvLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgdGltZW91dF9ucyA9IDJVTEwgKiAxMDAwICogMTAwMCAqIDEwMDA7XG4mIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdO1xuJiM0MztzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XG4mIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX25taVtLVk1fTUFYX1ZDUFVTXTtcbiYjNDM7c3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTtcbiYjNDM7c3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xuJiM0MztzdGF0aWMgYm9vbCBkb25lO1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVx0XFxcbiYjNDM7XHRTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoKF9fdmNwdSktXHUwMDNldm0sIGd1ZXN0X3JlY2VpdmVkX2lycVsoX192Y3B1KS1cdTAwM2VpZF0pXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSlcdFxcXG4mIzQzO1x0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVx1MDAzZXZtLCBndWVzdF9yZWNlaXZlZF9ubWlbKF9fdmNwdSktXHUwMDNlaWRdKVxuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQoX192Y3B1LCBfX25taSlcdFxcXG4mIzQzO1x0KChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBndWVzdF9nZXRfdmNwdV9pZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHgyYXBpYylcbiYjNDM7XHRcdHJldHVybiB4MmFwaWNfcmVhZF9yZWcoQVBJQ19JRCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHhhcGljX3JlYWRfcmVnKEFQSUNfSUQpIFx1MDAzZVx1MDAzZSAyNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfaXJxX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3JlY2VpdmVkX2lycVtndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh4MmFwaWMpXG4mIzQzO1x0XHR4MmFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR4YXBpY193cml0ZV9yZWcoQVBJQ19FT0ksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3RfcmVjZWl2ZWRfbm1pW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHgyYXBpYylcbiYjNDM7XHRcdHgyYXBpY19lbmFibGUoKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR4YXBpY19lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0c3RpX25vcCgpO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpXG4mIzQzO1x0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XG4mIzQzO1x0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19zZXR1cF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVM7XG4mIzQzO1x0Y29uc3QgaW50IHByb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFO1xuJiM0MztcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yO1xuJiM0MztcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb247XG4mIzQzO1xuJiM0MztcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBkZXZpY2UmIzQzO2RyaXZlciBjYW4gYWN0dWFsbHkgc2VuZCBNU0lzLiAqL1xuJiM0MztcdFRFU1RfUkVRVUlSRShkZXZpY2UtXHUwMDNlZHJpdmVyLm9wcyk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGRldmljZS1cdTAwM2Vkcml2ZXIub3BzLVx1MDAzZXNlbmRfbXNpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgdXAgYSBETUEtYWJsZSByZWdpb24gZm9yIHRoZSBkcml2ZXIgdG8gdXNlLiAgIFZlcnkgZmV3IGRldmljZXNcbiYjNDM7XHQgKiBwcm92aWRlIGEgd2F5IHRvIGFyYml0cmFyaWx5IHNlbmQgaW50ZXJydXB0cyAoTVNJcyksIGUuZy4gYnkgd3JpdGluZ1xuJiM0MztcdCAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzXG4mIzQzO1x0ICogY29tcGxldGVkLCBhbmQgcHJhY3RpY2FsbHkgYWxsIGFjdGlvbnMgaW52b2x2ZSBETUEgb2Ygc29tZSBmb3JtLlxuJiM0MztcdCAqL1xuJiM0MztcdGFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb247XG4mIzQzO1x0cmVnaW9uLVx1MDAzZXNpemUgPSBTWl8yTTtcbiYjNDM7XHRyZWdpb24tXHUwMDNlaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKGFsbG9jYXRvciwgcmVnaW9uLVx1MDAzZXNpemUpO1xuJiM0MztcdHJlZ2lvbi1cdTAwM2V2YWRkciA9IGt2bV9tbWFwKHJlZ2lvbi1cdTAwM2VzaXplLCBwcm90LCBmbGFncywgLTEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJlZ2lvbi1cdTAwM2V2YWRkciAhPSBNQVBfRkFJTEVELCBcJiMzNDttbWFwKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpb21tdV9tYXAoZGV2aWNlLVx1MDAzZWlvbW11LCByZWdpb24pO1xuJiM0MztcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKGFsbG9jYXRvcik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX2RyaXZlcl9pbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdHJpZ2dlcl9pbnRlcnJ1cHQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpbnQgZXZlbnRmZClcbiYjNDM7e1xuJiM0MztcdGlmIChkZXZpY2UpXG4mIzQzO1x0XHR2ZmlvX3BjaV9kcml2ZXJfc2VuZF9tc2koZGV2aWNlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3JvdXRlX21zaShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIGdzaSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xuJiM0MztcdFx0c3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBlbnRyeTtcbiYjNDM7XHR9IHJvdXRpbmcgPSB7XG4mIzQzO1x0XHQuaGVhZGVyLm5yID0gMSxcbiYjNDM7XHRcdC5lbnRyeSA9IHtcbiYjNDM7XHRcdFx0LmdzaSA9IGdzaSxcbiYjNDM7XHRcdFx0LnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLFxuJiM0MztcdFx0XHQudS5tc2kuYWRkcmVzc19sbyA9IDB4RkVFMDAwMDAgfCAodmNwdS1cdTAwM2VpZCBcdTAwMjYgR0VOTUFTSyg3LCAwKSkgXHUwMDNjXHUwMDNjIDEyLFxuJiM0MztcdFx0XHQudS5tc2kuYWRkcmVzc19oaSA9IHZjcHUtXHUwMDNlaWQgXHUwMDI2IEdFTk1BU0soMzEsIDgpLFxuJiM0MztcdFx0XHQudS5tc2kuZGF0YSA9IHVzZV9ubWkgPyBOTUlfVkVDVE9SIHwgKDQgXHUwMDNjXHUwMDNjIDgpIDogdmVjdG9yLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXHUwMDI2cm91dGluZy5oZWFkZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCBcdTAwMjZyb3V0aW5nKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2JlX2lvbW11X3R5cGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpb19mZDtcbiYjNDM7XG4mIzQzO1x0aW9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvaW9tbXVcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoaW9fZmQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRjbG9zZShpb19mZCk7XG4mIzQzO1x0XHRyZXR1cm4gTU9ERV9JT01NVUZEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9fZmQgPSBfX29wZW5fcGF0aF9vcl9leGl0KFwmIzM0Oy9kZXYvdmZpby92ZmlvXCYjMzQ7LCBPX1JET05MWSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7SXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1wmIzM0Oyk7XG4mIzQzO1x0Y2xvc2UoaW9fZmQpO1xuJiM0MztcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDtVc2FnZTogJXMgWy1hXSBbLWQgXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXHUwMDNlXSBbLWVdIFstaF0gWy1pIG5yX2lycXNdIFstbV0gWy1uXSBbLXQgaW9tbXVfdHlwZV0gWy12IG5yX3ZjcHVzXSBbLXhdXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7VGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LWFcdEFmZmluZSB0aGUgZGV2aWNlJiMzOTtzIGhvc3QgSVJRIHRvIGEgcmFuZG9tIHBoeXNpY2FsIENQVVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0Oy1kXHRVc2UgYSBWRklPIGRldmljZSB0byBzZW5kIE1TSS1YIGludGVycnVwdHMgaW5zdGVhZCBvZiBtYW51YWxseSBzaWduYWxpbmcgdGhlIGV2ZW50ZmRcXG5cJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDstZVx0U2V0IGVtcHR5IEdTSSByb3V0aW5nIGluLWJldHdlZW4gc29tZSBpbnRlcnJ1cHRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LWlcdFRoZSBudW1iZXIgb2YgSVJRcyB0byBnZW5lcmF0ZSBkdXJpbmcgdGhlIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDstbVx0UGluIHRhcmdldCB2Q1BVIHRvIHJhbmRvbSBwaHlzaWNhbCBDUFUgYmVmb3JlIHRyaWdnZXJpbmcgaW50ZXJydXB0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LW5cdERlbGl2ZXIgNTAgcGVyY2VudCBvZiBJUlFzIGFzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LXRcdE92ZXJyaWRlIHRoZSBJT01NVSB0eXBlIHRvIHVzZSAodmZpb190eXBlMV9pb21tdSBvciBpb21tdWZkKVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0Oy12XHROdW1iZXIgb2YgdkNQVVMgdG8gcnVuXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LXhcdFVzZSB4QVBJQyBtb2RlIGluc3RlYWQgb2YgeDJBUElDIG1vZGUgaW4gdGhlIGd1ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRleGl0KEtTRlRfRkFJTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBQaWNrIGFuIElSUSB2ZWN0b3IgaW4gcmFuZ2UgWzMyLCBVSU5UOF9NQVhdLiBNaW4gdmFsdWUgaXMgMzIgYmVjYXVzZVxuJiM0MztcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxuJiM0MztcdCAqIGRlZmluZWQgTk1JcyBhbmQgaW50ZXJydXB0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxuJiM0MztcdCAqIGJlY2F1c2UgS1ZNIHJlc2VydmVzIEdTSXMgMC0xNSBmb3IgbGVnYWN5IElTQSBJUlFzIGFuZCAxNi0yMyBvbmx5IGdvXG4mIzQzO1x0ICogdG8gdGhlIElPQVBJQy4gVGhlIG1heCBpcyBLVk1fTUFYX0lSUV9ST1VURVMgLSAxLCBiZWNhdXNlXG4mIzQzO1x0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1MzIgZ3NpID0ga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMjQsIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEpO1xuJiM0MztcdHU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDMyLCBVSU5UOF9NQVgpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWRzW0tWTV9NQVhfVkNQVVNdO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlID0gTlVMTDtcbiYjNDM7XHRpbnQgbnJfaXJxcyA9IDEwMDAsIG5yX3ZjcHVzID0gMTtcbiYjNDM7XHRib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7XG4mIzQzO1x0Y29uc3QgY2hhciAqZGV2aWNlX2JkZiA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW9tbXVfdHlwZSA9IE5VTEw7XG4mIzQzO1x0aW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7XG4mIzQzO1x0Ym9vbCBtaWdyYXRlX3ZjcHVzID0gZmFsc2U7XG4mIzQzO1x0Y3B1X3NldF90IGF2YWlsYWJsZV9jcHVzO1xuJiM0MztcdGJvb2wgdXNlX25taSA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGlycSwgaXJxX2NwdTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2FkOmVoaTptbnQ6djp4XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAoYykge1xuJiM0MztcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiYjNDM7XHRcdFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7ZCYjMzk7OlxuJiM0MztcdFx0XHRkZXZpY2VfYmRmID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtlJiMzOTs6XG4mIzQzO1x0XHRcdHNldF9lbXB0eV9yb3V0aW5nID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7aSYjMzk7OlxuJiM0MztcdFx0XHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcJiMzNDtOdW1iZXIgb2YgSVJRc1wmIzM0Oywgb3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0XHRtaWdyYXRlX3ZjcHVzID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7biYjMzk7OlxuJiM0MztcdFx0XHR1c2Vfbm1pID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7dCYjMzk7OlxuJiM0MztcdFx0XHRpb21tdV90eXBlID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4mIzQzO1x0XHRcdG5yX3ZjcHVzID0gYXRvaV9wb3NpdGl2ZShcJiMzNDtOdW1iZXIgb2YgdkNQVVNcJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFx1MDAzYz0gS1ZNX01BWF9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7S1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXNcJiMzNDssIEtWTV9NQVhfVkNQVVMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt4JiMzOTs6XG4mIzQzO1x0XHRcdHgyYXBpYyA9IGZhbHNlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAoKSk7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX1gyQVBJQ19BUEksIEtWTV9YMkFQSUNfQVBJX1VTRV8zMkJJVF9JRFMgfFxuJiM0MztcdFx0XHRcdFx0ICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspO1xuJiM0MztcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCB2ZWN0b3IsIGd1ZXN0X2lycV9oYW5kbGVyKTtcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICgheDJhcGljKSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChucl92Y3B1cyBcdTAwM2MgMjU2LCBcJiMzNDt4QVBJQyBjYW4gb25seSB0YXJnZXQgSURzIFswLTI1NF0gKDI1NSB2Q1BVcylcJiMzNDspO1xuJiM0MztcdFx0dmlydF9wZ19tYXAodm0sIEFQSUNfREVGQVVMVF9HUEEsIEFQSUNfREVGQVVMVF9HUEEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9iZGYpIHtcbiYjNDM7XHRcdGlmICghaW9tbXVfdHlwZSlcbiYjNDM7XHRcdFx0aW9tbXVfdHlwZSA9IHByb2JlX2lvbW11X3R5cGUoKTtcbiYjNDM7XHRcdGlvbW11ID0gaW9tbXVfaW5pdChpb21tdV90eXBlKTtcbiYjNDM7XHRcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcbiYjNDM7XHRcdG1zaXggPSB2ZmlvX3NldHVwX21zaShkZXZpY2UpO1xuJiM0MztcdFx0aXJxID0gdmZpb19tc2l4X3RvX2hvc3RfaXJxKGRldmljZV9iZGYsIG1zaXgpO1xuJiM0MztcdFx0ZXZlbnRmZCA9IGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbbXNpeF07XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7VXNpbmcgZGV2aWNlICVzIE1TSS1YWyVkXSAoSVJRLSV1KVxcblwmIzM0OywgZGV2aWNlX2JkZiwgbXNpeCxcbiYjNDM7XHRcdCAgICAgICBpcnEpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgKC1hKSByZXF1aXJlcyBhIGJhY2tpbmcgZGV2aWNlICgtZClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGV2ZW50ZmQgPSBrdm1fbmV3X2V2ZW50ZmQoKTtcbiYjNDM7XHRcdGlycSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtJbmplY3RpbmcgaW50ZXJydXB0cyBmb3IgR1NJICVkIChndWVzdCB2ZWN0b3IgMHgleCkgJWQgdGltZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRnc2ksIHZlY3RvciwgbnJfaXJxcyk7XG4mIzQzO1xuJiM0MztcdGt2bV9hc3NpZ25faXJxZmQodm0sIGdzaSwgZXZlbnRmZCk7XG4mIzQzO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB4MmFwaWMpO1xuJiM0MztcbiYjNDM7XHRpZiAobWlncmF0ZV92Y3B1cylcbiYjNDM7XHRcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYXZhaWxhYmxlX2NwdXMpLCBcdTAwMjZhdmFpbGFibGVfY3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHZjcHVzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHdoaWxlICghU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9yZWFkeV9mb3JfaXJxc1t2Y3B1LVx1MDAzZWlkXSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aXJxX2NwdSA9IC0xO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9pcnFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgYm9vbCBkb19zZXRfZW1wdHlfcm91dGluZyA9IHNldF9lbXB0eV9yb3V0aW5nIFx1MDAyNlx1MDAyNiAoaSBcdTAwMjYgQklUKDMpKTtcbiYjNDM7XHRcdGNvbnN0IGJvb2wgZG9fdXNlX25taSA9IHVzZV9ubWkgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiBCSVQoMikpO1xuJiM0MztcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcbiYjNDM7XHRcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZG9fc2V0X2VtcHR5X3JvdXRpbmcpXG4mIzQzO1x0XHRcdGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcodm0pO1xuJiM0MztcbiYjNDM7XHRcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXJxX2FmZmluaXR5KSB7XG4mIzQzO1x0XHRcdGlycV9jcHUgPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcbiYjNDM7XHRcdFx0cHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eShpcnEsIGlycV9jcHUpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtaWdyYXRlX3ZjcHVzKVxuJiM0MztcdFx0XHRwaW5fdGFza190b19yYW5kb21fY3B1KHZjcHVfdGhyZWFkc1tpICUgbnJfdmNwdXNdLCBcdTAwMjZhdmFpbGFibGVfY3B1cyk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnJfdmNwdXM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9JUlEodmNwdXNbal0pLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtJUlEgZmxhZyBmb3IgdkNQVSAlZCBub3QgY2xlYXIgcHJpb3IgdG8gdGVzdFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgdmNwdXNbal0tXHUwMDNlaWQpO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfTk1JKHZjcHVzW2pdKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7Tk1JIGZsYWcgZm9yIHZDUFUgJWQgbm90IGNsZWFyIHByaW9yIHRvIHRlc3RcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHZjcHVzW2pdLVx1MDAzZWlkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0cmlnZ2VyX2ludGVycnVwdChkZXZpY2UsIGV2ZW50ZmQpO1xuJiM0MztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4mIzQzO1x0XHR3aGlsZSAoIUdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgICB0aW1lc3BlY190b19ucyh0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSkgXHUwMDNjPSB0aW1lb3V0X25zKVxuJiM0MztcdFx0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQodmNwdSwgZG9fdXNlX25taSksXG4mIzQzO1x0XHRcdCAgICBcJiMzNDt2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHZjcHUtXHUwMDNlaWQsIGRvX3VzZV9ubWkgPyBcJiMzNDtOTUlcJiMzNDsgOiBcJiMzNDtJUlFcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBkb191c2Vfbm1pID8gTk1JX1ZFQ1RPUiA6IHZlY3RvciwgZ3NpLCBpcnFfY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZG9fdXNlX25taSlcbiYjNDM7XHRcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX25taVt2Y3B1LVx1MDAzZWlkXSwgZmFsc2UpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxW3ZjcHUtXHUwMDNlaWRdLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZG9uZSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbiBcbiAjaWZkZWYgX19HTElCQ19fXG4gI2luY2x1ZGUgXHUwMDNjZXhlY2luZm8uaFx1MDAzZVxuQEAgLTY0LDExICYjNDM7NjUsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZClcbiBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZCkge31cbiAjZW5kaWZcbiBcbi1zdGF0aWMgcGlkX3QgX2dldHRpZCh2b2lkKVxuLXtcbi1cdHJldHVybiBzeXNjYWxsKFNZU19nZXR0aWQpO1xuLX1cbi1cbiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSlcbiB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbkBAIC04MSw3ICYjNDM7NzcsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0Oz09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAlczoldTogJXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwmIzM0Oyxcbi1cdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwgX2dldHRpZCgpLFxuJiM0MztcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuIFx0XHRcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFx0XHR0ZXN0X2R1bXBfc3RhY2soKTtcbiBcdFx0aWYgKGZtdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMTk1ZjNmZGFlMWUzOTYuLjM3OTQ1NzVkMmNhMGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNSwxNCAmIzQzOzE1LDIyIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Jlc291cmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuIFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlx0MlxuIFxuLXUzMiBndWVzdF9yYW5kb21fc2VlZDtcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZztcbi1zdGF0aWMgdTMyIGxhc3RfZ3Vlc3Rfc2VlZDtcbiYjNDM7dTMyIGt2bV9yYW5kb21fc2VlZDtcbiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcbiYjNDM7c3RhdGljIHUzMiBsYXN0X2t2bV9zZWVkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3NlZWRfcm5nKHUzMiBzZWVkKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3JhbmRvbV9zZWVkID0gbGFzdF9rdm1fc2VlZCA9IHNlZWQ7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSYW5kb20gc2VlZDogMHgleFxcblwmIzM0Oywga3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7XHRrdm1fcm5nID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyBzaXplX3QgdmNwdV9tbWFwX3N6KHZvaWQpO1xuIFxuQEAgLTUxNSwxMiAmIzQzOzUyMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdHNsb3QwID0gbWVtc2xvdDJyZWdpb24odm0sIDApO1xuIFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciAmIzQzOyBzbG90MC1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUpO1xuIFxuLVx0aWYgKGd1ZXN0X3JhbmRvbV9zZWVkICE9IGxhc3RfZ3Vlc3Rfc2VlZCkge1xuLVx0XHRwcl9pbmZvKFwmIzM0O1JhbmRvbSBzZWVkOiAweCV4XFxuXCYjMzQ7LCBndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRcdGxhc3RfZ3Vlc3Rfc2VlZCA9IGd1ZXN0X3JhbmRvbV9zZWVkO1xuLVx0fVxuLVx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3Rfcm5nKTtcbiYjNDM7XHRpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpXG4mIzQzO1x0XHRrdm1fc2VlZF9ybmcoa3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpO1xuIFxuIFx0a3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTtcbiBcbkBAIC02NjIsMTkgJiM0Mzs2NjgsMzkgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcbiBcdCAgICAgICBcJiMzNDsgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcblwmIzM0OywgbmFtZSwgbmFtZSk7XG4gfVxuIFxuJiM0Mzt2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiYjNDM7e1xuJiM0MztcdGludCB0YXJnZXRfaWR4O1xuJiM0MztcdGludCBucl9jcHVzO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdG5yX2NwdXMgPSBDUFVfQ09VTlQocG9zc2libGVfY3B1cyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobnJfY3B1cyBcdTAwM2UgMCwgXCYjMzQ7Tm8gQ1BVcyBhdmFpbGFibGUgaW4gcG9zc2libGVfY3B1c1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4mIzQzO1xuJiM0MztcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuJiM0MztcdFx0XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9GQUlMKFwmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1c1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxuIFx0XHRcdCAgICBpbnQgbnJfdmNwdXMpXG4ge1xuIFx0Y3B1X3NldF90IGFsbG93ZWRfbWFzaztcbiBcdGNoYXIgKmNwdSwgKmNwdV9saXN0O1xuIFx0Y2hhciBkZWxpbVsyXSA9IFwmIzM0OyxcJiMzNDs7XG4tXHRpbnQgaSwgcjtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGNwdV9saXN0ID0gc3RyZHVwKHBjcHVzX3N0cmluZyk7XG4gXHRURVNUX0FTU0VSVChjcHVfbGlzdCwgXCYjMzQ7c3RyZHVwKCkgYWxsb2NhdGlvbiBmYWlsZWQuXCYjMzQ7KTtcbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtzY2hlZF9nZXRhZmZpbml0eSgpIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIFxuIFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XG4gXG5AQCAtMjI3OSw4ICYjNDM7MjMwNSw4IEBAIHZvaWQgX19hdHRyaWJ1dGUoKGNvbnN0cnVjdG9yKSkga3ZtX3NlbGZ0ZXN0X2luaXQodm9pZClcbiBcdHNpZ2FjdGlvbihTSUdJTEwsIFx1MDAyNnNpZ19zYSwgTlVMTCk7XG4gXHRzaWdhY3Rpb24oU0lHRlBFLCBcdTAwMjZzaWdfc2EsIE5VTEwpO1xuIFxuLVx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBsYXN0X2d1ZXN0X3NlZWQgPSByYW5kb20oKTtcbi1cdHByX2luZm8oXCYjMzQ7UmFuZG9tIHNlZWQ6IDB4JXhcXG5cJiMzNDssIGd1ZXN0X3JhbmRvbV9zZWVkKTtcbiYjNDM7XHRzcmFuZG9tKHRpbWUoMCkpO1xuJiM0MztcdGt2bV9zZWVkX3JuZyhyYW5kb20oKSk7XG4gXG4gXHRrdm1fc2VsZnRlc3RfYXJjaF9pbml0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCA2ZGNkMTU5MTBhMDYwOC4uMzU5OWI3NWQ5N2M5MTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5AQCAtNDgsMTQgJiM0Mzs0OCwxNCBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcdTAwMjZtZW1zdHJlc3NfYXJncztcbiBcdHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MgPSBcdTAwMjZhcmdzLVx1MDAzZXZjcHVfYXJnc1t2Y3B1X2lkeF07XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XG4mIzQzO1x0c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTtcbiBcdGd2YV90IGd2YTtcbiBcdHU2NCBwYWdlcztcbiBcdHU2NCBhZGRyO1xuIFx0dTY0IHBhZ2U7XG4gXHRpbnQgaTtcbiBcbi1cdHJhbmRfc3RhdGUgPSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKGd1ZXN0X3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTtcbiYjNDM7XHRyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTtcbiBcbiBcdGd2YSA9IHZjcHVfYXJncy1cdTAwM2VndmE7XG4gXHRwYWdlcyA9IHZjcHVfYXJncy1cdTAwM2VwYWdlcztcbkBAIC02OSwxMyAmIzQzOzY5LDEzIEBAIHZvaWQgbWVtc3RyZXNzX2d1ZXN0X2NvZGUodTMyIHZjcHVfaWR4KVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYWdlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRpZiAoYXJncy1cdTAwM2VyYW5kb21fYWNjZXNzKVxuLVx0XHRcdFx0cGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcbiYjNDM7XHRcdFx0XHRwYWdlID0ga3ZtX3JhbmRvbV91MzIoXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwYWdlID0gaTtcbiBcbiBcdFx0XHRhZGRyID0gZ3ZhICYjNDM7IChwYWdlICogYXJncy1cdTAwM2VndWVzdF9wYWdlX3NpemUpO1xuIFxuLVx0XHRcdGlmIChfX2d1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4mIzQzO1x0XHRcdGlmIChfX2t2bV9yYW5kb21fYm9vbChcdTAwMjZyYW5kX3N0YXRlLCBhcmdzLVx1MDAzZXdyaXRlX3BlcmNlbnQpKVxuIFx0XHRcdFx0Kih1NjQgKilhZGRyID0gMHgwMTIzNDU2Nzg5QUJDREVGO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdFJFQURfT05DRSgqKHU2NCAqKWFkZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM5NjBiMzg0MWQ2MzcwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXG5AQCAtMCwwICYjNDM7MSw1NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2NfdXRpbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgRklMRSAqb3Blbl9wcm9jX2ludGVycnVwdHModm9pZClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmZwO1xuJiM0MztcbiYjNDM7XHRmcCA9IGZvcGVuKFwmIzM0Oy9wcm9jL2ludGVycnVwdHNcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKGZwLCBcJiMzNDtmb3BlbigvcHJvYy9pbnRlcnJ1cHRzKSBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHNlYXJjaF9zdHJpbmdbNjRdO1xuJiM0MztcdGNoYXIgbGluZVs0MDk2XTtcbiYjNDM7XHRpbnQgaXJxID0gLTE7XG4mIzQzO1x0RklMRSAqZnA7XG4mIzQzO1xuJiM0MztcdGZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCBcJiMzNDt2ZmlvLW1zaXhbJWRdXCYjMzQ7LCBtc2l4KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIGRldmljZV9iZGYpIFx1MDAyNlx1MDAyNiBzdHJzdHIobGluZSwgc2VhcmNoX3N0cmluZykpIHtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoMSwgc3NjYW5mKGxpbmUsIFwmIzM0OyVkOlwmIzM0OywgXHUwMDI2aXJxKSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQoaXJxICE9IC0xLCBcJiMzNDtGYWlsZWQgdG8gbG9jYXRlIElSUSBmb3IgJXMgJXNcJiMzNDssIGRldmljZV9iZGYsXG4mIzQzO1x0XHQgICAgc2VhcmNoX3N0cmluZyk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHIsIGZkO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jL2lycS8ldS9zbXBfYWZmaW5pdHlfbGlzdFwmIzM0OywgaXJxKTtcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcbiYjNDM7XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzXCYjMzQ7LCBwYXRoKTtcbiYjNDM7XG4mIzQzO1x0ciA9IGRwcmludGYoZmQsIFwmIzM0OyVkXFxuXCYjMzQ7LCBjcHUpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwmIzM0O0ZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcJiMzNDssIGlycSwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Nsb3NlKGZkKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCBiYWIxYmQyYjc3NWI2ZC4uNmIwMGFiMTFmM2MwMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9rZXJuZWwuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV9zeXNjYWxscy5oXCYjMzQ7XG4gXG4gc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjtcbiBcbkBAIC0zMCwxOCAmIzQzOzMxLDM2IEBAIHZvaWQgX19hdHRyaWJ1dGVfXygodXNlZCkpIGV4cGVjdF9zaWdidXNfaGFuZGxlcihpbnQgc2lnbnVtKVxuICAqIFBhcmstTWlsbGVyIExDRyB1c2luZyBzdGFuZGFyZCBjb25zdGFudHMuXG4gICovXG4gXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKVxuJiM0MztzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZSh1MzIgc2VlZClcbiB7XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHMgPSB7LnNlZWQgPSBzZWVkfTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4gXHRyZXR1cm4gcztcbiB9XG4gXG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RhdGUtXHUwMDNlc2VlZCA9ICh1NjQpc3RhdGUtXHUwMDNlc2VlZCAqIDQ4MjcxICUgKCh1MzIpKDEgXHUwMDNjXHUwMDNjIDMxKSAtIDEpO1xuIFx0cmV0dXJuIHN0YXRlLVx1MDAzZXNlZWQ7XG4gfVxuIFxuJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbiYjNDM7XHRcdFx0ICAgIHU2NCBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsdWU7XG4mIzQzO1x0dTY0IHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XCYjMzQ7LCBtaW4sIG1heCk7XG4mIzQzO1xuJiM0MztcdHZhbHVlID0ga3ZtX3JhbmRvbV91NjQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IG1heCAtIG1pbjtcbiYjNDM7XHRpZiAocmFuZ2UgPT0gVUxMT05HX01BWClcbiYjNDM7XHRcdHJldHVybiB2YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbiAmIzQzOyAodmFsdWUgJSAocmFuZ2UgJiM0MzsgMSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUGFyc2VzIFwmIzM0O1swLTldJiM0Mztba21ndF0/XCYjMzQ7LlxuICAqL1xuQEAgLTM3Nyw3ICYjNDM7Mzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXG4gXHRsb25nIHZhbFsyXTtcbiBcdEZJTEUgKmZwO1xuIFxuLVx0c3ByaW50ZihwYXRoLCBcJiMzNDsvcHJvYy8lbGQvc2NoZWRzdGF0XCYjMzQ7LCBzeXNjYWxsKFNZU19nZXR0aWQpKTtcbiYjNDM7XHRzcHJpbnRmKHBhdGgsIFwmIzM0Oy9wcm9jLyVsZC9zY2hlZHN0YXRcJiMzNDssIChsb25nKWt2bV9nZXR0aWQoKSk7XG4gXHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuIFx0LyogUmV0dXJuIE1JTl9SVU5fREVMQVlfTlMgdXBvbiBmYWlsdXJlIGp1c3QgdG8gYmUgc2FmZSAqL1xuIFx0aWYgKGZzY2FuZihmcCwgXCYjMzQ7JWxkICVsZCBcJiMzNDssIFx1MDAyNnZhbFswXSwgXHUwMDI2dmFsWzFdKSBcdTAwM2MgMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMTU1LDEwICYjNDM7MTU1LDggQEAgc3RhdGljIHZvaWQgKnZjcHVfd29ya2VyKHZvaWQgKmRhdGEpXG4gXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkXCYjMzQ7LCByLCBlcnJubyk7XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNm5yX3JvX2ZhdWx0cyk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykge1xuLVx0XHRXUklURV9PTkNFKGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCk7XG4tXHR9XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNm5yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpXG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCwgdHJ1ZSk7XG4gXG4gI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiBcdC8qXG5AQCAtMjU3LDExICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcbiBzdGF0aWMgdm9pZCBjYWxjX2RlZmF1bHRfbnJfdmNwdXModm9pZClcbiB7XG4gXHRjcHVfc2V0X3QgcG9zc2libGVfbWFzaztcbi1cdGludCByO1xuLVxuLVx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4tXHRURVNUX0FTU0VSVCghciwgXCYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcJiMzNDssXG4tXHRcdCAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcdTAwMjZwb3NzaWJsZV9tYXNrKTtcbiBcbiBcdG5yX3ZjcHVzID0gQ1BVX0NPVU5UKFx1MDAyNnBvc3NpYmxlX21hc2spO1xuIFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNlIDAsIFwmIzM0O1VoLCBubyBDUFVzP1wmIzM0Oyk7XG5AQCAtMzgzLDggJiM0MzszNzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFx1MDAyNnRpbWVfcnVuMiwgXCYjMzQ7cnVuIDJcJiMzNDspO1xuIFxuIFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7XG4tXHRtcHJvdGVjdF9yb19kb25lID0gdHJ1ZTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBtcHJvdGVjdF9yb19kb25lKTtcbiYjNDM7XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7XG4gXG4gXHRyZW5kZXp2b3VzX3dpdGhfdmNwdXMoXHUwMDI2dGltZV9ybywgXCYjMzQ7bXByb3RlY3QgUk9cJiMzNDspO1xuIFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuaW5kZXggZjgwYWQ2YjQ3ZDE2YjAuLjU1N2UzOTNjMjIzYjk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbkBAIC0yMjYsOSAmIzQzOzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFx1MDAyNnBvc3NpYmxlX21hc2spO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3NjaGVkX2dldGFmZmluaXR5IGZhaWxlZCwgZXJybm8gPSAlZCAoJXMpXCYjMzQ7LCBlcnJubyxcbi1cdFx0ICAgIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4gXG4gXHRjYWxjX21pbl9tYXhfY3B1KCk7XG4gXG5AQCAtMjQ0LDcgJiM0MzsyNDIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiBcbiBcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNm1pZ3JhdGlvbl90aHJlYWQsIE5VTEwsIG1pZ3JhdGlvbl93b3JrZXIsXG4tXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXN5c2NhbGwoU1lTX2dldHRpZCkpO1xuJiM0MztcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiBcbiBcdGlmIChsYXRlbmN5IFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5pbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5AQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxuIHtcbiBcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xuLVx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0pO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSxcbiYjNDM7XHRcdFx0XHQodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7XG4gXG4gXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLCAodWxvbmcpc3RfZ3ZhW2ldIHwgS1ZNX01TUl9FTkFCTEVEKTtcbiB9XG5AQCAtMTg3LDggJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcbiBcdH07XG4gXG4gXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cbi1cdHN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4mIzQzO1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuIFxuIFx0c3RfaXBhID0gKHVsb25nKXN0X2d2YVtpXTtcbiBcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbkBAIC0zMTAsMTAgJiM0MzszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4ge1xuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKTtcbi1cdHN0X2dwYVtpXSA9IGFkZHJfZ3ZhMmdwYSh2Y3B1LVx1MDAzZXZtLCAoZ3ZhX3Qpc3RfZ3ZhW2ldKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVx1MDAzZXZtLCBzdF9ncGFbaV0pO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2dwYVtpXSwgYWRkcl9ndmEyZ3BhKHZjcHUtXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9kdW1wKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZHgpXG5AQCAtNDQyLDggJiM0Mzs0MzksNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcbiBcdH07XG4gXG4gXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cbi1cdHN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4mIzQzO1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuIFxuIFx0ZXJyID0gX192Y3B1X2lvY3RsKHZjcHUsIEtWTV9IQVNfREVWSUNFX0FUVFIsIFx1MDAyNmF0dHIpO1xuIFx0VEVTVF9BU1NFUlQoZXJyID09IDAsIFwmIzM0O05vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXCYjMzQ7KTtcbkBAIC01NDksOCAmIzQzOzU0NSw3IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTZWNvbmQgVkNQVSBydW4sIGV4cGVjdCBndWVzdCBzdG9sZW4gdGltZSB0byBiZSBcdTAwM2M9IHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXTtcbiYjNDM7XHRcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4gXHRcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTtcbiBcdFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXHUwMDNjPSBydW5fZGVsYXksXG4gXHRcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHN0b2xlbiB0aW1lIFx1MDAzYz0gJWxkLCBnb3QgJWxkXCYjMzQ7LFxuQEAgLTU3MCw4ICYjNDM7NTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXG4gXG4gXHRcdC8qIFJ1biBWQ1BVIGFnYWluIHRvIGNvbmZpcm0gc3RvbGVuIHRpbWUgaXMgY29uc2lzdGVudCB3aXRoIHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXSAtIHN0b2xlbl90aW1lO1xuJiM0MztcdFx0c3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKSAtIHN0b2xlbl90aW1lO1xuIFx0XHRURVNUX0FTU0VSVChzdG9sZW5fdGltZSBcdTAwM2U9IHJ1bl9kZWxheSxcbiBcdFx0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc3RvbGVuIHRpbWUgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG4gXHRcdFx0ICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5AQCAtMzQsNyAmIzQzOzM0LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVfYnVmZmVycyh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIF9fX190ZXN0X3Nldl9kYmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBpLCBpbnQgaiwgaW50IG5yX2J5dGVzKVxuIHtcbi1cdHU4IHBhdHRlcm4gPSBndWVzdF9yYW5kb21fdTMyKFx1MDAyNmd1ZXN0X3JuZyk7XG4mIzQzO1x0dTggcGF0dGVybiA9IGt2bV9yYW5kb21fdTMyKFx1MDAyNmt2bV9ybmcpO1xuIFxuIFx0aWYgKGkgJiM0MzsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFIHx8IGogJiM0MzsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFKVxuIFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmZTYwMTEwZGNlZDdhOTZjNzkzYzdjZDNjMGM0ZjI2NDk0OWQwZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDRhY2UxMjYwNmU5MzdiLi44OGM2YzgwNDZkZGVjMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMSw2ICYjNDM7MTEsNyBAQCBMSUJLVk0gJiM0Mzs9IGxpYi9rdm1fdXRpbC5jCiBMSUJLVk0gJiM0Mzs9IGxpYi9scnVfZ2VuX3V0aWwuYwogTElCS1ZNICYjNDM7PSBsaWIvbWVtc3RyZXNzLmMKIExJQktWTSAmIzQzOz0gbGliL2d1ZXN0X3NwcmludGYuYwomIzQzO0xJQktWTSAmIzQzOz0gbGliL3Byb2NfdXRpbC5jCiBMSUJLVk0gJiM0Mzs9IGxpYi9yYnRyZWUuYwogTElCS1ZNICYjNDM7PSBsaWIvc3BhcnNlYml0LmMKIExJQktWTSAmIzQzOz0gbGliL3Rlc3RfdXRpbC5jCkBAIC0xNTcsNiAmIzQzOzE1OCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZGlydHlfbG9nX3BlcmZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBndWVzdF9tZW1mZF90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaXJxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lCkBAIC0yNTksNiAmIzQzOzI2MSw3IEBAIE9WRVJSSURFX1RBUkdFVFMgPSAxCiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS4KIGluY2x1ZGUgLi4vbGliLm1rCiBpbmNsdWRlIC4uL2Nncm91cC9saWIvbGliY2dyb3VwLm1rCiYjNDM7aW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rCiAKIElOU1RBTExfSERSX1BBVEggPSAkKHRvcF9zcmNkaXIpL3VzcgogTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvCkBAIC0zMTMsNyAmIzQzOzMxNiw5IEBAIExJQktWTV9TIDo9ICQoZmlsdGVyICUuUywkKExJQktWTSkpCiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKQogTElCS1ZNX1NfT0JKIDo9ICQocGF0c3Vic3QgJS5TLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TKSkKIExJQktWTV9TVFJJTkdfT0JKIDo9ICQocGF0c3Vic3QgJS5jLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TVFJJTkcpKQotTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pCiYjNDM7TElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopCiYjNDM7TElCS1ZNX09CSlMgJiM0Mzs9ICQoTElCQ0dST1VQX08pCiYjNDM7TElCS1ZNX09CSlMgJiM0Mzs9ICQoTElCVkZJT19PKQogU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpCiBTUExJVF9URVNUX0dFTl9PQkogOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJChBUkNIKS8lLm8sICQoU1BMSVRfVEVTVFMpKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwppbmRleCA5MGM0NzVhNjFiMjJiNi4uZjhiMDI1OTc4OTdiZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwpAQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHUzMiB0ZXN0X2dldF9wY3B1KHZvaWQpCiAJY3B1X3NldF90IG9ubGluZV9jcHVzZXQ7CiAKIAlucHJvY19jb25mID0gZ2V0X25wcm9jc19jb25mKCk7Ci0Jc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksICZhbXA7b25saW5lX2NwdXNldCk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3NldF90KSwgJmFtcDtvbmxpbmVfY3B1c2V0KTsKIAogCS8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovCiAJZG8gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jCmluZGV4IGY3NjI1ZWI3MTFkNmI4Li5kOWM5Mzc3YTYzMjU2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYwpAQCAtMTAzOSw3ICYjNDM7MTAzOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKQogCQlleGl0KEtTRlRfU0tJUCk7CiAKLQlzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCAmYW1wO2RlZmF1bHRfY3B1c2V0KTsKJiM0MzsJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksICZhbXA7ZGVmYXVsdF9jcHVzZXQpOwogCXNldF9jb3VudGVyX2RlZmF1bHRzKCk7CiAKIAlpZiAodGVzdF9hcmdzLnRlc3RfdmlydHVhbCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncykKIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLAogCQlzdHJ1Y3QgdWZmZF9tc2cgKm1zZykKIHsKLQlwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKJiM0MzsJcGlkX3QgdGlkID0ga3ZtX2dldHRpZCgpOwogCXU2NCBhZGRyID0gbXNnLSZndDthcmcucGFnZWZhdWx0LmFkZHJlc3M7CiAJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwogCXN0cnVjdCB0aW1lc3BlYyB0c19kaWZmOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKaW5kZXggZWY3NzlmYTkxODI3YzkuLjdjNWFiZTFhZTllMDE4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQgb3B0OwogCiAJLyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqLwotCWd1ZXN0X3JhbmRvbV9zZWVkID0gMTsKJiM0MzsJa3ZtX3JhbmRvbV9zZWVkID0gMTsKIAogCWRpcnR5X2xvZ19tYW51YWxfY2FwcyA9CiAJCWt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTsKQEAgLTM1Nyw3ICYjNDM7MzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCXAucGh5c19vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtyJiMzOTs6Ci0JCQlndWVzdF9yYW5kb21fc2VlZCA9IGF0b2lfcG9zaXRpdmUoJiMzNDtSYW5kb20gc2VlZCYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCWt2bV9yYW5kb21fc2VlZCA9IGF0b2lfcG9zaXRpdmUoJiMzNDtSYW5kb20gc2VlZCYjMzQ7LCBvcHRhcmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtzJiMzOTs6CiAJCQlwLmJhY2tpbmdfc3JjID0gcGFyc2VfYmFja2luZ19zcmNfdHlwZShvcHRhcmcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYwppbmRleCA3NGNhMDk2YmY5NzZiNS4uZTg0MTlkN2RhMWVhYjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCkBAIC0xMjEsNyAmIzQzOzEyMSw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAl3aGlsZSAodHJ1ZSkgewogCQl3aGlsZSAoIVJFQURfT05DRSh2Y3B1X3N0b3ApKSB7CiAJCQlhZGRyID0gZ3Vlc3RfdGVzdF92aXJ0X21lbTsKLQkJCWFkZHIgJiM0Mzs9IChndWVzdF9yYW5kb21fdTY0KCZhbXA7Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcykKJiM0MzsJCQlhZGRyICYjNDM7PSAoa3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcykKIAkJCQkqIGd1ZXN0X3BhZ2Vfc2l6ZTsKIAkJCWFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTsKIApAQCAtNzA4LDggJiM0Mzs3MDgsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCiAJCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBpdGVyYXRpb24pOwogCi0JCVdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7CiYjNDM7CQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTsKIAogCQlkaXJ0eV9yaW5nX3ByZXZfaXRlcmF0aW9uX2xhc3RfcGFnZSA9IGRpcnR5X3JpbmdfbGFzdF9wYWdlOwogCQlXUklURV9PTkNFKGRpcnR5X3JpbmdfdmNwdV9yaW5nX2Z1bGwsIGZhbHNlKTsKQEAgLTc3NSwxNiAmIzQzOzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCQkgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkCiAJCSAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbiYjMzk7cyB2YWx1ZS4KIAkJICovCi0JCVdSSVRFX09OQ0UodmNwdV9zdG9wLCB0cnVlKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHZjcHVfc3RvcCk7CiYjNDM7CQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCB0cnVlKTsKIAkJc2VtX3dhaXQoJmFtcDtzZW1fdmNwdV9zdG9wKTsKIAogCQkvKgogCQkgKiBDbGVhciB2Y3B1X3N0b3AgYWZ0ZXIgdGhlIHZDUFUgdGhyZWFkIGhhcyBhY2tub3dsZWRnZSB0aGUKIAkJICogc3RvcCByZXF1ZXN0IGFuZCBpcyB3YWl0aW5nLCBpLmUuIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmchCiAJCSAqLwotCQlXUklURV9PTkNFKHZjcHVfc3RvcCwgZmFsc2UpOwotCQlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTsKJiM0MzsJCVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCB2Y3B1X3N0b3AsIGZhbHNlKTsKIAogCQkvKgogCQkgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmgKaW5kZXggNmNiM2JlZDI5YjgxYWIuLjVkYWU2MTQzZGRiMDRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKIAogI2RlZmluZSBNQVBfQVJHUzAobSwuLi4pCkBAIC04MywxMSAmIzQzOzg0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9kdXAoaW50IGZkKQogCXJldHVybiBuZXdfZmQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKJiM0Mzt9CiYjNDM7CiBfX0tWTV9TWVNDQUxMX0RFRklORShtdW5tYXAsIDIsIHZvaWQgKiwgbWVtLCBzaXplX3QsIHNpemUpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoZmFsbG9jYXRlLCA0LCBpbnQsIGZkLCBpbnQsIG1vZGUsIGxvZmZfdCwgb2Zmc2V0LCBsb2ZmX3QsIGxlbik7CiBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpOwomIzQzO19fS1ZNX1NZU0NBTExfREVGSU5FKHNjaGVkX2dldGFmZmluaXR5LCAzLCBwaWRfdCwgcGlkLCBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBtYXNrKTsKIAogI2RlZmluZSBrdm1fZnJlZV9mZChmZCkJCVwKIGRvIHsJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKaW5kZXggMDRhOTEwMTY0YTI5NmEuLmIzOWU3MTNjMzBhNDY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KQogCVRFU1RfQVNTRVJUKCFyLCAmIzM0O0ZhaWxlZCB0byBzZXQgdGhyZWFkIGFmZmluaXR5IHRvIHBDUFUgJiMzOTsldSYjMzk7JiMzNDssIGNwdSk7CiB9CiAKJiM0Mzt2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKQogewogCWludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTsKQEAgLTExMzgsNiAmIzQzOzExNDAsMTYgQEAgdm1fYWRqdXN0X251bV9ndWVzdF9wYWdlcyhlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdW5zaWduZWQgaW50IG51bV9ndWVzdF9wYWdlcykKIAltZW1jcHkoJmFtcDsoZyksIF9wLCBzaXplb2YoZykpOwkJCQlcCiB9KQogCiYjNDM7I2RlZmluZSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoX3ZtLCBfdmFyaWFibGUpICh7CQlcCiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpOwkJCVwKJiM0MzsJUkVBRF9PTkNFKF92YXJpYWJsZSk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKF92bSwgX3ZhcmlhYmxlLCBfdmFsdWUpIGRvIHsJXAomIzQzOwlXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTsJCQkJXAomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdChfdm0sIF92YXJpYWJsZSk7CQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAvKgogICogV3JpdGUgYSBnbG9iYWwgdmFsdWUsIGJ1dCBvbmx5IGluIHRoZSBWTSYjMzk7cyAoZ3Vlc3QmIzM5O3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkCiAgKiBmb3IgJiMzNDtnbG9iYWxzJiMzNDsgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaApAQCAtMCwwICYjNDM7MSwxMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsjaWZuZGVmIFNFTEZURVNUX0tWTV9QUk9DX1VUSUxfSAomIzQzOyNkZWZpbmUgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOwomIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7CiYjNDM7CiYjNDM7dm9pZCBwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggYTU2MjcxYzIzN2FlOWUuLmQ2NGM4YTIyODIwN2E3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaApAQCAtMTA4LDMyICYjNDM7MTA4LDM1IEBAIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19zdWIoc3RydWN0IHRpbWVzcGVjIHRzMSwgc3RydWN0IHRpbWVzcGVjIHRzMik7CiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpOwogc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX2RpdihzdHJ1Y3QgdGltZXNwZWMgdHMsIGludCBkaXZpc29yKTsKIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7CiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgewogCXUzMiBzZWVkOwogfTsKIAotZXh0ZXJuIHUzMiBndWVzdF9yYW5kb21fc2VlZDsKLWV4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZzsKJiM0MztleHRlcm4gdTMyIGt2bV9yYW5kb21fc2VlZDsKJiM0MztleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZzsKIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKTsKLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTsKJiM0MztzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7CiYjNDM7dTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBfX2d1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlLAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX2t2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsCiAJCQkJICAgICAgIHU4IHBlcmNlbnQpCiB7Ci0JcmV0dXJuIChndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgJmx0OyBwZXJjZW50OwomIzQzOwlyZXR1cm4gKGt2bV9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgJmx0OyBwZXJjZW50OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZ3Vlc3RfcmFuZG9tX2Jvb2woc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiB7Ci0JcmV0dXJuIF9fZ3Vlc3RfcmFuZG9tX2Jvb2woc3RhdGUsIDUwKTsKJiM0MzsJcmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiYjNDM7c3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogewotCXJldHVybiAoKHU2NClndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAmbHQ7Jmx0OyAzMikgfCBndWVzdF9yYW5kb21fdTMyKHN0YXRlKTsKJiM0MzsJcmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSAmbHQ7Jmx0OyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7CiB9CiAKJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAomIzQzOwkJCSAgICB1NjQgbWF4KTsKJiM0MzsKIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgewogCVZNX01FTV9TUkNfQU5PTllNT1VTLAogCVZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYva3ZtX3V0aWxfYXJjaC5oCmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYva3ZtX3V0aWxfYXJjaC5oCkBAIC01NSw5ICYjNDM7NTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaCkKIGRvIHsJCQkJCQkJCQkJCVwKIAljb25zdCB0eXBlb2YobWVtKSB2YWwgPSAoX192YWwpOwkJCQkJCVwKIAkJCQkJCQkJCQkJXAotCWlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGd1ZXN0X3JhbmRvbV9ib29sKCZhbXA7Z3Vlc3Rfcm5nKSkgewkJXAomIzQzOwlpZiAoIWlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZCB8fCBrdm1fcmFuZG9tX2Jvb2woJmFtcDtrdm1fcm5nKSkgewkJXAogCQkobWVtKSA9IHZhbDsJCQkJCQkJCVwKLQl9IGVsc2UgaWYgKGd1ZXN0X3JhbmRvbV9ib29sKCZhbXA7Z3Vlc3Rfcm5nKSkgewkJCQkJXAomIzQzOwl9IGVsc2UgaWYgKGt2bV9yYW5kb21fYm9vbCgmYW1wO2t2bV9ybmcpKSB7CQkJCQlcCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKEtWTV9GRVAgJiMzNDttb3YgJTEsICUwJiMzNDsJCQkJXAogCQkJCSAgICAgOiAmIzM0OyYjNDM7bSYjMzQ7IChtZW0pCQkJCQlcCiAJCQkJICAgICA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMzYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2NfdXRpbC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2luZm8uaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IHRpbWVvdXRfbnMgPSAyVUxMICogMTAwMCAqIDEwMDAgKiAxMDAwOwomIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdOwomIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX2lycVtLVk1fTUFYX1ZDUFVTXTsKJiM0MztzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9ubWlbS1ZNX01BWF9WQ1BVU107CiYjNDM7c3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTsKJiM0MztzdGF0aWMgYm9vbCBpcnFfYWZmaW5pdHk7CiYjNDM7c3RhdGljIGJvb2wgZG9uZTsKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpCVwKJiM0MzsJU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLSZndDt2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLSZndDtpZF0pCiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KQlcCiYjNDM7CVNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS0mZ3Q7dm0sIGd1ZXN0X3JlY2VpdmVkX25taVsoX192Y3B1KS0mZ3Q7aWRdKQomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKF9fdmNwdSwgX19ubWkpCVwKJiM0MzsJKChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKQomIzQzOwomIzQzO3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh4MmFwaWMpCiYjNDM7CQlyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4geGFwaWNfcmVhZF9yZWcoQVBJQ19JRCkgJmd0OyZndDsgMjQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2lycV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9pcnFbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpOwomIzQzOwomIzQzOwlpZiAoeDJhcGljKQomIzQzOwkJeDJhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7CiYjNDM7CWVsc2UKJiM0MzsJCXhhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoeDJhcGljKQomIzQzOwkJeDJhcGljX2VuYWJsZSgpOwomIzQzOwllbHNlCiYjNDM7CQl4YXBpY19lbmFibGUoKTsKJiM0MzsKJiM0MzsJc3RpX25vcCgpOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpCiYjNDM7CQljcHVfcmVsYXgoKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CVRFU1RfQVNTRVJUX0VRKFVDQUxMX0RPTkUsIGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fc2V0dXBfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCBmbGFncyA9IE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTOwomIzQzOwljb25zdCBpbnQgcHJvdCA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CiYjNDM7CXN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yOwomIzQzOwlzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uOwomIzQzOwomIzQzOwkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgZGV2aWNlJiM0Mztkcml2ZXIgY2FuIGFjdHVhbGx5IHNlbmQgTVNJcy4gKi8KJiM0MzsJVEVTVF9SRVFVSVJFKGRldmljZS0mZ3Q7ZHJpdmVyLm9wcyk7CiYjNDM7CVRFU1RfUkVRVUlSRShkZXZpY2UtJmd0O2RyaXZlci5vcHMtJmd0O3NlbmRfbXNpKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHVwIGEgRE1BLWFibGUgcmVnaW9uIGZvciB0aGUgZHJpdmVyIHRvIHVzZS4gICBWZXJ5IGZldyBkZXZpY2VzCiYjNDM7CSAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nCiYjNDM7CSAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzCiYjNDM7CSAqIGNvbXBsZXRlZCwgYW5kIHByYWN0aWNhbGx5IGFsbCBhY3Rpb25zIGludm9sdmUgRE1BIG9mIHNvbWUgZm9ybS4KJiM0MzsJICovCiYjNDM7CWFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLSZndDtpb21tdSk7CiYjNDM7CiYjNDM7CXJlZ2lvbiA9ICZhbXA7ZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uOwomIzQzOwlyZWdpb24tJmd0O3NpemUgPSBTWl8yTTsKJiM0MzsJcmVnaW9uLSZndDtpb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2MoYWxsb2NhdG9yLCByZWdpb24tJmd0O3NpemUpOwomIzQzOwlyZWdpb24tJmd0O3ZhZGRyID0ga3ZtX21tYXAocmVnaW9uLSZndDtzaXplLCBwcm90LCBmbGFncywgLTEpOwomIzQzOwlURVNUX0FTU0VSVChyZWdpb24tJmd0O3ZhZGRyICE9IE1BUF9GQUlMRUQsICYjMzQ7bW1hcCgpIGZhaWxlZFxuJiMzNDspOwomIzQzOwlpb21tdV9tYXAoZGV2aWNlLSZndDtpb21tdSwgcmVnaW9uKTsKJiM0MzsKJiM0MzsJaW92YV9hbGxvY2F0b3JfY2xlYW51cChhbGxvY2F0b3IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9kcml2ZXJfaW5pdChkZXZpY2UpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2aWNlLSZndDtkcml2ZXIubXNpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0cmlnZ2VyX2ludGVycnVwdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGludCBldmVudGZkKQomIzQzO3sKJiM0MzsJaWYgKGRldmljZSkKJiM0MzsJCXZmaW9fcGNpX2RyaXZlcl9zZW5kX21zaShkZXZpY2UpOwomIzQzOwllbHNlCiYjNDM7CQlldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm91dGVfbXNpKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgZ3NpLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJICB1OCB2ZWN0b3IsIGJvb2wgdXNlX25taSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIGhlYWRlcjsKJiM0MzsJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cnk7CiYjNDM7CX0gcm91dGluZyA9IHsKJiM0MzsJCS5oZWFkZXIubnIgPSAxLAomIzQzOwkJLmVudHJ5ID0gewomIzQzOwkJCS5nc2kgPSBnc2ksCiYjNDM7CQkJLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLAomIzQzOwkJCS51Lm1zaS5hZGRyZXNzX2xvID0gMHhGRUUwMDAwMCB8ICh2Y3B1LSZndDtpZCAmYW1wOyBHRU5NQVNLKDcsIDApKSAmbHQ7Jmx0OyAxMiwKJiM0MzsJCQkudS5tc2kuYWRkcmVzc19oaSA9IHZjcHUtJmd0O2lkICZhbXA7IEdFTk1BU0soMzEsIDgpLAomIzQzOwkJCS51Lm1zaS5kYXRhID0gdXNlX25taSA/IE5NSV9WRUNUT1IgfCAoNCAmbHQ7Jmx0OyA4KSA6IHZlY3RvciwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCAmYW1wO3JvdXRpbmcuaGVhZGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3NldF9lbXB0eV9nc2lfcm91dGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgcm91dGluZyA9IHt9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgJmFtcDtyb3V0aW5nKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2JlX2lvbW11X3R5cGUodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpb19mZDsKJiM0MzsKJiM0MzsJaW9fZmQgPSBvcGVuKCYjMzQ7L2Rldi9pb21tdSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWlmIChpb19mZCAmZ3Q7PSAwKSB7CiYjNDM7CQljbG9zZShpb19mZCk7CiYjNDM7CQlyZXR1cm4gTU9ERV9JT01NVUZEOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvX2ZkID0gX19vcGVuX3BhdGhfb3JfZXhpdCgmIzM0Oy9kZXYvdmZpby92ZmlvJiMzNDssIE9fUkRPTkxZLAomIzQzOwkJCQkgICAgJiMzNDtJcyBWRklPIChvciBJT01NVUZEKSBsb2FkZWQgYW5kIGVuYWJsZWQ/JiMzNDspOwomIzQzOwljbG9zZShpb19mZCk7CiYjNDM7CXJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0O1VzYWdlOiAlcyBbLWFdIFstZCAmbHQ7c2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uJmd0O10gWy1lXSBbLWhdIFstaSBucl9pcnFzXSBbLW1dIFstbl0gWy10IGlvbW11X3R5cGVdIFstdiBucl92Y3B1c10gWy14XVxuJiMzNDssIG5hbWUpOwomIzQzOwlwcmludGYoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7VGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1hCUFmZmluZSB0aGUgZGV2aWNlJiMzOTtzIGhvc3QgSVJRIHRvIGEgcmFuZG9tIHBoeXNpY2FsIENQVVxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDstZAlVc2UgYSBWRklPIGRldmljZSB0byBzZW5kIE1TSS1YIGludGVycnVwdHMgaW5zdGVhZCBvZiBtYW51YWxseSBzaWduYWxpbmcgdGhlIGV2ZW50ZmRcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7LWUJU2V0IGVtcHR5IEdTSSByb3V0aW5nIGluLWJldHdlZW4gc29tZSBpbnRlcnJ1cHRzXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1pCVRoZSBudW1iZXIgb2YgSVJRcyB0byBnZW5lcmF0ZSBkdXJpbmcgdGhlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7LW0JUGluIHRhcmdldCB2Q1BVIHRvIHJhbmRvbSBwaHlzaWNhbCBDUFUgYmVmb3JlIHRyaWdnZXJpbmcgaW50ZXJydXB0XG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1uCURlbGl2ZXIgNTAgcGVyY2VudCBvZiBJUlFzIGFzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy10CU92ZXJyaWRlIHRoZSBJT01NVSB0eXBlIHRvIHVzZSAodmZpb190eXBlMV9pb21tdSBvciBpb21tdWZkKVxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDstdglOdW1iZXIgb2YgdkNQVVMgdG8gcnVuXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy14CVVzZSB4QVBJQyBtb2RlIGluc3RlYWQgb2YgeDJBUElDIG1vZGUgaW4gdGhlIGd1ZXN0XG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0O1xuJiMzNDspOwomIzQzOwlleGl0KEtTRlRfRkFJTCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBpY2sgYSByYW5kb20gdmVjdG9yIGFuZCBhIHJhbmRvbSBHU0kgdG8gdXNlIGZvciBkZXZpY2UgSVJRLgomIzQzOwkgKgomIzQzOwkgKiBQaWNrIGFuIElSUSB2ZWN0b3IgaW4gcmFuZ2UgWzMyLCBVSU5UOF9NQVhdLiBNaW4gdmFsdWUgaXMgMzIgYmVjYXVzZQomIzQzOwkgKiBMaW51eC94ODYgcmVzZXJ2ZXMgdmVjdG9ycyAwLTMxIGZvciBleGNlcHRpb25zIGFuZCBhcmNoaXRlY3R1cmUKJiM0MzsJICogZGVmaW5lZCBOTUlzIGFuZCBpbnRlcnJ1cHRzLgomIzQzOwkgKgomIzQzOwkgKiBQaWNrIGEgR1NJIGluIHJhbmdlIFsyNCwgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMV0uIFRoZSBtaW4gdmFsdWUgaXMgMjQKJiM0MzsJICogYmVjYXVzZSBLVk0gcmVzZXJ2ZXMgR1NJcyAwLTE1IGZvciBsZWdhY3kgSVNBIElSUXMgYW5kIDE2LTIzIG9ubHkgZ28KJiM0MzsJICogdG8gdGhlIElPQVBJQy4gVGhlIG1heCBpcyBLVk1fTUFYX0lSUV9ST1VURVMgLSAxLCBiZWNhdXNlCiYjNDM7CSAqIEtWTV9NQVhfSVJRX1JPVVRFUyBpcyBleGNsdXNpdmUuCiYjNDM7CSAqLwomIzQzOwl1MzIgZ3NpID0ga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2UoJmFtcDtrdm1fcm5nLCAyNCwgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMSk7CiYjNDM7CXU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMzIsIFVJTlQ4X01BWCk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfdCB2Y3B1X3RocmVhZHNbS1ZNX01BWF9WQ1BVU107CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiYjNDM7CWludCBucl9pcnFzID0gMTAwMCwgbnJfdmNwdXMgPSAxOwomIzQzOwlib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7CiYjNDM7CWNvbnN0IGNoYXIgKmRldmljZV9iZGYgPSBOVUxMOwomIzQzOwljb25zdCBjaGFyICppb21tdV90eXBlID0gTlVMTDsKJiM0MzsJaW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7CiYjNDM7CWJvb2wgbWlncmF0ZV92Y3B1cyA9IGZhbHNlOwomIzQzOwljcHVfc2V0X3QgYXZhaWxhYmxlX2NwdXM7CiYjNDM7CWJvb2wgdXNlX25taSA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgaW9tbXUgKmlvbW11OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGlycSwgaXJxX2NwdTsKJiM0MzsKJiM0MzsJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWQ6ZWhpOm1udDp2OngmIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKGMpIHsKJiM0MzsJCWNhc2UgJiMzOTthJiMzOTs6CiYjNDM7CQkJaXJxX2FmZmluaXR5ID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtkJiMzOTs6CiYjNDM7CQkJZGV2aWNlX2JkZiA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtlJiMzOTs6CiYjNDM7CQkJc2V0X2VtcHR5X3JvdXRpbmcgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2kmIzM5OzoKJiM0MzsJCQlucl9pcnFzID0gYXRvaV9wb3NpdGl2ZSgmIzM0O051bWJlciBvZiBJUlFzJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCW1pZ3JhdGVfdmNwdXMgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzoKJiM0MzsJCQl1c2Vfbm1pID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt0JiMzOTs6CiYjNDM7CQkJaW9tbXVfdHlwZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt2JiMzOTs6CiYjNDM7CQkJbnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKCYjMzQ7TnVtYmVyIG9mIHZDUFVTJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJVEVTVF9BU1NFUlQobnJfdmNwdXMgJmx0Oz0gS1ZNX01BWF9WQ1BVUywKJiM0MzsJCQkJICAgICYjMzQ7S1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXMmIzM0OywgS1ZNX01BWF9WQ1BVUyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7eCYjMzk7OgomIzQzOwkJCXgyYXBpYyA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJaGVscChhcmd2WzBdKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX1gyQVBJQ19BUEksIEtWTV9YMkFQSUNfQVBJX1VTRV8zMkJJVF9JRFMgfAomIzQzOwkJCQkJICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspOwomIzQzOwomIzQzOwl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCB2ZWN0b3IsIGd1ZXN0X2lycV9oYW5kbGVyKTsKJiM0MzsJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXgyYXBpYykgewomIzQzOwkJVEVTVF9BU1NFUlQobnJfdmNwdXMgJmx0OyAyNTYsICYjMzQ7eEFQSUMgY2FuIG9ubHkgdGFyZ2V0IElEcyBbMC0yNTRdICgyNTUgdkNQVXMpJiMzNDspOwomIzQzOwkJdmlydF9wZ19tYXAodm0sIEFQSUNfREVGQVVMVF9HUEEsIEFQSUNfREVGQVVMVF9HUEEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkZXZpY2VfYmRmKSB7CiYjNDM7CQlpZiAoIWlvbW11X3R5cGUpCiYjNDM7CQkJaW9tbXVfdHlwZSA9IHByb2JlX2lvbW11X3R5cGUoKTsKJiM0MzsJCWlvbW11ID0gaW9tbXVfaW5pdChpb21tdV90eXBlKTsKJiM0MzsJCWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTsKJiM0MzsJCW1zaXggPSB2ZmlvX3NldHVwX21zaShkZXZpY2UpOwomIzQzOwkJaXJxID0gdmZpb19tc2l4X3RvX2hvc3RfaXJxKGRldmljZV9iZGYsIG1zaXgpOwomIzQzOwkJZXZlbnRmZCA9IGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW21zaXhdOwomIzQzOwkJcHJpbnRmKCYjMzQ7VXNpbmcgZGV2aWNlICVzIE1TSS1YWyVkXSAoSVJRLSV1KVxuJiMzNDssIGRldmljZV9iZGYsIG1zaXgsCiYjNDM7CQkgICAgICAgaXJxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVRFU1RfQVNTRVJUKCFpcnFfYWZmaW5pdHksCiYjNDM7CQkJICAgICYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgKC1hKSByZXF1aXJlcyBhIGJhY2tpbmcgZGV2aWNlICgtZCkmIzM0Oyk7CiYjNDM7CiYjNDM7CQlldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7CiYjNDM7CQlpcnEgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7SW5qZWN0aW5nIGludGVycnVwdHMgZm9yIEdTSSAlZCAoZ3Vlc3QgdmVjdG9yIDB4JXgpICVkIHRpbWVzXG4mIzM0OywKJiM0MzsJCWdzaSwgdmVjdG9yLCBucl9pcnFzKTsKJiM0MzsKJiM0MzsJa3ZtX2Fzc2lnbl9pcnFmZCh2bSwgZ3NpLCBldmVudGZkKTsKJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHgyYXBpYyk7CiYjNDM7CiYjNDM7CWlmIChtaWdyYXRlX3ZjcHVzKQomIzQzOwkJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksICZhbXA7YXZhaWxhYmxlX2NwdXMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07CiYjNDM7CiYjNDM7CQl3aGlsZSAoIVNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3RfcmVhZHlfZm9yX2lycXNbdmNwdS0mZ3Q7aWRdKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpcnFfY3B1ID0gLTE7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9pcnFzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgYm9vbCBkb19zZXRfZW1wdHlfcm91dGluZyA9IHNldF9lbXB0eV9yb3V0aW5nICZhbXA7JmFtcDsgKGkgJmFtcDsgQklUKDMpKTsKJiM0MzsJCWNvbnN0IGJvb2wgZG9fdXNlX25taSA9IHVzZV9ubWkgJmFtcDsmYW1wOyAoaSAmYW1wOyBCSVQoMikpOwomIzQzOwkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBzdGFydDsKJiM0MzsKJiM0MzsJCWlmIChkb19zZXRfZW1wdHlfcm91dGluZykKJiM0MzsJCQlrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHZtKTsKJiM0MzsKJiM0MzsJCWt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTsKJiM0MzsKJiM0MzsJCWlmIChpcnFfYWZmaW5pdHkpIHsKJiM0MzsJCQlpcnFfY3B1ID0ga3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTsKJiM0MzsJCQlwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KGlycSwgaXJxX2NwdSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobWlncmF0ZV92Y3B1cykKJiM0MzsJCQlwaW5fdGFza190b19yYW5kb21fY3B1KHZjcHVfdGhyZWFkc1tpICUgbnJfdmNwdXNdLCAmYW1wO2F2YWlsYWJsZV9jcHVzKTsKJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBucl92Y3B1czsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfSVJRKHZjcHVzW2pdKSwKJiM0MzsJCQkJICAgICYjMzQ7SVJRIGZsYWcgZm9yIHZDUFUgJWQgbm90IGNsZWFyIHByaW9yIHRvIHRlc3QmIzM0OywKJiM0MzsJCQkJICAgIHZjcHVzW2pdLSZndDtpZCk7CiYjNDM7CQkJVEVTVF9BU1NFUlQoIUdVRVNUX1JFQ0VJVkVEX05NSSh2Y3B1c1tqXSksCiYjNDM7CQkJCSAgICAmIzM0O05NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0JiMzNDssCiYjNDM7CQkJCSAgICB2Y3B1c1tqXS0mZ3Q7aWQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHJpZ2dlcl9pbnRlcnJ1cHQoZGV2aWNlLCBldmVudGZkKTsKJiM0MzsKJiM0MzsJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3N0YXJ0KTsKJiM0MzsJCXdoaWxlICghR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICB0aW1lc3BlY190b19ucyh0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSkgJmx0Oz0gdGltZW91dF9ucykKJiM0MzsJCQljcHVfcmVsYXgoKTsKJiM0MzsKJiM0MzsJCVRFU1RfQVNTRVJUKEdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSwKJiM0MzsJCQkgICAgJiMzNDt2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxuJiMzNDssCiYjNDM7CQkJICAgIHZjcHUtJmd0O2lkLCBkb191c2Vfbm1pID8gJiMzNDtOTUkmIzM0OyA6ICYjMzQ7SVJRJiMzNDssCiYjNDM7CQkJICAgIGRvX3VzZV9ubWkgPyBOTUlfVkVDVE9SIDogdmVjdG9yLCBnc2ksIGlycV9jcHUpOwomIzQzOwomIzQzOwkJaWYgKGRvX3VzZV9ubWkpCiYjNDM7CQkJV1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX25taVt2Y3B1LSZndDtpZF0sIGZhbHNlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxW3ZjcHUtJmd0O2lkXSwgZmFsc2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwppbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKIAogI2lmZGVmIF9fR0xJQkNfXwogI2luY2x1ZGUgJmx0O2V4ZWNpbmZvLmgmZ3Q7CkBAIC02NCwxMSAmIzQzOzY1LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9kdW1wX3N0YWNrKHZvaWQpCiBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZCkge30KICNlbmRpZgogCi1zdGF0aWMgcGlkX3QgX2dldHRpZCh2b2lkKQotewotCXJldHVybiBzeXNjYWxsKFNZU19nZXR0aWQpOwotfQotCiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCWNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTgxLDcgJiM0Mzs3Nyw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxuJiMzNDsKIAkJCSYjMzQ7ICAlczoldTogJXNcbiYjMzQ7CiAJCQkmIzM0OyAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXG4mIzM0OywKLQkJCWZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBfZ2V0dGlkKCksCiYjNDM7CQkJZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSwKIAkJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOwogCQl0ZXN0X2R1bXBfc3RhY2soKTsKIAkJaWYgKGZtdCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDE5NWYzZmRhZTFlMzk2Li4zNzk0NTc1ZDJjYTBjZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwpAQCAtMTUsMTQgJiM0MzsxNSwyMiBAQAogI2luY2x1ZGUgJmx0O3N5cy9yZXNvdXJjZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKIAogI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOCTIKIAotdTMyIGd1ZXN0X3JhbmRvbV9zZWVkOwotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7Ci1zdGF0aWMgdTMyIGxhc3RfZ3Vlc3Rfc2VlZDsKJiM0Mzt1MzIga3ZtX3JhbmRvbV9zZWVkOwomIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIGt2bV9ybmc7CiYjNDM7c3RhdGljIHUzMiBsYXN0X2t2bV9zZWVkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9zZWVkX3JuZyh1MzIgc2VlZCkKJiM0Mzt7CiYjNDM7CWt2bV9yYW5kb21fc2VlZCA9IGxhc3Rfa3ZtX3NlZWQgPSBzZWVkOwomIzQzOwlwcl9pbmZvKCYjMzQ7UmFuZG9tIHNlZWQ6IDB4JXhcbiYjMzQ7LCBrdm1fcmFuZG9tX3NlZWQpOwomIzQzOwlrdm1fcm5nID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkKTsKJiM0Mzt9CiAKIHN0YXRpYyBzaXplX3QgdmNwdV9tbWFwX3N6KHZvaWQpOwogCkBAIC01MTUsMTIgJiM0Mzs1MjMsMTAgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsCiAJc2xvdDAgPSBtZW1zbG90MnJlZ2lvbih2bSwgMCk7CiAJdWNhbGxfaW5pdCh2bSwgc2xvdDAtJmd0O3JlZ2lvbi5ndWVzdF9waHlzX2FkZHIgJiM0Mzsgc2xvdDAtJmd0O3JlZ2lvbi5tZW1vcnlfc2l6ZSk7CiAKLQlpZiAoZ3Vlc3RfcmFuZG9tX3NlZWQgIT0gbGFzdF9ndWVzdF9zZWVkKSB7Ci0JCXByX2luZm8oJiMzNDtSYW5kb20gc2VlZDogMHgleFxuJiMzNDssIGd1ZXN0X3JhbmRvbV9zZWVkKTsKLQkJbGFzdF9ndWVzdF9zZWVkID0gZ3Vlc3RfcmFuZG9tX3NlZWQ7Ci0JfQotCWd1ZXN0X3JuZyA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQpOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9ybmcpOwomIzQzOwlpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpCiYjNDM7CQlrdm1fc2VlZF9ybmcoa3ZtX3JhbmRvbV9zZWVkKTsKJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpOwogCiAJa3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTsKIApAQCAtNjYyLDE5ICYjNDM7NjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpCiAJICAgICAgICYjMzQ7ICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcbiYjMzQ7LCBuYW1lLCBuYW1lKTsKIH0KIAomIzQzO3ZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQomIzQzO3sKJiM0MzsJaW50IHRhcmdldF9pZHg7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpOwomIzQzOwlURVNUX0FTU0VSVChucl9jcHVzICZndDsgMCwgJiMzNDtObyBDUFVzIGF2YWlsYWJsZSBpbiBwb3NzaWJsZV9jcHVzJiMzNDspOwomIzQzOwomIzQzOwl0YXJnZXRfaWR4ID0ga3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIG5yX2NwdXM7CiYjNDM7CiYjNDM7CWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChDUFVfSVNTRVQoY3B1LCBwb3NzaWJsZV9jcHVzKSAmYW1wOyZhbXA7IHRhcmdldF9pZHgtLSA9PSAwKSB7CiYjNDM7CQkJcGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CVRFU1RfRkFJTCgmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1cyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sCiAJCQkgICAgaW50IG5yX3ZjcHVzKQogewogCWNwdV9zZXRfdCBhbGxvd2VkX21hc2s7CiAJY2hhciAqY3B1LCAqY3B1X2xpc3Q7CiAJY2hhciBkZWxpbVsyXSA9ICYjMzQ7LCYjMzQ7OwotCWludCBpLCByOwomIzQzOwlpbnQgaTsKIAogCWNwdV9saXN0ID0gc3RyZHVwKHBjcHVzX3N0cmluZyk7CiAJVEVTVF9BU1NFUlQoY3B1X2xpc3QsICYjMzQ7c3RyZHVwKCkgYWxsb2NhdGlvbiBmYWlsZWQuJiMzNDspOwogCi0JciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCAmYW1wO2FsbG93ZWRfbWFzayk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkoKSBmYWlsZWQmIzM0Oyk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgJmFtcDthbGxvd2VkX21hc2spOwogCiAJY3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7CiAKQEAgLTIyNzksOCAmIzQzOzIzMDUsOCBAQCB2b2lkIF9fYXR0cmlidXRlKChjb25zdHJ1Y3RvcikpIGt2bV9zZWxmdGVzdF9pbml0KHZvaWQpCiAJc2lnYWN0aW9uKFNJR0lMTCwgJmFtcDtzaWdfc2EsIE5VTEwpOwogCXNpZ2FjdGlvbihTSUdGUEUsICZhbXA7c2lnX3NhLCBOVUxMKTsKIAotCWd1ZXN0X3JhbmRvbV9zZWVkID0gbGFzdF9ndWVzdF9zZWVkID0gcmFuZG9tKCk7Ci0JcHJfaW5mbygmIzM0O1JhbmRvbSBzZWVkOiAweCV4XG4mIzM0OywgZ3Vlc3RfcmFuZG9tX3NlZWQpOwomIzQzOwlzcmFuZG9tKHRpbWUoMCkpOwomIzQzOwlrdm1fc2VlZF9ybmcocmFuZG9tKCkpOwogCiAJa3ZtX3NlbGZ0ZXN0X2FyY2hfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKaW5kZXggNmRjZDE1OTEwYTA2MDguLjM1OTliNzVkOTdjOTE5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKQEAgLTQ4LDE0ICYjNDM7NDgsMTQgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpCiB7CiAJc3RydWN0IG1lbXN0cmVzc19hcmdzICphcmdzID0gJmFtcDttZW1zdHJlc3NfYXJnczsKIAlzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzID0gJmFtcDthcmdzLSZndDt2Y3B1X2FyZ3NbdmNwdV9pZHhdOwotCXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTsKJiM0MzsJc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTsKIAlndmFfdCBndmE7CiAJdTY0IHBhZ2VzOwogCXU2NCBhZGRyOwogCXU2NCBwYWdlOwogCWludCBpOwogCi0JcmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgJiM0MzsgdmNwdV9pZHgpOwomIzQzOwlyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTsKIAogCWd2YSA9IHZjcHVfYXJncy0mZ3Q7Z3ZhOwogCXBhZ2VzID0gdmNwdV9hcmdzLSZndDtwYWdlczsKQEAgLTY5LDEzICYjNDM7NjksMTMgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpCiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHBhZ2VzOyBpJiM0MzsmIzQzOykgewogCQkJaWYgKGFyZ3MtJmd0O3JhbmRvbV9hY2Nlc3MpCi0JCQkJcGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoJmFtcDtyYW5kX3N0YXRlKSAlIHBhZ2VzOwomIzQzOwkJCQlwYWdlID0ga3ZtX3JhbmRvbV91MzIoJmFtcDtyYW5kX3N0YXRlKSAlIHBhZ2VzOwogCQkJZWxzZQogCQkJCXBhZ2UgPSBpOwogCiAJCQlhZGRyID0gZ3ZhICYjNDM7IChwYWdlICogYXJncy0mZ3Q7Z3Vlc3RfcGFnZV9zaXplKTsKIAotCQkJaWYgKF9fZ3Vlc3RfcmFuZG9tX2Jvb2woJmFtcDtyYW5kX3N0YXRlLCBhcmdzLSZndDt3cml0ZV9wZXJjZW50KSkKJiM0MzsJCQlpZiAoX19rdm1fcmFuZG9tX2Jvb2woJmFtcDtyYW5kX3N0YXRlLCBhcmdzLSZndDt3cml0ZV9wZXJjZW50KSkKIAkJCQkqKHU2NCAqKWFkZHIgPSAweDAxMjM0NTY3ODlBQkNERUY7CiAJCQllbHNlCiAJCQkJUkVBRF9PTkNFKCoodTY0ICopYWRkcik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk2MGIzODQxZDYzNzAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jCkBAIC0wLDAgJiM0MzsxLDU0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY191dGlsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBGSUxFICpvcGVuX3Byb2NfaW50ZXJydXB0cyh2b2lkKQomIzQzO3sKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CWZwID0gZm9wZW4oJiMzNDsvcHJvYy9pbnRlcnJ1cHRzJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQoZnAsICYjMzQ7Zm9wZW4oL3Byb2MvaW50ZXJydXB0cykgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZnA7CiYjNDM7fQomIzQzOwomIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpCiYjNDM7ewomIzQzOwljaGFyIHNlYXJjaF9zdHJpbmdbNjRdOwomIzQzOwljaGFyIGxpbmVbNDA5Nl07CiYjNDM7CWludCBpcnEgPSAtMTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CWZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTsKJiM0MzsKJiM0MzsJc25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCAmIzM0O3ZmaW8tbXNpeFslZF0mIzM0OywgbXNpeCk7CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHN0cnN0cihsaW5lLCBkZXZpY2VfYmRmKSAmYW1wOyZhbXA7IHN0cnN0cihsaW5lLCBzZWFyY2hfc3RyaW5nKSkgewomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKDEsIHNzY2FuZihsaW5lLCAmIzM0OyVkOiYjMzQ7LCAmYW1wO2lycSkpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKGlycSAhPSAtMSwgJiMzNDtGYWlsZWQgdG8gbG9jYXRlIElSUSBmb3IgJXMgJXMmIzM0OywgZGV2aWNlX2JkZiwKJiM0MzsJCSAgICBzZWFyY2hfc3RyaW5nKTsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CWludCByLCBmZDsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jL2lycS8ldS9zbXBfYWZmaW5pdHlfbGlzdCYjMzQ7LCBpcnEpOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKJiM0MzsJVEVTVF9BU1NFUlQoZmQgJmd0Oz0gMCwgJiMzNDtGYWlsZWQgdG8gb3BlbiAlcyYjMzQ7LCBwYXRoKTsKJiM0MzsKJiM0MzsJciA9IGRwcmludGYoZmQsICYjMzQ7JWRcbiYjMzQ7LCBjcHUpOwomIzQzOwlURVNUX0FTU0VSVChyICZndDsgMCwgJiMzNDtGYWlsZWQgdG8gYWZmaW5pdGl6ZSBJUlEtJXUgdG8gQ1BVICVkJiMzNDssIGlycSwgY3B1KTsKJiM0MzsKJiM0MzsJa3ZtX2Nsb3NlKGZkKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwppbmRleCBiYWIxYmQyYjc3NWI2ZC4uNmIwMGFiMTFmM2MwMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICYjMzQ7bGludXgva2VybmVsLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKIAogc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjsKIApAQCAtMzAsMTggJiM0MzszMSwzNiBAQCB2b2lkIF9fYXR0cmlidXRlX18oKHVzZWQpKSBleHBlY3Rfc2lnYnVzX2hhbmRsZXIoaW50IHNpZ251bSkKICAqIFBhcmstTWlsbGVyIExDRyB1c2luZyBzdGFuZGFyZCBjb25zdGFudHMuCiAgKi8KIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKQomIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIG5ld19rdm1fcmFuZG9tX3N0YXRlKHUzMiBzZWVkKQogewotCXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgcyA9IHsuc2VlZCA9IHNlZWR9OwomIzQzOwlzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07CiAJcmV0dXJuIHM7CiB9CiAKLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKQomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RhdGUtJmd0O3NlZWQgPSAodTY0KXN0YXRlLSZndDtzZWVkICogNDgyNzEgJSAoKHUzMikoMSAmbHQ7Jmx0OyAzMSkgLSAxKTsKIAlyZXR1cm4gc3RhdGUtJmd0O3NlZWQ7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi8KJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAomIzQzOwkJCSAgICB1NjQgbWF4KQomIzQzO3sKJiM0MzsJdTY0IHZhbHVlOwomIzQzOwl1NjQgcmFuZ2U7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKG1pbiAmbHQ7PSBtYXgsICYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHgmIzM0OywgbWluLCBtYXgpOwomIzQzOwomIzQzOwl2YWx1ZSA9IGt2bV9yYW5kb21fdTY0KHN0YXRlKTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtYXggLSBtaW47CiYjNDM7CWlmIChyYW5nZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFBhcnNlcyAmIzM0O1swLTldJiM0Mztba21ndF0/JiMzNDsuCiAgKi8KQEAgLTM3Nyw3ICYjNDM7Mzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpCiAJbG9uZyB2YWxbMl07CiAJRklMRSAqZnA7CiAKLQlzcHJpbnRmKHBhdGgsICYjMzQ7L3Byb2MvJWxkL3NjaGVkc3RhdCYjMzQ7LCBzeXNjYWxsKFNZU19nZXR0aWQpKTsKJiM0MzsJc3ByaW50ZihwYXRoLCAmIzM0Oy9wcm9jLyVsZC9zY2hlZHN0YXQmIzM0OywgKGxvbmcpa3ZtX2dldHRpZCgpKTsKIAlmcCA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKIAkvKiBSZXR1cm4gTUlOX1JVTl9ERUxBWV9OUyB1cG9uIGZhaWx1cmUganVzdCB0byBiZSBzYWZlICovCiAJaWYgKGZzY2FuZihmcCwgJiMzNDslbGQgJWxkICYjMzQ7LCAmYW1wO3ZhbFswXSwgJmFtcDt2YWxbMV0pICZsdDsgMikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwppbmRleCA1NGQyODE0MTlkMzEwNC4uM2Q1ZjMzYTYzYjJiNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMKQEAgLTE1NSwxMCAmIzQzOzE1NSw4IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3dvcmtlcih2b2lkICpkYXRhKQogCQkgICAgJiMzNDtFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkJiMzNDssIHIsIGVycm5vKTsKIAogCWF0b21pY19pbmMoJmFtcDtucl9yb19mYXVsdHMpOwotCWlmIChhdG9taWNfcmVhZCgmYW1wO25yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpIHsKLQkJV1JJVEVfT05DRShhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGFsbF92Y3B1c19oaXRfcm9fZmF1bHQpOwotCX0KJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykKJiM0MzsJCVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTsKIAogI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIAkvKgpAQCAtMjU3LDExICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSkKIHN0YXRpYyB2b2lkIGNhbGNfZGVmYXVsdF9ucl92Y3B1cyh2b2lkKQogewogCWNwdV9zZXRfdCBwb3NzaWJsZV9tYXNrOwotCWludCByOwotCi0JciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgJmFtcDtwb3NzaWJsZV9tYXNrKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtzY2hlZF9nZXRhZmZpbml0eSBmYWlsZWQsIGVycm5vID0gJWQgKCVzKSYjMzQ7LAotCQkgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksICZhbXA7cG9zc2libGVfbWFzayk7CiAKIAlucl92Y3B1cyA9IENQVV9DT1VOVCgmYW1wO3Bvc3NpYmxlX21hc2spOwogCVRFU1RfQVNTRVJUKG5yX3ZjcHVzICZndDsgMCwgJiMzNDtVaCwgbm8gQ1BVcz8mIzM0Oyk7CkBAIC0zODMsOCAmIzQzOzM3Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcmVuZGV6dm91c193aXRoX3ZjcHVzKCZhbXA7dGltZV9ydW4yLCAmIzM0O3J1biAyJiMzNDspOwogCiAJbXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7Ci0JbXByb3RlY3Rfcm9fZG9uZSA9IHRydWU7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG1wcm90ZWN0X3JvX2RvbmUpOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7CiAKIAlyZW5kZXp2b3VzX3dpdGhfdmNwdXMoJmFtcDt0aW1lX3JvLCAmIzM0O21wcm90ZWN0IFJPJiMzNDspOwogCW1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwppbmRleCBmODBhZDZiNDdkMTZiMC4uNTU3ZTM5M2MyMjNiOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMKQEAgLTIyNiw5ICYjNDM7MjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJfQogCX0KIAotCXIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksICZhbXA7cG9zc2libGVfbWFzayk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcykmIzM0OywgZXJybm8sCi0JCSAgICBzdHJlcnJvcihlcnJubykpOwomIzQzOwlrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCAmYW1wO3Bvc3NpYmxlX21hc2spOwogCiAJY2FsY19taW5fbWF4X2NwdSgpOwogCkBAIC0yNDQsNyAmIzQzOzI0Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwogCiAJcHRocmVhZF9jcmVhdGUoJmFtcDttaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLAotCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylzeXNjYWxsKFNZU19nZXR0aWQpKTsKJiM0MzsJCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7CiAKIAlpZiAobGF0ZW5jeSAmZ3Q7PSAwKSB7CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwppbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpCiB7CiAJLyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovCi0Jc3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS0mZ3Q7dm0sIHN0X2d2YVtpXSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtJmd0O3ZtLCBzdF9ndmFbaV0sCiYjNDM7CQkJCSh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpKTsKIAogCXZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsICh1bG9uZylzdF9ndmFbaV0gfCBLVk1fTVNSX0VOQUJMRUQpOwogfQpAQCAtMTg3LDggJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSkKIAl9OwogCiAJLyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovCi0Jc3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpKTsKIAogCXN0X2lwYSA9ICh1bG9uZylzdF9ndmFbaV07CiAJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2Rldik7CkBAIC0zMTAsMTAgJiM0MzszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSkKIHsKIAkvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi8KLQlzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKTsKLQlzdF9ncGFbaV0gPSBhZGRyX2d2YTJncGEodmNwdS0mZ3Q7dm0sIChndmFfdClzdF9ndmFbaV0pOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtJmd0O3ZtLCBzdF9ndmFbaV0pOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtJmd0O3ZtLCBzdF9ncGFbaV0pOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LSZndDt2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtJmd0O3ZtLCBzdF9ncGFbaV0sIGFkZHJfZ3ZhMmdwYSh2Y3B1LSZndDt2bSwgKGd2YV90KXN0X2d2YVtpXSkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2R1bXAoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkeCkKQEAgLTQ0Miw4ICYjNDM7NDM5LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpCiAJfTsKIAogCS8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqLwotCXN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmFbaV0pOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7CiAKIAllcnIgPSBfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgJmFtcDthdHRyKTsKIAlURVNUX0FTU0VSVChlcnIgPT0gMCwgJiMzNDtObyBQViBzdGVhbHRpbWUgRmVhdHVyZSYjMzQ7KTsKQEAgLTU0OSw4ICYjNDM7NTQ1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAKIAkJLyogU2Vjb25kIFZDUFUgcnVuLCBleHBlY3QgZ3Vlc3Qgc3RvbGVuIHRpbWUgdG8gYmUgJmx0Oz0gcnVuX2RlbGF5ICovCiAJCXJ1bl92Y3B1KHZjcHVzW2ldKTsKLQkJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pOwotCQlzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldOwomIzQzOwkJc3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTsKIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwogCQlURVNUX0FTU0VSVChzdG9sZW5fdGltZSAmbHQ7PSBydW5fZGVsYXksCiAJCQkgICAgJiMzNDtFeHBlY3RlZCBzdG9sZW4gdGltZSAmbHQ7PSAlbGQsIGdvdCAlbGQmIzM0OywKQEAgLTU3MCw4ICYjNDM7NTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAKIAkJLyogUnVuIFZDUFUgYWdhaW4gdG8gY29uZmlybSBzdG9sZW4gdGltZSBpcyBjb25zaXN0ZW50IHdpdGggcnVuX2RlbGF5ICovCiAJCXJ1bl92Y3B1KHZjcHVzW2ldKTsKLQkJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pOwotCQlzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldIC0gc3RvbGVuX3RpbWU7CiYjNDM7CQlzdG9sZW5fdGltZSA9IFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pIC0gc3RvbGVuX3RpbWU7CiAJCVRFU1RfQVNTRVJUKHN0b2xlbl90aW1lICZndDs9IHJ1bl9kZWxheSwKIAkJCSAgICAmIzM0O0V4cGVjdGVkIHN0b2xlbiB0aW1lICZndDs9ICVsZCwgZ290ICVsZCYjMzQ7LAogCQkJICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMKaW5kZXggYTlkOGU0YzA1OWY5NjkuLmVhYTgyMDFiOTM3ZDMwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMKQEAgLTM0LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlX2J1ZmZlcnModm9pZCkKIAogc3RhdGljIHZvaWQgX19fX3Rlc3Rfc2V2X2RiZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGksIGludCBqLCBpbnQgbnJfYnl0ZXMpCiB7Ci0JdTggcGF0dGVybiA9IGd1ZXN0X3JhbmRvbV91MzIoJmFtcDtndWVzdF9ybmcpOwomIzQzOwl1OCBwYXR0ZXJuID0ga3ZtX3JhbmRvbV91MzIoJmFtcDtrdm1fcm5nKTsKIAogCWlmIChpICYjNDM7IG5yX2J5dGVzICZndDsgQlVGRkVSX1NJWkUgfHwgaiAmIzQzOyBucl9ieXRlcyAmZ3Q7IEJVRkZFUl9TSVpFKQogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODE4CgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogODg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IHRlc3QsIGBpcnFfdGVzdC5jYCwgYW5kIG1ha2luZyBhIGZldyBjaGFuZ2VzIHRvIGV4aXN0aW5nIHRlc3QgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSByZW5hbWluZyBvZiBgZ3Vlc3RfcmFuZG9tXypgIHRvIGBrdm1fcmFuZG9tXypgIGFuZCBhIGJpdCBvZiBmaWxlIHJlb3JnYW5pemF0aW9uIHRvby4gIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCBvciB1bnJlYWNoYWJsZSBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgKmVudGlyZWx5KiBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiAgU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gVGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlLiAgSSBuZWVkIHRvIGJlIHZlcnkgc3VyZSBhYm91dCB0aGlzLCBzbyBJ4oCZbSBkb3VibGUtY2hlY2tpbmcgdGhlIGNoYW5nZWQgZmlsZXMuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiwgdmVyaWZ5aW5nIHRoYXQgZXZlcnkgc2luZ2xlIGZpbGUgaXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIExldCYjMzk7cyBzZWU6IGBNYWtlZmlsZS5rdm1gLCBgYXJjaF90aW1lci5jYCwgYGFybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgdGhlIGRpcnR5IGxvZyB0ZXN0cywgYWxsIHRoZSBpbmNsdWRlIGhlYWRlcnMsIGBpcnFfdGVzdC5jYCwgdGhlIGxpYnJhcnkgZmlsZXMgKGBhc3NlcnQuY2AsIGBrdm1fdXRpbC5jYCwgZXRjLiksIHRoZSBtZW1vcnkgc3RyZXNzIHRlc3QsIFJTRVEgdGVzdCwgc3RlYWwgdGltZSwgYW5kIHRoZSBTRVYgZGVidWcgdGVzdCwgYWxsIHdpdGhpbiB0aGUgYGt2bWAgc2VsZnRlc3RzIGRpcmVjdG9yeS4KCll1cCwgaXQmIzM5O3MgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoaXMgY29uZmlybXMgaXQmIzM5O3Mgc3RyaWN0bHkgdGVzdCBjb2RlLCBub3QgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgd291bGQgaW1wYWN0IHRoZSAqa2VybmVsJiMzOTtzKiBleGVjdXRpb24gZmxvdy4gIFRoZSBwcm9tcHQgZGlyZWN0cyBtZSB0byB1c2UgbXkgY29kZSBzZWFyY2ggdG9vbHMgaWYgdGhpcyB3ZXJlIHRvIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBidXQgc2luY2UgaXQgaXMgc2VsZi10ZXN0cywgdGhlcmUmIzM5O3Mgbm8gbmVlZC4gU2luY2UgSeKAmXZlIGVzdGFibGlzaGVkIHRoYXQgaXQgKm9ubHkqIHRvdWNoZXMgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJvbXB0IHNwZWNpZmllcyBub3QgdG8gZnV6eiBpdCBpZiBpdCB0b3VjaGVzICpvbmx5KiB0ZXN0IGNvZGUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEnigJlsbCBkb3VibGUtY2hlY2sgdGhlIGRpZmYgb25lIGxhc3QgdGltZSB0byBiZSBleHRyYSBzdXJlLCBidXQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gb3RoZXIgZmlsZXMgaW52b2x2ZWQuCgpNeSBmaW5hbCBkZXRlcm1pbmF0aW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gS1ZNIHNlbGZ0ZXN0cywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdHMgYW5kIGRvbiYjMzk7dCBtb2RpZnkga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTozOTozNS4zMjM2NTYxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTk5MDEzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6Mzk6MzUuMzIzNjYzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODkwMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGZlNjAxMTBkY2VkN2E5NmM3OTNjN2NkM2MwYzRmMjY0OTQ5ZDBmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDRhY2UxMjYwNmU5MzdiLi44OGM2YzgwNDZkZGVjMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0xMSw2ICsxMSw3IEBAIExJQktWTSArPSBsaWIva3ZtX3V0aWwuY1xcbiBMSUJLVk0gKz0gbGliL2xydV9nZW5fdXRpbC5jXFxuIExJQktWTSArPSBsaWIvbWVtc3RyZXNzLmNcXG4gTElCS1ZNICs9IGxpYi9ndWVzdF9zcHJpbnRmLmNcXG4rTElCS1ZNICs9IGxpYi9wcm9jX3V0aWwuY1xcbiBMSUJLVk0gKz0gbGliL3JidHJlZS5jXFxuIExJQktWTSArPSBsaWIvc3BhcnNlYml0LmNcXG4gTElCS1ZNICs9IGxpYi90ZXN0X3V0aWwuY1xcbkBAIC0xNTcsNiArMTU4LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGNvYWxlc2NlZF9pb190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBkaXJ0eV9sb2dfcGVyZl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBoYXJkd2FyZV9kaXNhYmxlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGlycV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHJzZXFfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZVxcbkBAIC0yNTksNiArMjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcXG4gIyB3aGljaCBjYXVzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJyaWRlIHRoZSBtYWtlZmlsZSkuXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcXG4raW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuIFxcbiBJTlNUQUxMX0hEUl9QQVRIID0gJCh0b3Bfc3JjZGlyKS91c3JcXG4gTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvXFxuQEAgLTMxMyw3ICszMTYsOSBAQCBMSUJLVk1fUyA6PSAkKGZpbHRlciAlLlMsJChMSUJLVk0pKVxcbiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKVxcbiBMSUJLVk1fU19PQkogOj0gJChwYXRzdWJzdCAlLlMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX1MpKVxcbiBMSUJLVk1fU1RSSU5HX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fU1RSSU5HKSlcXG4tTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pXFxuK0xJQktWTV9PQkpTID0gJChMSUJLVk1fQ19PQkopICQoTElCS1ZNX1NfT0JKKSAkKExJQktWTV9TVFJJTkdfT0JKKVxcbitMSUJLVk1fT0JKUyArPSAkKExJQkNHUk9VUF9PKVxcbitMSUJLVk1fT0JKUyArPSAkKExJQlZGSU9fTylcXG4gU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpXFxuIFNQTElUX1RFU1RfR0VOX09CSiA6PSAkKHBhdHN1YnN0ICUsICQoT1VUUFVUKS8kKEFSQ0gpLyUubywgJChTUExJVF9URVNUUykpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDkwYzQ3NWE2MWIyMmI2Li5mOGIwMjU5Nzg5N2JkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB1MzIgdGVzdF9nZXRfcGNwdSh2b2lkKVxcbiBcXHRjcHVfc2V0X3Qgb25saW5lX2NwdXNldDtcXG4gXFxuIFxcdG5wcm9jX2NvbmYgPSBnZXRfbnByb2NzX2NvbmYoKTtcXG4tXFx0c2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksIFxcdTAwMjZvbmxpbmVfY3B1c2V0KTtcXG4rXFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcXHUwMDI2b25saW5lX2NwdXNldCk7XFxuIFxcbiBcXHQvKiBSYW5kb21seSBmaW5kIGFuIGF2YWlsYWJsZSBwQ1BVIHRvIHBsYWNlIGEgdkNQVSBvbiAqL1xcbiBcXHRkbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xcbmluZGV4IGY3NjI1ZWI3MTFkNmI4Li5kOWM5Mzc3YTYzMjU2ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcXG5AQCAtMTAzOSw3ICsxMDM5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0aWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKVxcbiBcXHRcXHRleGl0KEtTRlRfU0tJUCk7XFxuIFxcbi1cXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcXHUwMDI2ZGVmYXVsdF9jcHVzZXQpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGRlZmF1bHRfY3B1c2V0KSwgXFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcXG4gXFx0c2V0X2NvdW50ZXJfZGVmYXVsdHMoKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2FyZ3MudGVzdF92aXJ0dWFsKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xcbmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcXG5AQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxcbiBzdGF0aWMgaW50IGhhbmRsZV91ZmZkX3BhZ2VfcmVxdWVzdChpbnQgdWZmZF9tb2RlLCBpbnQgdWZmZCxcXG4gXFx0XFx0c3RydWN0IHVmZmRfbXNnICptc2cpXFxuIHtcXG4tXFx0cGlkX3QgdGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XFxuK1xcdHBpZF90IHRpZCA9IGt2bV9nZXR0aWQoKTtcXG4gXFx0dTY0IGFkZHIgPSBtc2ctXFx1MDAzZWFyZy5wYWdlZmF1bHQuYWRkcmVzcztcXG4gXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5pbmRleCBlZjc3OWZhOTE4MjdjOS4uN2M1YWJlMWFlOWUwMTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5AQCAtMzExLDcgKzMxMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGludCBvcHQ7XFxuIFxcbiBcXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXFxuLVxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gMTtcXG4rXFx0a3ZtX3JhbmRvbV9zZWVkID0gMTtcXG4gXFxuIFxcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XFxuIFxcdFxcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFxcdFxcdHAucGh5c19vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAncic6XFxuLVxcdFxcdFxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gYXRvaV9wb3NpdGl2ZShcXFwiUmFuZG9tIHNlZWRcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFxcXCJSYW5kb20gc2VlZFxcXCIsIG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdzJzpcXG4gXFx0XFx0XFx0cC5iYWNraW5nX3NyYyA9IHBhcnNlX2JhY2tpbmdfc3JjX3R5cGUob3B0YXJnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbmluZGV4IDc0Y2EwOTZiZjk3NmI1Li5lODQxOWQ3ZGExZWFiNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdHdoaWxlICghUkVBRF9PTkNFKHZjcHVfc3RvcCkpIHtcXG4gXFx0XFx0XFx0YWRkciA9IGd1ZXN0X3Rlc3RfdmlydF9tZW07XFxuLVxcdFxcdFxcdGFkZHIgKz0gKGd1ZXN0X3JhbmRvbV91NjQoXFx1MDAyNmd1ZXN0X3JuZykgJSBndWVzdF9udW1fcGFnZXMpXFxuK1xcdFxcdFxcdGFkZHIgKz0gKGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcXG4gXFx0XFx0XFx0XFx0KiBndWVzdF9wYWdlX3NpemU7XFxuIFxcdFxcdFxcdGFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTtcXG4gXFxuQEAgLTcwOCw4ICs3MDgsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0XFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XFxuIFxcbi1cXHRcXHRXUklURV9PTkNFKG5yX3dyaXRlcywgMCk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBucl93cml0ZXMpO1xcbitcXHRcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTtcXG4gXFxuIFxcdFxcdGRpcnR5X3JpbmdfcHJldl9pdGVyYXRpb25fbGFzdF9wYWdlID0gZGlydHlfcmluZ19sYXN0X3BhZ2U7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGlydHlfcmluZ192Y3B1X3JpbmdfZnVsbCwgZmFsc2UpO1xcbkBAIC03NzUsMTYgKzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRcXHQgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkXFxuIFxcdFxcdCAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbidzIHZhbHVlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xcbi1cXHRcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcXG4rXFx0XFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgdHJ1ZSk7XFxuIFxcdFxcdHNlbV93YWl0KFxcdTAwMjZzZW1fdmNwdV9zdG9wKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENsZWFyIHZjcHVfc3RvcCBhZnRlciB0aGUgdkNQVSB0aHJlYWQgaGFzIGFja25vd2xlZGdlIHRoZVxcbiBcXHRcXHQgKiBzdG9wIHJlcXVlc3QgYW5kIGlzIHdhaXRpbmcsIGkuZS4gaXMgZGVmaW5pdGVseSBub3QgcnVubmluZyFcXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdV9zdG9wLCBmYWxzZSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB2Y3B1X3N0b3ApO1xcbitcXHRcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCBmYWxzZSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxcbmluZGV4IDZjYjNiZWQyOWI4MWFiLi41ZGFlNjE0M2RkYjA0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3V0aWwuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUFQX0FSR1MwKG0sLi4uKVxcbkBAIC04MywxMSArODQsMTcgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX2R1cChpbnQgZmQpXFxuIFxcdHJldHVybiBuZXdfZmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgcGlkX3Qga3ZtX2dldHRpZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcXG4rfVxcbitcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobXVubWFwLCAyLCB2b2lkICosIG1lbSwgc2l6ZV90LCBzaXplKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpO1xcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmYWxsb2NhdGUsIDQsIGludCwgZmQsIGludCwgbW9kZSwgbG9mZl90LCBvZmZzZXQsIGxvZmZfdCwgbGVuKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShzY2hlZF9nZXRhZmZpbml0eSwgMywgcGlkX3QsIHBpZCwgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgbWFzayk7XFxuIFxcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVxcdFxcdFxcXFxcXG4gZG8ge1xcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5pbmRleCAwNGE5MTAxNjRhMjk2YS4uYjM5ZTcxM2MzMGE0NjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMTA5NCw2ICsxMDk0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcXG4gXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJGYWlsZWQgdG8gc2V0IHRocmVhZCBhZmZpbml0eSB0byBwQ1BVICcldSdcXFwiLCBjcHUpO1xcbiB9XFxuIFxcbit2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxcbiB7XFxuIFxcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcXG5AQCAtMTEzOCw2ICsxMTQwLDE2IEBAIHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHVuc2lnbmVkIGludCBudW1fZ3Vlc3RfcGFnZXMpXFxuIFxcdG1lbWNweShcXHUwMDI2KGcpLCBfcCwgc2l6ZW9mKGcpKTtcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbisjZGVmaW5lIFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRChfdm0sIF92YXJpYWJsZSkgKHtcXHRcXHRcXFxcXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1xcdFxcdFxcdFxcXFxcXG4rXFx0UkVBRF9PTkNFKF92YXJpYWJsZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBXUklURV9BTkRfU1lOQ19UT19HVUVTVChfdm0sIF92YXJpYWJsZSwgX3ZhbHVlKSBkbyB7XFx0XFxcXFxcbitcXHRXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KF92bSwgX3ZhcmlhYmxlKTtcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBXcml0ZSBhIGdsb2JhbCB2YWx1ZSwgYnV0IG9ubHkgaW4gdGhlIFZNJ3MgKGd1ZXN0J3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkXFxuICAqIGZvciBcXFwiZ2xvYmFsc1xcXCIgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcXG5AQCAtMCwwICsxLDExIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcXG4rI2RlZmluZSBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rXFxuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7XFxuK1xcbit2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7XFxuK1xcbisjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0xMDgsMzIgKzEwOCwzNSBAQCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfc3ViKHN0cnVjdCB0aW1lc3BlYyB0czEsIHN0cnVjdCB0aW1lc3BlYyB0czIpO1xcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpO1xcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZGl2KHN0cnVjdCB0aW1lc3BlYyB0cywgaW50IGRpdmlzb3IpO1xcbiBcXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7XFxuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHtcXG4gXFx0dTMyIHNlZWQ7XFxuIH07XFxuIFxcbi1leHRlcm4gdTMyIGd1ZXN0X3JhbmRvbV9zZWVkO1xcbi1leHRlcm4gc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XFxuK2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xcbitleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcXG4gXFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7XFxuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTtcXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX2d1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlLFxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1fcmFuZG9tX2Jvb2woc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTggcGVyY2VudClcXG4ge1xcbi1cXHRyZXR1cm4gKGd1ZXN0X3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcXHUwMDNjIHBlcmNlbnQ7XFxuK1xcdHJldHVybiAoa3ZtX3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcXHUwMDNjIHBlcmNlbnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fZ3Vlc3RfcmFuZG9tX2Jvb2woc3RhdGUsIDUwKTtcXG4rXFx0cmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuK3N0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4ge1xcbi1cXHRyZXR1cm4gKCh1NjQpZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbitcXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK1xcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcXG4gXFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuIFxcdFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcXG5pbmRleCBjMzNhYjZlMDQxNzE3OS4uNjkwNGRiZGE3OWY5MjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcXG5AQCAtNTUsOSArNTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaClcXG4gZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0Y29uc3QgdHlwZW9mKG1lbSkgdmFsID0gKF9fdmFsKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0aWYgKCFpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQgfHwgZ3Vlc3RfcmFuZG9tX2Jvb2woXFx1MDAyNmd1ZXN0X3JuZykpIHtcXHRcXHRcXFxcXFxuK1xcdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGt2bV9yYW5kb21fYm9vbChcXHUwMDI2a3ZtX3JuZykpIHtcXHRcXHRcXFxcXFxuIFxcdFxcdChtZW0pID0gdmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0fSBlbHNlIGlmIChndWVzdF9yYW5kb21fYm9vbChcXHUwMDI2Z3Vlc3Rfcm5nKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXFx1MDAyNmt2bV9ybmcpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhLVk1fRkVQIFxcXCJtb3YgJTEsICUwXFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICA6IFxcXCIrbVxcXCIgKG1lbSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgOiBcXFwiclxcXCIgKHZhbCkgOiBcXFwibWVtb3J5XFxcIik7XFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjQwZjZmMGZkYmU0M2VcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5AQCAtMCwwICsxLDM2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYXBpYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwcm9jX3V0aWwuaFxcXCJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvZXZlbnRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2luZm8uaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyB1NjQgdGltZW91dF9ucyA9IDJVTEwgKiAxMDAwICogMTAwMCAqIDEwMDA7XFxuK3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdO1xcbitzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XFxuK3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX25taVtLVk1fTUFYX1ZDUFVTXTtcXG4rc3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTtcXG4rc3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xcbitzdGF0aWMgYm9vbCBkb25lO1xcbitcXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVxcdFxcXFxcXG4rXFx0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVxcdTAwM2V2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLVxcdTAwM2VpZF0pXFxuKyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSlcXHRcXFxcXFxuK1xcdFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS1cXHUwMDNldm0sIGd1ZXN0X3JlY2VpdmVkX25taVsoX192Y3B1KS1cXHUwMDNlaWRdKVxcbitcXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQoX192Y3B1LCBfX25taSlcXHRcXFxcXFxuK1xcdCgoX19ubWkpID8gR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSkgOiBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KSlcXG4rXFxuK3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZClcXG4re1xcbitcXHRpZiAoeDJhcGljKVxcbitcXHRcXHRyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiB4YXBpY19yZWFkX3JlZyhBUElDX0lEKSBcXHUwMDNlXFx1MDAzZSAyNDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfaXJxX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9pcnFbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xcbitcXG4rXFx0aWYgKHgyYXBpYylcXG4rXFx0XFx0eDJhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0eGFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuK3tcXG4rXFx0aWYgKHgyYXBpYylcXG4rXFx0XFx0eDJhcGljX2VuYWJsZSgpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHhhcGljX2VuYWJsZSgpO1xcbitcXG4rXFx0c3RpX25vcCgpO1xcbitcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWFkeV9mb3JfaXJxc1tndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XFxuK1xcbitcXHR3aGlsZSAoIVJFQURfT05DRShkb25lKSlcXG4rXFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZF9tYWluKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbitcXHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3NldHVwX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0Y29uc3QgaW50IGZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVM7XFxuK1xcdGNvbnN0IGludCBwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICphbGxvY2F0b3I7XFxuK1xcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb247XFxuK1xcbitcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgZGV2aWNlK2RyaXZlciBjYW4gYWN0dWFsbHkgc2VuZCBNU0lzLiAqL1xcbitcXHRURVNUX1JFUVVJUkUoZGV2aWNlLVxcdTAwM2Vkcml2ZXIub3BzKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGRldmljZS1cXHUwMDNlZHJpdmVyLm9wcy1cXHUwMDNlc2VuZF9tc2kpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIGEgRE1BLWFibGUgcmVnaW9uIGZvciB0aGUgZHJpdmVyIHRvIHVzZS4gICBWZXJ5IGZldyBkZXZpY2VzXFxuK1xcdCAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nXFxuK1xcdCAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzXFxuK1xcdCAqIGNvbXBsZXRlZCwgYW5kIHByYWN0aWNhbGx5IGFsbCBhY3Rpb25zIGludm9sdmUgRE1BIG9mIHNvbWUgZm9ybS5cXG4rXFx0ICovXFxuK1xcdGFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZWdpb24gPSBcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uO1xcbitcXHRyZWdpb24tXFx1MDAzZXNpemUgPSBTWl8yTTtcXG4rXFx0cmVnaW9uLVxcdTAwM2Vpb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2MoYWxsb2NhdG9yLCByZWdpb24tXFx1MDAzZXNpemUpO1xcbitcXHRyZWdpb24tXFx1MDAzZXZhZGRyID0ga3ZtX21tYXAocmVnaW9uLVxcdTAwM2VzaXplLCBwcm90LCBmbGFncywgLTEpO1xcbitcXHRURVNUX0FTU0VSVChyZWdpb24tXFx1MDAzZXZhZGRyICE9IE1BUF9GQUlMRUQsIFxcXCJtbWFwKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0aW9tbXVfbWFwKGRldmljZS1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuK1xcbitcXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKGFsbG9jYXRvcik7XFxuK1xcbitcXHR2ZmlvX3BjaV9kcml2ZXJfaW5pdChkZXZpY2UpO1xcbitcXG4rXFx0cmV0dXJuIGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9pbnRlcnJ1cHQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpbnQgZXZlbnRmZClcXG4re1xcbitcXHRpZiAoZGV2aWNlKVxcbitcXHRcXHR2ZmlvX3BjaV9kcml2ZXJfc2VuZF9tc2koZGV2aWNlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpO1xcbit9XFxuK1xcbitcXG4rc3RhdGljIHZvaWQga3ZtX3JvdXRlX21zaShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIGdzaSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxcbit7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJ5O1xcbitcXHR9IHJvdXRpbmcgPSB7XFxuK1xcdFxcdC5oZWFkZXIubnIgPSAxLFxcbitcXHRcXHQuZW50cnkgPSB7XFxuK1xcdFxcdFxcdC5nc2kgPSBnc2ksXFxuK1xcdFxcdFxcdC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX01TSSxcXG4rXFx0XFx0XFx0LnUubXNpLmFkZHJlc3NfbG8gPSAweEZFRTAwMDAwIHwgKHZjcHUtXFx1MDAzZWlkIFxcdTAwMjYgR0VOTUFTSyg3LCAwKSkgXFx1MDAzY1xcdTAwM2MgMTIsXFxuK1xcdFxcdFxcdC51Lm1zaS5hZGRyZXNzX2hpID0gdmNwdS1cXHUwMDNlaWQgXFx1MDAyNiBHRU5NQVNLKDMxLCA4KSxcXG4rXFx0XFx0XFx0LnUubXNpLmRhdGEgPSB1c2Vfbm1pID8gTk1JX1ZFQ1RPUiB8ICg0IFxcdTAwM2NcXHUwMDNjIDgpIDogdmVjdG9yLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9TRVRfR1NJX1JPVVRJTkcsIFxcdTAwMjZyb3V0aW5nLmhlYWRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXFx1MDAyNnJvdXRpbmcpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVfaW9tbXVfdHlwZSh2b2lkKVxcbit7XFxuK1xcdGludCBpb19mZDtcXG4rXFxuK1xcdGlvX2ZkID0gb3BlbihcXFwiL2Rldi9pb21tdVxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGlvX2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoaW9fZmQpO1xcbitcXHRcXHRyZXR1cm4gTU9ERV9JT01NVUZEO1xcbitcXHR9XFxuK1xcbitcXHRpb19mZCA9IF9fb3Blbl9wYXRoX29yX2V4aXQoXFxcIi9kZXYvdmZpby92ZmlvXFxcIiwgT19SRE9OTFksXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiSXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1xcXCIpO1xcbitcXHRjbG9zZShpb19mZCk7XFxuK1xcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRwcmludGYoXFxcIlVzYWdlOiAlcyBbLWFdIFstZCBcXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXFx1MDAzZV0gWy1lXSBbLWhdIFstaSBucl9pcnFzXSBbLW1dIFstbl0gWy10IGlvbW11X3R5cGVdIFstdiBucl92Y3B1c10gWy14XVxcXFxuXFxcIiwgbmFtZSk7XFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJUZXN0cyBLVk0gaW50ZXJydXB0IHJvdXRpbmcgYW5kIGRlbGl2ZXJ5IHZpYSBpcnFmZC5cXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi1hXFx0QWZmaW5lIHRoZSBkZXZpY2UncyBob3N0IElSUSB0byBhIHJhbmRvbSBwaHlzaWNhbCBDUFVcXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi1kXFx0VXNlIGEgVkZJTyBkZXZpY2UgdG8gc2VuZCBNU0ktWCBpbnRlcnJ1cHRzIGluc3RlYWQgb2YgbWFudWFsbHkgc2lnbmFsaW5nIHRoZSBldmVudGZkXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCItZVxcdFNldCBlbXB0eSBHU0kgcm91dGluZyBpbi1iZXR3ZWVuIHNvbWUgaW50ZXJydXB0c1xcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLWlcXHRUaGUgbnVtYmVyIG9mIElSUXMgdG8gZ2VuZXJhdGUgZHVyaW5nIHRoZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCItbVxcdFBpbiB0YXJnZXQgdkNQVSB0byByYW5kb20gcGh5c2ljYWwgQ1BVIGJlZm9yZSB0cmlnZ2VyaW5nIGludGVycnVwdFxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLW5cXHREZWxpdmVyIDUwIHBlcmNlbnQgb2YgSVJRcyBhcyBub24tbWFza2FibGUgaW50ZXJydXB0c1xcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLXRcXHRPdmVycmlkZSB0aGUgSU9NTVUgdHlwZSB0byB1c2UgKHZmaW9fdHlwZTFfaW9tbXUgb3IgaW9tbXVmZClcXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi12XFx0TnVtYmVyIG9mIHZDUFVTIHRvIHJ1blxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLXhcXHRVc2UgeEFQSUMgbW9kZSBpbnN0ZWFkIG9mIHgyQVBJQyBtb2RlIGluIHRoZSBndWVzdFxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFwiKTtcXG4rXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXFxuK1xcdCAqXFxuK1xcdCAqIFBpY2sgYW4gSVJRIHZlY3RvciBpbiByYW5nZSBbMzIsIFVJTlQ4X01BWF0uIE1pbiB2YWx1ZSBpcyAzMiBiZWNhdXNlXFxuK1xcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxcbitcXHQgKiBkZWZpbmVkIE5NSXMgYW5kIGludGVycnVwdHMuXFxuK1xcdCAqXFxuK1xcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxcbitcXHQgKiBiZWNhdXNlIEtWTSByZXNlcnZlcyBHU0lzIDAtMTUgZm9yIGxlZ2FjeSBJU0EgSVJRcyBhbmQgMTYtMjMgb25seSBnb1xcbitcXHQgKiB0byB0aGUgSU9BUElDLiBUaGUgbWF4IGlzIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEsIGJlY2F1c2VcXG4rXFx0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cXG4rXFx0ICovXFxuK1xcdHUzMiBnc2kgPSBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMjQsIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEpO1xcbitcXHR1OCB2ZWN0b3IgPSBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMzIsIFVJTlQ4X01BWCk7XFxuK1xcbitcXHRwdGhyZWFkX3QgdmNwdV90aHJlYWRzW0tWTV9NQVhfVkNQVVNdO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW0tWTV9NQVhfVkNQVVNdO1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UgPSBOVUxMO1xcbitcXHRpbnQgbnJfaXJxcyA9IDEwMDAsIG5yX3ZjcHVzID0gMTtcXG4rXFx0Ym9vbCBzZXRfZW1wdHlfcm91dGluZyA9IGZhbHNlO1xcbitcXHRjb25zdCBjaGFyICpkZXZpY2VfYmRmID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqaW9tbXVfdHlwZSA9IE5VTEw7XFxuK1xcdGludCBpLCBqLCBjLCBtc2l4LCBldmVudGZkO1xcbitcXHRib29sIG1pZ3JhdGVfdmNwdXMgPSBmYWxzZTtcXG4rXFx0Y3B1X3NldF90IGF2YWlsYWJsZV9jcHVzO1xcbitcXHRib29sIHVzZV9ubWkgPSBmYWxzZTtcXG4rXFx0c3RydWN0IGlvbW11ICppb21tdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpcnEsIGlycV9jcHU7XFxuK1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcImFkOmVoaTptbnQ6djp4XFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAoYykge1xcbitcXHRcXHRjYXNlICdhJzpcXG4rXFx0XFx0XFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2QnOlxcbitcXHRcXHRcXHRkZXZpY2VfYmRmID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnZSc6XFxuK1xcdFxcdFxcdHNldF9lbXB0eV9yb3V0aW5nID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2knOlxcbitcXHRcXHRcXHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcXFwiTnVtYmVyIG9mIElSUXNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbSc6XFxuK1xcdFxcdFxcdG1pZ3JhdGVfdmNwdXMgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbic6XFxuK1xcdFxcdFxcdHVzZV9ubWkgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAndCc6XFxuK1xcdFxcdFxcdGlvbW11X3R5cGUgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICd2JzpcXG4rXFx0XFx0XFx0bnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKFxcXCJOdW1iZXIgb2YgdkNQVVNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVChucl92Y3B1cyBcXHUwMDNjPSBLVk1fTUFYX1ZDUFVTLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIktWTSBzZWxmdGVzdHMgc3VwcG9ydCBhdCBtb3N0ICV1IHZDUFVzXFxcIiwgS1ZNX01BWF9WQ1BVUyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICd4JzpcXG4rXFx0XFx0XFx0eDJhcGljID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aGVscChhcmd2WzBdKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4rXFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YMkFQSUNfQVBJLCBLVk1fWDJBUElDX0FQSV9VU0VfMzJCSVRfSURTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspO1xcbitcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgdmVjdG9yLCBndWVzdF9pcnFfaGFuZGxlcik7XFxuK1xcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcXG4rXFxuK1xcdGlmICgheDJhcGljKSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFxcdTAwM2MgMjU2LCBcXFwieEFQSUMgY2FuIG9ubHkgdGFyZ2V0IElEcyBbMC0yNTRdICgyNTUgdkNQVXMpXFxcIik7XFxuK1xcdFxcdHZpcnRfcGdfbWFwKHZtLCBBUElDX0RFRkFVTFRfR1BBLCBBUElDX0RFRkFVTFRfR1BBKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldmljZV9iZGYpIHtcXG4rXFx0XFx0aWYgKCFpb21tdV90eXBlKVxcbitcXHRcXHRcXHRpb21tdV90eXBlID0gcHJvYmVfaW9tbXVfdHlwZSgpO1xcbitcXHRcXHRpb21tdSA9IGlvbW11X2luaXQoaW9tbXVfdHlwZSk7XFxuK1xcdFxcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcXG4rXFx0XFx0bXNpeCA9IHZmaW9fc2V0dXBfbXNpKGRldmljZSk7XFxuK1xcdFxcdGlycSA9IHZmaW9fbXNpeF90b19ob3N0X2lycShkZXZpY2VfYmRmLCBtc2l4KTtcXG4rXFx0XFx0ZXZlbnRmZCA9IGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW21zaXhdO1xcbitcXHRcXHRwcmludGYoXFxcIlVzaW5nIGRldmljZSAlcyBNU0ktWFslZF0gKElSUS0ldSlcXFxcblxcXCIsIGRldmljZV9iZGYsIG1zaXgsXFxuK1xcdFxcdCAgICAgICBpcnEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxcbitcXHRcXHRcXHQgICAgXFxcIlNldHRpbmcgSVJRIGFmZmluaXR5ICgtYSkgcmVxdWlyZXMgYSBiYWNraW5nIGRldmljZSAoLWQpXFxcIik7XFxuK1xcbitcXHRcXHRldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7XFxuK1xcdFxcdGlycSA9IC0xO1xcbitcXHR9XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJJbmplY3RpbmcgaW50ZXJydXB0cyBmb3IgR1NJICVkIChndWVzdCB2ZWN0b3IgMHgleCkgJWQgdGltZXNcXFxcblxcXCIsXFxuK1xcdFxcdGdzaSwgdmVjdG9yLCBucl9pcnFzKTtcXG4rXFxuK1xcdGt2bV9hc3NpZ25faXJxZmQodm0sIGdzaSwgZXZlbnRmZCk7XFxuK1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgeDJhcGljKTtcXG4rXFxuK1xcdGlmIChtaWdyYXRlX3ZjcHVzKVxcbitcXHRcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbitcXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcXG4rXFxuK1xcdFxcdHdoaWxlICghU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9yZWFkeV9mb3JfaXJxc1t2Y3B1LVxcdTAwM2VpZF0pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0fVxcbitcXG4rXFx0aXJxX2NwdSA9IC0xO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2lycXM7IGkrKykge1xcbitcXHRcXHRjb25zdCBib29sIGRvX3NldF9lbXB0eV9yb3V0aW5nID0gc2V0X2VtcHR5X3JvdXRpbmcgXFx1MDAyNlxcdTAwMjYgKGkgXFx1MDAyNiBCSVQoMykpO1xcbitcXHRcXHRjb25zdCBib29sIGRvX3VzZV9ubWkgPSB1c2Vfbm1pIFxcdTAwMjZcXHUwMDI2IChpIFxcdTAwMjYgQklUKDIpKTtcXG4rXFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbitcXG4rXFx0XFx0aWYgKGRvX3NldF9lbXB0eV9yb3V0aW5nKVxcbitcXHRcXHRcXHRrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHZtKTtcXG4rXFxuK1xcdFxcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcXG4rXFxuK1xcdFxcdGlmIChpcnFfYWZmaW5pdHkpIHtcXG4rXFx0XFx0XFx0aXJxX2NwdSA9IGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcXG4rXFx0XFx0XFx0cHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eShpcnEsIGlycV9jcHUpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobWlncmF0ZV92Y3B1cylcXG4rXFx0XFx0XFx0cGluX3Rhc2tfdG9fcmFuZG9tX2NwdSh2Y3B1X3RocmVhZHNbaSAlIG5yX3ZjcHVzXSwgXFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBucl92Y3B1czsgaisrKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9JUlEodmNwdXNbal0pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIklSUSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHZjcHVzW2pdLVxcdTAwM2VpZCk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9OTUkodmNwdXNbal0pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk5NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHZjcHVzW2pdLVxcdTAwM2VpZCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRyaWdnZXJfaW50ZXJydXB0KGRldmljZSwgZXZlbnRmZCk7XFxuK1xcbitcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0d2hpbGUgKCFHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQodmNwdSwgZG9fdXNlX25taSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgIHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpKSBcXHUwMDNjPSB0aW1lb3V0X25zKVxcbitcXHRcXHRcXHRjcHVfcmVsYXgoKTtcXG4rXFxuK1xcdFxcdFRFU1RfQVNTRVJUKEdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJ2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIHZjcHUtXFx1MDAzZWlkLCBkb191c2Vfbm1pID8gXFxcIk5NSVxcXCIgOiBcXFwiSVJRXFxcIixcXG4rXFx0XFx0XFx0ICAgIGRvX3VzZV9ubWkgPyBOTUlfVkVDVE9SIDogdmVjdG9yLCBnc2ksIGlycV9jcHUpO1xcbitcXG4rXFx0XFx0aWYgKGRvX3VzZV9ubWkpXFxuK1xcdFxcdFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9ubWlbdmNwdS1cXHUwMDNlaWRdLCBmYWxzZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX2lycVt2Y3B1LVxcdTAwM2VpZF0sIGZhbHNlKTtcXG4rXFx0fVxcbitcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGRvbmUsIHRydWUpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImt2bV9zeXNjYWxscy5oXFxcIlxcbiBcXG4gI2lmZGVmIF9fR0xJQkNfX1xcbiAjaW5jbHVkZSBcXHUwMDNjZXhlY2luZm8uaFxcdTAwM2VcXG5AQCAtNjQsMTEgKzY1LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9kdW1wX3N0YWNrKHZvaWQpXFxuIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKSB7fVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBwaWRfdCBfZ2V0dGlkKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIHN5c2NhbGwoU1lTX2dldHRpZCk7XFxuLX1cXG4tXFxuIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKVxcbiB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcXG4gXFx0Y29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbkBAIC04MSw3ICs3Nyw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgICVzOiV1OiAlc1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBfZ2V0dGlkKCksXFxuK1xcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXFxuIFxcdFxcdFxcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiBcXHRcXHR0ZXN0X2R1bXBfc3RhY2soKTtcXG4gXFx0XFx0aWYgKGZtdCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5pbmRleCAxOTVmM2ZkYWUxZTM5Ni4uMzc5NDU3NWQyY2EwY2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE1LDE0ICsxNSwyMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3Jlc291cmNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXFx0MlxcbiBcXG4tdTMyIGd1ZXN0X3JhbmRvbV9zZWVkO1xcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZztcXG4tc3RhdGljIHUzMiBsYXN0X2d1ZXN0X3NlZWQ7XFxuK3UzMiBrdm1fcmFuZG9tX3NlZWQ7XFxuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIGt2bV9ybmc7XFxuK3N0YXRpYyB1MzIgbGFzdF9rdm1fc2VlZDtcXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9zZWVkX3JuZyh1MzIgc2VlZClcXG4re1xcbitcXHRrdm1fcmFuZG9tX3NlZWQgPSBsYXN0X2t2bV9zZWVkID0gc2VlZDtcXG4rXFx0cHJfaW5mbyhcXFwiUmFuZG9tIHNlZWQ6IDB4JXhcXFxcblxcXCIsIGt2bV9yYW5kb21fc2VlZCk7XFxuK1xcdGt2bV9ybmcgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQpO1xcbit9XFxuIFxcbiBzdGF0aWMgc2l6ZV90IHZjcHVfbW1hcF9zeih2b2lkKTtcXG4gXFxuQEAgLTUxNSwxMiArNTIzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRzbG90MCA9IG1lbXNsb3QycmVnaW9uKHZtLCAwKTtcXG4gXFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgKyBzbG90MC1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplKTtcXG4gXFxuLVxcdGlmIChndWVzdF9yYW5kb21fc2VlZCAhPSBsYXN0X2d1ZXN0X3NlZWQpIHtcXG4tXFx0XFx0cHJfaW5mbyhcXFwiUmFuZG9tIHNlZWQ6IDB4JXhcXFxcblxcXCIsIGd1ZXN0X3JhbmRvbV9zZWVkKTtcXG4tXFx0XFx0bGFzdF9ndWVzdF9zZWVkID0gZ3Vlc3RfcmFuZG9tX3NlZWQ7XFxuLVxcdH1cXG4tXFx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XFxuLVxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9ybmcpO1xcbitcXHRpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpXFxuK1xcdFxcdGt2bV9zZWVkX3JuZyhrdm1fcmFuZG9tX3NlZWQpO1xcbitcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpO1xcbiBcXG4gXFx0a3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTtcXG4gXFxuQEAgLTY2MiwxOSArNjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpXFxuIFxcdCAgICAgICBcXFwiICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcXFxcblxcXCIsIG5hbWUsIG5hbWUpO1xcbiB9XFxuIFxcbit2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcXG4re1xcbitcXHRpbnQgdGFyZ2V0X2lkeDtcXG4rXFx0aW50IG5yX2NwdXM7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpO1xcbitcXHRURVNUX0FTU0VSVChucl9jcHVzIFxcdTAwM2UgMCwgXFxcIk5vIENQVXMgYXZhaWxhYmxlIGluIHBvc3NpYmxlX2NwdXNcXFwiKTtcXG4rXFxuK1xcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcXHUwMDI2a3ZtX3JuZykgJSBucl9jcHVzO1xcbitcXG4rXFx0Zm9yIChjcHUgPSAwOyBjcHUgXFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1KyspIHtcXG4rXFx0XFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFxcdTAwMjZcXHUwMDI2IHRhcmdldF9pZHgtLSA9PSAwKSB7XFxuK1xcdFxcdFxcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0VEVTVF9GQUlMKFxcXCJGYWlsZWQgdG8gZmluZCByYW5kb20gQ1BVIGluIHBvc3NpYmxlX2NwdXNcXFwiKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxcbiBcXHRcXHRcXHQgICAgaW50IG5yX3ZjcHVzKVxcbiB7XFxuIFxcdGNwdV9zZXRfdCBhbGxvd2VkX21hc2s7XFxuIFxcdGNoYXIgKmNwdSwgKmNwdV9saXN0O1xcbiBcXHRjaGFyIGRlbGltWzJdID0gXFxcIixcXFwiO1xcbi1cXHRpbnQgaSwgcjtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRjcHVfbGlzdCA9IHN0cmR1cChwY3B1c19zdHJpbmcpO1xcbiBcXHRURVNUX0FTU0VSVChjcHVfbGlzdCwgXFxcInN0cmR1cCgpIGFsbG9jYXRpb24gZmFpbGVkLlxcXCIpO1xcbiBcXG4tXFx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcXHUwMDI2YWxsb3dlZF9tYXNrKTtcXG4tXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJzY2hlZF9nZXRhZmZpbml0eSgpIGZhaWxlZFxcXCIpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGFsbG93ZWRfbWFzayksIFxcdTAwMjZhbGxvd2VkX21hc2spO1xcbiBcXG4gXFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XFxuIFxcbkBAIC0yMjc5LDggKzIzMDUsOCBAQCB2b2lkIF9fYXR0cmlidXRlKChjb25zdHJ1Y3RvcikpIGt2bV9zZWxmdGVzdF9pbml0KHZvaWQpXFxuIFxcdHNpZ2FjdGlvbihTSUdJTEwsIFxcdTAwMjZzaWdfc2EsIE5VTEwpO1xcbiBcXHRzaWdhY3Rpb24oU0lHRlBFLCBcXHUwMDI2c2lnX3NhLCBOVUxMKTtcXG4gXFxuLVxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gbGFzdF9ndWVzdF9zZWVkID0gcmFuZG9tKCk7XFxuLVxcdHByX2luZm8oXFxcIlJhbmRvbSBzZWVkOiAweCV4XFxcXG5cXFwiLCBndWVzdF9yYW5kb21fc2VlZCk7XFxuK1xcdHNyYW5kb20odGltZSgwKSk7XFxuK1xcdGt2bV9zZWVkX3JuZyhyYW5kb20oKSk7XFxuIFxcbiBcXHRrdm1fc2VsZnRlc3RfYXJjaF9pbml0KCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5pbmRleCA2ZGNkMTU5MTBhMDYwOC4uMzU5OWI3NWQ5N2M5MTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5AQCAtNDgsMTQgKzQ4LDE0IEBAIHZvaWQgbWVtc3RyZXNzX2d1ZXN0X2NvZGUodTMyIHZjcHVfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFxcdTAwMjZtZW1zdHJlc3NfYXJncztcXG4gXFx0c3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncyA9IFxcdTAwMjZhcmdzLVxcdTAwM2V2Y3B1X2FyZ3NbdmNwdV9pZHhdO1xcbi1cXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XFxuK1xcdHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XFxuIFxcdGd2YV90IGd2YTtcXG4gXFx0dTY0IHBhZ2VzO1xcbiBcXHR1NjQgYWRkcjtcXG4gXFx0dTY0IHBhZ2U7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0cmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XFxuK1xcdHJhbmRfc3RhdGUgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XFxuIFxcbiBcXHRndmEgPSB2Y3B1X2FyZ3MtXFx1MDAzZWd2YTtcXG4gXFx0cGFnZXMgPSB2Y3B1X2FyZ3MtXFx1MDAzZXBhZ2VzO1xcbkBAIC02OSwxMyArNjksMTMgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpXFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFnZXM7IGkrKykge1xcbiBcXHRcXHRcXHRpZiAoYXJncy1cXHUwMDNlcmFuZG9tX2FjY2VzcylcXG4tXFx0XFx0XFx0XFx0cGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoXFx1MDAyNnJhbmRfc3RhdGUpICUgcGFnZXM7XFxuK1xcdFxcdFxcdFxcdHBhZ2UgPSBrdm1fcmFuZG9tX3UzMihcXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRwYWdlID0gaTtcXG4gXFxuIFxcdFxcdFxcdGFkZHIgPSBndmEgKyAocGFnZSAqIGFyZ3MtXFx1MDAzZWd1ZXN0X3BhZ2Vfc2l6ZSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoX19ndWVzdF9yYW5kb21fYm9vbChcXHUwMDI2cmFuZF9zdGF0ZSwgYXJncy1cXHUwMDNld3JpdGVfcGVyY2VudCkpXFxuK1xcdFxcdFxcdGlmIChfX2t2bV9yYW5kb21fYm9vbChcXHUwMDI2cmFuZF9zdGF0ZSwgYXJncy1cXHUwMDNld3JpdGVfcGVyY2VudCkpXFxuIFxcdFxcdFxcdFxcdCoodTY0ICopYWRkciA9IDB4MDEyMzQ1Njc4OUFCQ0RFRjtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRSRUFEX09OQ0UoKih1NjQgKilhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTYwYjM4NDFkNjM3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXFxuQEAgLTAsMCArMSw1NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY191dGlsLmhcXFwiXFxuK1xcbitzdGF0aWMgRklMRSAqb3Blbl9wcm9jX2ludGVycnVwdHModm9pZClcXG4re1xcbitcXHRGSUxFICpmcDtcXG4rXFxuK1xcdGZwID0gZm9wZW4oXFxcIi9wcm9jL2ludGVycnVwdHNcXFwiLCBcXFwiclxcXCIpO1xcbitcXHRURVNUX0FTU0VSVChmcCwgXFxcImZvcGVuKC9wcm9jL2ludGVycnVwdHMpIGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZwO1xcbit9XFxuK1xcbit1bnNpZ25lZCBpbnQgdmZpb19tc2l4X3RvX2hvc3RfaXJxKGNvbnN0IGNoYXIgKmRldmljZV9iZGYsIGludCBtc2l4KVxcbit7XFxuK1xcdGNoYXIgc2VhcmNoX3N0cmluZ1s2NF07XFxuK1xcdGNoYXIgbGluZVs0MDk2XTtcXG4rXFx0aW50IGlycSA9IC0xO1xcbitcXHRGSUxFICpmcDtcXG4rXFxuK1xcdGZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTtcXG4rXFxuK1xcdHNucHJpbnRmKHNlYXJjaF9zdHJpbmcsIHNpemVvZihzZWFyY2hfc3RyaW5nKSwgXFxcInZmaW8tbXNpeFslZF1cXFwiLCBtc2l4KTtcXG4rXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkge1xcbitcXHRcXHRpZiAoc3Ryc3RyKGxpbmUsIGRldmljZV9iZGYpIFxcdTAwMjZcXHUwMDI2IHN0cnN0cihsaW5lLCBzZWFyY2hfc3RyaW5nKSkge1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUSgxLCBzc2NhbmYobGluZSwgXFxcIiVkOlxcXCIsIFxcdTAwMjZpcnEpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKGlycSAhPSAtMSwgXFxcIkZhaWxlZCB0byBsb2NhdGUgSVJRIGZvciAlcyAlc1xcXCIsIGRldmljZV9iZGYsXFxuK1xcdFxcdCAgICBzZWFyY2hfc3RyaW5nKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxO1xcbit9XFxuK1xcbit2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgciwgZmQ7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9pcnEvJXUvc21wX2FmZmluaXR5X2xpc3RcXFwiLCBpcnEpO1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcXG4rXFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzZT0gMCwgXFxcIkZhaWxlZCB0byBvcGVuICVzXFxcIiwgcGF0aCk7XFxuK1xcbitcXHRyID0gZHByaW50ZihmZCwgXFxcIiVkXFxcXG5cXFwiLCBjcHUpO1xcbitcXHRURVNUX0FTU0VSVChyIFxcdTAwM2UgMCwgXFxcIkZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcXFwiLCBpcnEsIGNwdSk7XFxuK1xcbitcXHRrdm1fY2xvc2UoZmQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuaW5kZXggYmFiMWJkMmI3NzViNmQuLjZiMDBhYjExZjNjMDI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L2tlcm5lbC5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3ZtX3N5c2NhbGxzLmhcXFwiXFxuIFxcbiBzaWdqbXBfYnVmIGV4cGVjdF9zaWdidXNfam1wYnVmO1xcbiBcXG5AQCAtMzAsMTggKzMxLDM2IEBAIHZvaWQgX19hdHRyaWJ1dGVfXygodXNlZCkpIGV4cGVjdF9zaWdidXNfaGFuZGxlcihpbnQgc2lnbnVtKVxcbiAgKiBQYXJrLU1pbGxlciBMQ0cgdXNpbmcgc3RhbmRhcmQgY29uc3RhbnRzLlxcbiAgKi9cXG4gXFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZClcXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpXFxuIHtcXG4tXFx0c3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XFxuK1xcdHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHMgPSB7LnNlZWQgPSBzZWVkfTtcXG4gXFx0cmV0dXJuIHM7XFxuIH1cXG4gXFxuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdHN0YXRlLVxcdTAwM2VzZWVkID0gKHU2NClzdGF0ZS1cXHUwMDNlc2VlZCAqIDQ4MjcxICUgKCh1MzIpKDEgXFx1MDAzY1xcdTAwM2MgMzEpIC0gMSk7XFxuIFxcdHJldHVybiBzdGF0ZS1cXHUwMDNlc2VlZDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXFxuK1xcdFxcdFxcdCAgICB1NjQgbWF4KVxcbit7XFxuK1xcdHU2NCB2YWx1ZTtcXG4rXFx0dTY0IHJhbmdlO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQobWluIFxcdTAwM2M9IG1heCwgXFxcIlBFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3U2NChzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVMTE9OR19NQVgpXFxuK1xcdFxcdHJldHVybiB2YWx1ZTtcXG4rXFxuK1xcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFBhcnNlcyBcXFwiWzAtOV0rW2ttZ3RdP1xcXCIuXFxuICAqL1xcbkBAIC0zNzcsNyArMzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXFxuIFxcdGxvbmcgdmFsWzJdO1xcbiBcXHRGSUxFICpmcDtcXG4gXFxuLVxcdHNwcmludGYocGF0aCwgXFxcIi9wcm9jLyVsZC9zY2hlZHN0YXRcXFwiLCBzeXNjYWxsKFNZU19nZXR0aWQpKTtcXG4rXFx0c3ByaW50ZihwYXRoLCBcXFwiL3Byb2MvJWxkL3NjaGVkc3RhdFxcXCIsIChsb25nKWt2bV9nZXR0aWQoKSk7XFxuIFxcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4gXFx0LyogUmV0dXJuIE1JTl9SVU5fREVMQVlfTlMgdXBvbiBmYWlsdXJlIGp1c3QgdG8gYmUgc2FmZSAqL1xcbiBcXHRpZiAoZnNjYW5mKGZwLCBcXFwiJWxkICVsZCBcXFwiLCBcXHUwMDI2dmFsWzBdLCBcXHUwMDI2dmFsWzFdKSBcXHUwMDNjIDIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG5AQCAtMTU1LDEwICsxNTUsOCBAQCBzdGF0aWMgdm9pZCAqdmNwdV93b3JrZXIodm9pZCAqZGF0YSlcXG4gXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkXFxcIiwgciwgZXJybm8pO1xcbiBcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2bnJfcm9fZmF1bHRzKTtcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZucl9yb19mYXVsdHMpID09IG5yX3ZjcHVzKSB7XFxuLVxcdFxcdFdSSVRFX09OQ0UoYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCwgdHJ1ZSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0KTtcXG4tXFx0fVxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm5yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpXFxuK1xcdFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTtcXG4gXFxuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdC8qXFxuQEAgLTI1NywxMSArMjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcXG4gc3RhdGljIHZvaWQgY2FsY19kZWZhdWx0X25yX3ZjcHVzKHZvaWQpXFxuIHtcXG4gXFx0Y3B1X3NldF90IHBvc3NpYmxlX21hc2s7XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXFx1MDAyNnBvc3NpYmxlX21hc2spO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInNjaGVkX2dldGFmZmluaXR5IGZhaWxlZCwgZXJybm8gPSAlZCAoJXMpXFxcIixcXG4tXFx0XFx0ICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuIFxcbiBcXHRucl92Y3B1cyA9IENQVV9DT1VOVChcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuIFxcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFxcdTAwM2UgMCwgXFxcIlVoLCBubyBDUFVzP1xcXCIpO1xcbkBAIC0zODMsOCArMzc3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFxcdTAwMjZ0aW1lX3J1bjIsIFxcXCJydW4gMlxcXCIpO1xcbiBcXG4gXFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7XFxuLVxcdG1wcm90ZWN0X3JvX2RvbmUgPSB0cnVlO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgbXByb3RlY3Rfcm9fZG9uZSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBtcHJvdGVjdF9yb19kb25lLCB0cnVlKTtcXG4gXFxuIFxcdHJlbmRlenZvdXNfd2l0aF92Y3B1cyhcXHUwMDI2dGltZV9ybywgXFxcIm1wcm90ZWN0IFJPXFxcIik7XFxuIFxcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuaW5kZXggZjgwYWQ2YjQ3ZDE2YjAuLjU1N2UzOTNjMjIzYjk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbkBAIC0yMjYsOSArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyID0gc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwic2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcXFwiLCBlcnJubyxcXG4tXFx0XFx0ICAgIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFxcdTAwMjZwb3NzaWJsZV9tYXNrKTtcXG4gXFxuIFxcdGNhbGNfbWluX21heF9jcHUoKTtcXG4gXFxuQEAgLTI0NCw3ICsyNDIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4gXFxuIFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxcbi1cXHRcXHQgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylzeXNjYWxsKFNZU19nZXR0aWQpKTtcXG4rXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcXG4gXFxuIFxcdGlmIChsYXRlbmN5IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5pbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxcbiB7XFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QodmNwdS1cXHUwMDNldm0sIHN0X2d2YVtpXSxcXG4rXFx0XFx0XFx0XFx0KHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKSk7XFxuIFxcbiBcXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLCAodWxvbmcpc3RfZ3ZhW2ldIHwgS1ZNX01TUl9FTkFCTEVEKTtcXG4gfVxcbkBAIC0xODcsOCArMTg3LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXFxuIFxcdH07XFxuIFxcbiBcXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cXG4tXFx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKTtcXG4tXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xcbiBcXG4gXFx0c3RfaXBhID0gKHVsb25nKXN0X2d2YVtpXTtcXG4gXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcXHUwMDI2ZGV2KTtcXG5AQCAtMzEwLDEwICszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxcbiB7XFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzdF9ncGFbaV0gPSBhZGRyX2d2YTJncGEodmNwdS1cXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcXG4tXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS1cXHUwMDNldm0sIHN0X2dwYVtpXSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXFx1MDAzZXZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xcbitcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3BhW2ldLCBhZGRyX2d2YTJncGEodmNwdS1cXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9kdW1wKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZHgpXFxuQEAgLTQ0Miw4ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcXG4gXFx0fTtcXG4gXFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgc3RfZ3ZhW2ldKTtcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKSk7XFxuIFxcbiBcXHRlcnIgPSBfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXFx1MDAyNmF0dHIpO1xcbiBcXHRURVNUX0FTU0VSVChlcnIgPT0gMCwgXFxcIk5vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXFxcIik7XFxuQEAgLTU0OSw4ICs1NDUsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdilcXG4gXFxuIFxcdFxcdC8qIFNlY29uZCBWQ1BVIHJ1biwgZXhwZWN0IGd1ZXN0IHN0b2xlbiB0aW1lIHRvIGJlIFxcdTAwM2M9IHJ1bl9kZWxheSAqL1xcbiBcXHRcXHRydW5fdmNwdSh2Y3B1c1tpXSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcXG4tXFx0XFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXTtcXG4rXFx0XFx0c3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcXG4gXFx0XFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChzdG9sZW5fdGltZSBcXHUwMDNjPSBydW5fZGVsYXksXFxuIFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgc3RvbGVuIHRpbWUgXFx1MDAzYz0gJWxkLCBnb3QgJWxkXFxcIixcXG5AQCAtNTcwLDggKzU2NSw3IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxcbiBcXG4gXFx0XFx0LyogUnVuIFZDUFUgYWdhaW4gdG8gY29uZmlybSBzdG9sZW4gdGltZSBpcyBjb25zaXN0ZW50IHdpdGggcnVuX2RlbGF5ICovXFxuIFxcdFxcdHJ1bl92Y3B1KHZjcHVzW2ldKTtcXG4tXFx0XFx0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pO1xcbi1cXHRcXHRzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldIC0gc3RvbGVuX3RpbWU7XFxuK1xcdFxcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSkgLSBzdG9sZW5fdGltZTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXFx1MDAzZT0gcnVuX2RlbGF5LFxcbiBcXHRcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHN0b2xlbiB0aW1lIFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuIFxcdFxcdFxcdCAgICBydW5fZGVsYXksIHN0b2xlbl90aW1lKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmNcXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmNcXG5AQCAtMzQsNyArMzQsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZV9idWZmZXJzKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBfX19fdGVzdF9zZXZfZGJnKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgaSwgaW50IGosIGludCBucl9ieXRlcylcXG4ge1xcbi1cXHR1OCBwYXR0ZXJuID0gZ3Vlc3RfcmFuZG9tX3UzMihcXHUwMDI2Z3Vlc3Rfcm5nKTtcXG4rXFx0dTggcGF0dGVybiA9IGt2bV9yYW5kb21fdTMyKFxcdTAwMjZrdm1fcm5nKTtcXG4gXFxuIFxcdGlmIChpICsgbnJfYnl0ZXMgXFx1MDAzZSBCVUZGRVJfU0laRSB8fCBqICsgbnJfYnl0ZXMgXFx1MDAzZSBCVUZGRVJfU0laRSlcXG4gXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTozOTozNS44NTYyNTU2MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NjYzOTY3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhmZTYwMTEwZGNlZDdhOTZjNzkzYzdjZDNjMGM0ZjI2NDk0OWQwZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Yi4uODhjNmM4MDQ2ZGRlYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTEsNiArMTEsNyBAQCBMSUJLVk0gKz0gbGliL2t2bV91dGlsLmNcbiBMSUJLVk0gKz0gbGliL2xydV9nZW5fdXRpbC5jXG4gTElCS1ZNICs9IGxpYi9tZW1zdHJlc3MuY1xuIExJQktWTSArPSBsaWIvZ3Vlc3Rfc3ByaW50Zi5jXG4rTElCS1ZNICs9IGxpYi9wcm9jX3V0aWwuY1xuIExJQktWTSArPSBsaWIvcmJ0cmVlLmNcbiBMSUJLVk0gKz0gbGliL3NwYXJzZWJpdC5jXG4gTElCS1ZNICs9IGxpYi90ZXN0X3V0aWwuY1xuQEAgLTE1Nyw2ICsxNTgsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gY29hbGVzY2VkX2lvX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbkBAIC0yNTksNiArMjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcbiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS5cbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcbitpbmNsdWRlIC4uL3ZmaW8vbGliL2xpYnZmaW8ubWtcbiBcbiBJTlNUQUxMX0hEUl9QQVRIID0gJCh0b3Bfc3JjZGlyKS91c3JcbiBMSU5VWF9IRFJfUEFUSCA9ICQoSU5TVEFMTF9IRFJfUEFUSCkvaW5jbHVkZS9cbkBAIC0zMTMsNyArMzE2LDkgQEAgTElCS1ZNX1MgOj0gJChmaWx0ZXIgJS5TLCQoTElCS1ZNKSlcbiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKVxuIExJQktWTV9TX09CSiA6PSAkKHBhdHN1YnN0ICUuUywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fUykpXG4gTElCS1ZNX1NUUklOR19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX1NUUklORykpXG4tTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pXG4rTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopXG4rTElCS1ZNX09CSlMgKz0gJChMSUJDR1JPVVBfTylcbitMSUJLVk1fT0JKUyArPSAkKExJQlZGSU9fTylcbiBTUExJVF9URVNUX0dFTl9QUk9HUyA6PSAkKHBhdHN1YnN0ICUsICQoT1VUUFVUKS8lLCAkKFNQTElUX1RFU1RTKSlcbiBTUExJVF9URVNUX0dFTl9PQkogOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJChBUkNIKS8lLm8sICQoU1BMSVRfVEVTVFMpKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG5pbmRleCA5MGM0NzVhNjFiMjJiNi4uZjhiMDI1OTc4OTdiZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdTMyIHRlc3RfZ2V0X3BjcHUodm9pZClcbiBcdGNwdV9zZXRfdCBvbmxpbmVfY3B1c2V0O1xuIFxuIFx0bnByb2NfY29uZiA9IGdldF9ucHJvY3NfY29uZigpO1xuLVx0c2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksIFx1MDAyNm9ubGluZV9jcHVzZXQpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcdTAwMjZvbmxpbmVfY3B1c2V0KTtcbiBcbiBcdC8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovXG4gXHRkbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jXG5pbmRleCBmNzYyNWViNzExZDZiOC4uZDljOTM3N2E2MzI1NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xuQEAgLTEwMzksNyArMTAzOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpZiAoIXBhcnNlX2FyZ3MoYXJnYywgYXJndikpXG4gXHRcdGV4aXQoS1NGVF9TS0lQKTtcbiBcbi1cdHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksIFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcbitcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcdTAwMjZkZWZhdWx0X2NwdXNldCk7XG4gXHRzZXRfY291bnRlcl9kZWZhdWx0cygpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy50ZXN0X3ZpcnR1YWwpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG5AQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLFxuIFx0XHRzdHJ1Y3QgdWZmZF9tc2cgKm1zZylcbiB7XG4tXHRwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbitcdHBpZF90IHRpZCA9IGt2bV9nZXR0aWQoKTtcbiBcdHU2NCBhZGRyID0gbXNnLVx1MDAzZWFyZy5wYWdlZmF1bHQuYWRkcmVzcztcbiBcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiBcdHN0cnVjdCB0aW1lc3BlYyB0c19kaWZmO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjOS4uN2M1YWJlMWFlOWUwMTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5AQCAtMzExLDcgKzMxMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpbnQgb3B0O1xuIFxuIFx0LyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqL1xuLVx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSAxO1xuK1x0a3ZtX3JhbmRvbV9zZWVkID0gMTtcbiBcbiBcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XG4gXHRcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcbkBAIC0zNTcsNyArMzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRwLnBoeXNfb2Zmc2V0ID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncic6XG4tXHRcdFx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwiUmFuZG9tIHNlZWRcIiwgb3B0YXJnKTtcbitcdFx0XHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwiUmFuZG9tIHNlZWRcIiwgb3B0YXJnKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncyc6XG4gXHRcdFx0cC5iYWNraW5nX3NyYyA9IHBhcnNlX2JhY2tpbmdfc3JjX3R5cGUob3B0YXJnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCA3NGNhMDk2YmY5NzZiNS4uZTg0MTlkN2RhMWVhYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0d2hpbGUgKCFSRUFEX09OQ0UodmNwdV9zdG9wKSkge1xuIFx0XHRcdGFkZHIgPSBndWVzdF90ZXN0X3ZpcnRfbWVtO1xuLVx0XHRcdGFkZHIgKz0gKGd1ZXN0X3JhbmRvbV91NjQoXHUwMDI2Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbitcdFx0XHRhZGRyICs9IChrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbiBcdFx0XHRcdCogZ3Vlc3RfcGFnZV9zaXplO1xuIFx0XHRcdGFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTtcbiBcbkBAIC03MDgsOCArNzA4LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcbiBcdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XG4gXG4tXHRcdFdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7XG4rXHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBucl93cml0ZXMsIDApO1xuIFxuIFx0XHRkaXJ0eV9yaW5nX3ByZXZfaXRlcmF0aW9uX2xhc3RfcGFnZSA9IGRpcnR5X3JpbmdfbGFzdF9wYWdlO1xuIFx0XHRXUklURV9PTkNFKGRpcnR5X3JpbmdfdmNwdV9yaW5nX2Z1bGwsIGZhbHNlKTtcbkBAIC03NzUsMTYgKzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0XHQgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkXG4gXHRcdCAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbidzIHZhbHVlLlxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgdHJ1ZSk7XG4gXHRcdHNlbV93YWl0KFx1MDAyNnNlbV92Y3B1X3N0b3ApO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBDbGVhciB2Y3B1X3N0b3AgYWZ0ZXIgdGhlIHZDUFUgdGhyZWFkIGhhcyBhY2tub3dsZWRnZSB0aGVcbiBcdFx0ICogc3RvcCByZXF1ZXN0IGFuZCBpcyB3YWl0aW5nLCBpLmUuIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmchXG4gXHRcdCAqL1xuLVx0XHRXUklURV9PTkNFKHZjcHVfc3RvcCwgZmFsc2UpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgZmFsc2UpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA2Y2IzYmVkMjliODFhYi4uNWRhZTYxNDNkZGIwNGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1BUF9BUkdTMChtLC4uLilcbkBAIC04MywxMSArODQsMTcgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX2R1cChpbnQgZmQpXG4gXHRyZXR1cm4gbmV3X2ZkO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZClcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2dldHRpZCk7XG4rfVxuK1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKG11bm1hcCwgMiwgdm9pZCAqLCBtZW0sIHNpemVfdCwgc2l6ZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGZhbGxvY2F0ZSwgNCwgaW50LCBmZCwgaW50LCBtb2RlLCBsb2ZmX3QsIG9mZnNldCwgbG9mZl90LCBsZW4pO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGZ0cnVuY2F0ZSwgMiwgdW5zaWduZWQgaW50LCBmZCwgb2ZmX3QsIGxlbmd0aCk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHNjaGVkX2dldGFmZmluaXR5LCAzLCBwaWRfdCwgcGlkLCBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBtYXNrKTtcbiBcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDA0YTkxMDE2NGEyOTZhLi5iMzllNzEzYzMwYTQ2OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0xMDk0LDYgKzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXCIsIGNwdSk7XG4gfVxuIFxuK3ZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbitcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxuIHtcbiBcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcbkBAIC0xMTM4LDYgKzExNDAsMTYgQEAgdm1fYWRqdXN0X251bV9ndWVzdF9wYWdlcyhlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdW5zaWduZWQgaW50IG51bV9ndWVzdF9wYWdlcylcbiBcdG1lbWNweShcdTAwMjYoZyksIF9wLCBzaXplb2YoZykpO1x0XHRcdFx0XFxcbiB9KVxuIFxuKyNkZWZpbmUgU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKF92bSwgX3ZhcmlhYmxlKSAoe1x0XHRcXFxuK1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdChfdm0sIF92YXJpYWJsZSk7XHRcdFx0XFxcbitcdFJFQURfT05DRShfdmFyaWFibGUpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBXUklURV9BTkRfU1lOQ19UT19HVUVTVChfdm0sIF92YXJpYWJsZSwgX3ZhbHVlKSBkbyB7XHRcXFxuK1x0V1JJVEVfT05DRShfdmFyaWFibGUsIF92YWx1ZSk7XHRcdFx0XHRcXFxuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1x0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiAvKlxuICAqIFdyaXRlIGEgZ2xvYmFsIHZhbHVlLCBidXQgb25seSBpbiB0aGUgVk0ncyAoZ3Vlc3QncykgZG9tYWluLiAgUHJpbWFyaWx5IHVzZWRcbiAgKiBmb3IgXCJnbG9iYWxzXCIgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXG5AQCAtMCwwICsxLDExIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKyNpZm5kZWYgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4rI2RlZmluZSBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcbitcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuK1xuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7XG4rXG4rdm9pZCBwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpO1xuK1xuKyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMDgsMzIgKzEwOCwzNSBAQCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfc3ViKHN0cnVjdCB0aW1lc3BlYyB0czEsIHN0cnVjdCB0aW1lc3BlYyB0czIpO1xuIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19lbGFwc2VkKHN0cnVjdCB0aW1lc3BlYyBzdGFydCk7XG4gc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX2RpdihzdHJ1Y3QgdGltZXNwZWMgdHMsIGludCBkaXZpc29yKTtcbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHtcbitzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSB7XG4gXHR1MzIgc2VlZDtcbiB9O1xuIFxuLWV4dGVybiB1MzIgZ3Vlc3RfcmFuZG9tX3NlZWQ7XG4tZXh0ZXJuIHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgZ3Vlc3Rfcm5nO1xuK2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xuK2V4dGVybiBzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBrdm1fcm5nO1xuIFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7XG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpO1xuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIG5ld19rdm1fcmFuZG9tX3N0YXRlKHUzMiBzZWVkKTtcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgX19ndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1fcmFuZG9tX2Jvb2woc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLFxuIFx0XHRcdFx0ICAgICAgIHU4IHBlcmNlbnQpXG4ge1xuLVx0cmV0dXJuIChndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgXHUwMDNjIHBlcmNlbnQ7XG4rXHRyZXR1cm4gKGt2bV9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgXHUwMDNjIHBlcmNlbnQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSlcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRyZXR1cm4gX19ndWVzdF9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuK1x0cmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4rc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIHtcbi1cdHJldHVybiAoKHU2NClndWVzdF9yYW5kb21fdTMyKHN0YXRlKSBcdTAwM2NcdTAwM2MgMzIpIHwgZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSk7XG4rXHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4rXHRcdFx0ICAgIHU2NCBtYXgpO1xuK1xuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbkBAIC01NSw5ICs1NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3ZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bV9hcmNoICphcmNoKVxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGNvbnN0IHR5cGVvZihtZW0pIHZhbCA9IChfX3ZhbCk7XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGd1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNmd1ZXN0X3JuZykpIHtcdFx0XFxcbitcdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGt2bV9yYW5kb21fYm9vbChcdTAwMjZrdm1fcm5nKSkge1x0XHRcXFxuIFx0XHQobWVtKSA9IHZhbDtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gZWxzZSBpZiAoZ3Vlc3RfcmFuZG9tX2Jvb2woXHUwMDI2Z3Vlc3Rfcm5nKSkge1x0XHRcdFx0XHRcXFxuK1x0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXHUwMDI2a3ZtX3JuZykpIHtcdFx0XHRcdFx0XFxcbiBcdFx0X19hc21fXyBfX3ZvbGF0aWxlX18oS1ZNX0ZFUCBcIm1vdiAlMSwgJTBcIlx0XHRcdFx0XFxcbiBcdFx0XHRcdCAgICAgOiBcIittXCIgKG1lbSlcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdCAgICAgOiBcInJcIiAodmFsKSA6IFwibWVtb3J5XCIpO1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTAsMCArMSwzNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJhcGljLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwicHJvY191dGlsLmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzaW5mby5oXHUwMDNlXG4rXG4rc3RhdGljIHU2NCB0aW1lb3V0X25zID0gMlVMTCAqIDEwMDAgKiAxMDAwICogMTAwMDtcbitzdGF0aWMgYm9vbCBndWVzdF9yZWFkeV9mb3JfaXJxc1tLVk1fTUFYX1ZDUFVTXTtcbitzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XG4rc3RhdGljIGJvb2wgZ3Vlc3RfcmVjZWl2ZWRfbm1pW0tWTV9NQVhfVkNQVVNdO1xuK3N0YXRpYyBib29sIHgyYXBpYyA9IHRydWU7XG4rc3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xuK3N0YXRpYyBib29sIGRvbmU7XG4rXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVx0XFxcbitcdFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS1cdTAwM2V2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLVx1MDAzZWlkXSlcbisjZGVmaW5lIEdVRVNUX1JFQ0VJVkVEX05NSShfX3ZjcHUpXHRcXFxuK1x0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVx1MDAzZXZtLCBndWVzdF9yZWNlaXZlZF9ubWlbKF9fdmNwdSktXHUwMDNlaWRdKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKF9fdmNwdSwgX19ubWkpXHRcXFxuK1x0KChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKVxuK1xuK3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZClcbit7XG4rXHRpZiAoeDJhcGljKVxuK1x0XHRyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4geGFwaWNfcmVhZF9yZWcoQVBJQ19JRCkgXHUwMDNlXHUwMDNlIDI0O1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9pcnFfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbit7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3JlY2VpdmVkX2lycVtndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XG4rXG4rXHRpZiAoeDJhcGljKVxuK1x0XHR4MmFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbitcdGVsc2VcbitcdFx0eGFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4re1xuK1x0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0aWYgKHgyYXBpYylcbitcdFx0eDJhcGljX2VuYWJsZSgpO1xuK1x0ZWxzZVxuK1x0XHR4YXBpY19lbmFibGUoKTtcbitcbitcdHN0aV9ub3AoKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3RfcmVhZHlfZm9yX2lycXNbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xuK1xuK1x0d2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpXG4rXHRcdGNwdV9yZWxheCgpO1xuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1x0c3RydWN0IHVjYWxsIHVjO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKTtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fc2V0dXBfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRjb25zdCBpbnQgZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUztcbitcdGNvbnN0IGludCBwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTtcbitcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yO1xuK1x0c3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbjtcbitcbitcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBkZXZpY2UrZHJpdmVyIGNhbiBhY3R1YWxseSBzZW5kIE1TSXMuICovXG4rXHRURVNUX1JFUVVJUkUoZGV2aWNlLVx1MDAzZWRyaXZlci5vcHMpO1xuK1x0VEVTVF9SRVFVSVJFKGRldmljZS1cdTAwM2Vkcml2ZXIub3BzLVx1MDAzZXNlbmRfbXNpKTtcbitcbitcdC8qXG4rXHQgKiBTZXQgdXAgYSBETUEtYWJsZSByZWdpb24gZm9yIHRoZSBkcml2ZXIgdG8gdXNlLiAgIFZlcnkgZmV3IGRldmljZXNcbitcdCAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nXG4rXHQgKiBhbiBNTUlPIHJlZ2lzdGVyLiAgSW5zdGVhZCwgbW9zdCBkZXZpY2VzIHNlbmQgTVNJcyB3aGVuIGFuIGFjdGlvbiBpc1xuK1x0ICogY29tcGxldGVkLCBhbmQgcHJhY3RpY2FsbHkgYWxsIGFjdGlvbnMgaW52b2x2ZSBETUEgb2Ygc29tZSBmb3JtLlxuK1x0ICovXG4rXHRhbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KGRldmljZS1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZWdpb24gPSBcdTAwMjZkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbjtcbitcdHJlZ2lvbi1cdTAwM2VzaXplID0gU1pfMk07XG4rXHRyZWdpb24tXHUwMDNlaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKGFsbG9jYXRvciwgcmVnaW9uLVx1MDAzZXNpemUpO1xuK1x0cmVnaW9uLVx1MDAzZXZhZGRyID0ga3ZtX21tYXAocmVnaW9uLVx1MDAzZXNpemUsIHByb3QsIGZsYWdzLCAtMSk7XG4rXHRURVNUX0FTU0VSVChyZWdpb24tXHUwMDNldmFkZHIgIT0gTUFQX0ZBSUxFRCwgXCJtbWFwKCkgZmFpbGVkXFxuXCIpO1xuK1x0aW9tbXVfbWFwKGRldmljZS1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbitcbitcdGlvdmFfYWxsb2NhdG9yX2NsZWFudXAoYWxsb2NhdG9yKTtcbitcbitcdHZmaW9fcGNpX2RyaXZlcl9pbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gZGV2aWNlLVx1MDAzZWRyaXZlci5tc2k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRyaWdnZXJfaW50ZXJydXB0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW50IGV2ZW50ZmQpXG4re1xuK1x0aWYgKGRldmljZSlcbitcdFx0dmZpb19wY2lfZHJpdmVyX3NlbmRfbXNpKGRldmljZSk7XG4rXHRlbHNlXG4rXHRcdGV2ZW50ZmRfd3JpdGUoZXZlbnRmZCwgMSk7XG4rfVxuK1xuK1xuK3N0YXRpYyB2b2lkIGt2bV9yb3V0ZV9tc2koc3RydWN0IGt2bV92bSAqdm0sIHUzMiBnc2ksIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxuK3tcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xuK1x0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJ5O1xuK1x0fSByb3V0aW5nID0ge1xuK1x0XHQuaGVhZGVyLm5yID0gMSxcbitcdFx0LmVudHJ5ID0ge1xuK1x0XHRcdC5nc2kgPSBnc2ksXG4rXHRcdFx0LnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLFxuK1x0XHRcdC51Lm1zaS5hZGRyZXNzX2xvID0gMHhGRUUwMDAwMCB8ICh2Y3B1LVx1MDAzZWlkIFx1MDAyNiBHRU5NQVNLKDcsIDApKSBcdTAwM2NcdTAwM2MgMTIsXG4rXHRcdFx0LnUubXNpLmFkZHJlc3NfaGkgPSB2Y3B1LVx1MDAzZWlkIFx1MDAyNiBHRU5NQVNLKDMxLCA4KSxcbitcdFx0XHQudS5tc2kuZGF0YSA9IHVzZV9ubWkgPyBOTUlfVkVDVE9SIHwgKDQgXHUwMDNjXHUwMDNjIDgpIDogdmVjdG9yLFxuK1x0XHR9LFxuK1x0fTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCBcdTAwMjZyb3V0aW5nLmhlYWRlcik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcoc3RydWN0IGt2bV92bSAqdm0pXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXHUwMDI2cm91dGluZyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZV9pb21tdV90eXBlKHZvaWQpXG4re1xuK1x0aW50IGlvX2ZkO1xuK1xuK1x0aW9fZmQgPSBvcGVuKFwiL2Rldi9pb21tdVwiLCBPX1JET05MWSk7XG4rXHRpZiAoaW9fZmQgXHUwMDNlPSAwKSB7XG4rXHRcdGNsb3NlKGlvX2ZkKTtcbitcdFx0cmV0dXJuIE1PREVfSU9NTVVGRDtcbitcdH1cbitcbitcdGlvX2ZkID0gX19vcGVuX3BhdGhfb3JfZXhpdChcIi9kZXYvdmZpby92ZmlvXCIsIE9fUkRPTkxZLFxuK1x0XHRcdFx0ICAgIFwiSXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1wiKTtcbitcdGNsb3NlKGlvX2ZkKTtcbitcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRwcmludGYoXCJVc2FnZTogJXMgWy1hXSBbLWQgXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXHUwMDNlXSBbLWVdIFstaF0gWy1pIG5yX2lycXNdIFstbV0gWy1uXSBbLXQgaW9tbXVfdHlwZV0gWy12IG5yX3ZjcHVzXSBbLXhdXFxuXCIsIG5hbWUpO1xuK1x0cHJpbnRmKFwiXFxuXCIpO1xuK1x0cHJpbnRmKFwiVGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXFxuXCIpO1xuK1x0cHJpbnRmKFwiLWFcdEFmZmluZSB0aGUgZGV2aWNlJ3MgaG9zdCBJUlEgdG8gYSByYW5kb20gcGh5c2ljYWwgQ1BVXFxuXCIpO1xuK1x0cHJpbnRmKFwiLWRcdFVzZSBhIFZGSU8gZGV2aWNlIHRvIHNlbmQgTVNJLVggaW50ZXJydXB0cyBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNpZ25hbGluZyB0aGUgZXZlbnRmZFxcblwiKTtcbitcdHByaW50ZihcIi1lXHRTZXQgZW1wdHkgR1NJIHJvdXRpbmcgaW4tYmV0d2VlbiBzb21lIGludGVycnVwdHNcXG5cIik7XG4rXHRwcmludGYoXCItaVx0VGhlIG51bWJlciBvZiBJUlFzIHRvIGdlbmVyYXRlIGR1cmluZyB0aGUgdGVzdFxcblwiKTtcbitcdHByaW50ZihcIi1tXHRQaW4gdGFyZ2V0IHZDUFUgdG8gcmFuZG9tIHBoeXNpY2FsIENQVSBiZWZvcmUgdHJpZ2dlcmluZyBpbnRlcnJ1cHRcXG5cIik7XG4rXHRwcmludGYoXCItblx0RGVsaXZlciA1MCBwZXJjZW50IG9mIElSUXMgYXMgbm9uLW1hc2thYmxlIGludGVycnVwdHNcXG5cIik7XG4rXHRwcmludGYoXCItdFx0T3ZlcnJpZGUgdGhlIElPTU1VIHR5cGUgdG8gdXNlICh2ZmlvX3R5cGUxX2lvbW11IG9yIGlvbW11ZmQpXFxuXCIpO1xuK1x0cHJpbnRmKFwiLXZcdE51bWJlciBvZiB2Q1BVUyB0byBydW5cXG5cIik7XG4rXHRwcmludGYoXCIteFx0VXNlIHhBUElDIG1vZGUgaW5zdGVhZCBvZiB4MkFQSUMgbW9kZSBpbiB0aGUgZ3Vlc3RcXG5cIik7XG4rXHRwcmludGYoXCJcXG5cIik7XG4rXHRleGl0KEtTRlRfRkFJTCk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHQvKlxuK1x0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXG4rXHQgKlxuK1x0ICogUGljayBhbiBJUlEgdmVjdG9yIGluIHJhbmdlIFszMiwgVUlOVDhfTUFYXS4gTWluIHZhbHVlIGlzIDMyIGJlY2F1c2VcbitcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxuK1x0ICogZGVmaW5lZCBOTUlzIGFuZCBpbnRlcnJ1cHRzLlxuK1x0ICpcbitcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxuK1x0ICogYmVjYXVzZSBLVk0gcmVzZXJ2ZXMgR1NJcyAwLTE1IGZvciBsZWdhY3kgSVNBIElSUXMgYW5kIDE2LTIzIG9ubHkgZ29cbitcdCAqIHRvIHRoZSBJT0FQSUMuIFRoZSBtYXggaXMgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMSwgYmVjYXVzZVxuK1x0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cbitcdCAqL1xuK1x0dTMyIGdzaSA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxKTtcbitcdHU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDMyLCBVSU5UOF9NQVgpO1xuK1xuK1x0cHRocmVhZF90IHZjcHVfdGhyZWFkc1tLVk1fTUFYX1ZDUFVTXTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UgPSBOVUxMO1xuK1x0aW50IG5yX2lycXMgPSAxMDAwLCBucl92Y3B1cyA9IDE7XG4rXHRib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7XG4rXHRjb25zdCBjaGFyICpkZXZpY2VfYmRmID0gTlVMTDtcbitcdGNvbnN0IGNoYXIgKmlvbW11X3R5cGUgPSBOVUxMO1xuK1x0aW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7XG4rXHRib29sIG1pZ3JhdGVfdmNwdXMgPSBmYWxzZTtcbitcdGNwdV9zZXRfdCBhdmFpbGFibGVfY3B1cztcbitcdGJvb2wgdXNlX25taSA9IGZhbHNlO1xuK1x0c3RydWN0IGlvbW11ICppb21tdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGlycSwgaXJxX2NwdTtcbitcbitcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImFkOmVoaTptbnQ6djp4XCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKGMpIHtcbitcdFx0Y2FzZSAnYSc6XG4rXHRcdFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnZCc6XG4rXHRcdFx0ZGV2aWNlX2JkZiA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnZSc6XG4rXHRcdFx0c2V0X2VtcHR5X3JvdXRpbmcgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdpJzpcbitcdFx0XHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcIk51bWJlciBvZiBJUlFzXCIsIG9wdGFyZyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdG1pZ3JhdGVfdmNwdXMgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICduJzpcbitcdFx0XHR1c2Vfbm1pID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndCc6XG4rXHRcdFx0aW9tbXVfdHlwZSA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndic6XG4rXHRcdFx0bnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKFwiTnVtYmVyIG9mIHZDUFVTXCIsIG9wdGFyZyk7XG4rXHRcdFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNjPSBLVk1fTUFYX1ZDUFVTLFxuK1x0XHRcdFx0ICAgIFwiS1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXNcIiwgS1ZNX01BWF9WQ1BVUyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ3gnOlxuK1x0XHRcdHgyYXBpYyA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbitcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDJBUElDX0FQSSwgS1ZNX1gyQVBJQ19BUElfVVNFXzMyQklUX0lEUyB8XG4rXHRcdFx0XHRcdCAgICAgIEtWTV9YMkFQSUNfQVBJX0RJU0FCTEVfQlJPQURDQVNUX1FVSVJLKTtcbitcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIHZlY3RvciwgZ3Vlc3RfaXJxX2hhbmRsZXIpO1xuK1x0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpO1xuK1xuK1x0aWYgKCF4MmFwaWMpIHtcbitcdFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNjIDI1NiwgXCJ4QVBJQyBjYW4gb25seSB0YXJnZXQgSURzIFswLTI1NF0gKDI1NSB2Q1BVcylcIik7XG4rXHRcdHZpcnRfcGdfbWFwKHZtLCBBUElDX0RFRkFVTFRfR1BBLCBBUElDX0RFRkFVTFRfR1BBKTtcbitcdH1cbitcbitcdGlmIChkZXZpY2VfYmRmKSB7XG4rXHRcdGlmICghaW9tbXVfdHlwZSlcbitcdFx0XHRpb21tdV90eXBlID0gcHJvYmVfaW9tbXVfdHlwZSgpO1xuK1x0XHRpb21tdSA9IGlvbW11X2luaXQoaW9tbXVfdHlwZSk7XG4rXHRcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcbitcdFx0bXNpeCA9IHZmaW9fc2V0dXBfbXNpKGRldmljZSk7XG4rXHRcdGlycSA9IHZmaW9fbXNpeF90b19ob3N0X2lycShkZXZpY2VfYmRmLCBtc2l4KTtcbitcdFx0ZXZlbnRmZCA9IGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbbXNpeF07XG4rXHRcdHByaW50ZihcIlVzaW5nIGRldmljZSAlcyBNU0ktWFslZF0gKElSUS0ldSlcXG5cIiwgZGV2aWNlX2JkZiwgbXNpeCxcbitcdFx0ICAgICAgIGlycSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxuK1x0XHRcdCAgICBcIlNldHRpbmcgSVJRIGFmZmluaXR5ICgtYSkgcmVxdWlyZXMgYSBiYWNraW5nIGRldmljZSAoLWQpXCIpO1xuK1xuK1x0XHRldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7XG4rXHRcdGlycSA9IC0xO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIkluamVjdGluZyBpbnRlcnJ1cHRzIGZvciBHU0kgJWQgKGd1ZXN0IHZlY3RvciAweCV4KSAlZCB0aW1lc1xcblwiLFxuK1x0XHRnc2ksIHZlY3RvciwgbnJfaXJxcyk7XG4rXG4rXHRrdm1fYXNzaWduX2lycWZkKHZtLCBnc2ksIGV2ZW50ZmQpO1xuK1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHgyYXBpYyk7XG4rXG4rXHRpZiAobWlncmF0ZV92Y3B1cylcbitcdFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksIFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4rXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuK1x0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcbitcbitcdFx0d2hpbGUgKCFTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW3ZjcHUtXHUwMDNlaWRdKSlcbitcdFx0XHRjb250aW51ZTtcbitcdH1cbitcbitcdGlycV9jcHUgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2lycXM7IGkrKykge1xuK1x0XHRjb25zdCBib29sIGRvX3NldF9lbXB0eV9yb3V0aW5nID0gc2V0X2VtcHR5X3JvdXRpbmcgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiBCSVQoMykpO1xuK1x0XHRjb25zdCBib29sIGRvX3VzZV9ubWkgPSB1c2Vfbm1pIFx1MDAyNlx1MDAyNiAoaSBcdTAwMjYgQklUKDIpKTtcbitcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcbitcdFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1xuK1x0XHRpZiAoZG9fc2V0X2VtcHR5X3JvdXRpbmcpXG4rXHRcdFx0a3ZtX3NldF9lbXB0eV9nc2lfcm91dGluZyh2bSk7XG4rXG4rXHRcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcbitcbitcdFx0aWYgKGlycV9hZmZpbml0eSkge1xuK1x0XHRcdGlycV9jcHUgPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcbitcdFx0XHRwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KGlycSwgaXJxX2NwdSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1pZ3JhdGVfdmNwdXMpXG4rXHRcdFx0cGluX3Rhc2tfdG9fcmFuZG9tX2NwdSh2Y3B1X3RocmVhZHNbaSAlIG5yX3ZjcHVzXSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBucl92Y3B1czsgaisrKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlQoIUdVRVNUX1JFQ0VJVkVEX0lSUSh2Y3B1c1tqXSksXG4rXHRcdFx0XHQgICAgXCJJUlEgZmxhZyBmb3IgdkNQVSAlZCBub3QgY2xlYXIgcHJpb3IgdG8gdGVzdFwiLFxuK1x0XHRcdFx0ICAgIHZjcHVzW2pdLVx1MDAzZWlkKTtcbitcdFx0XHRURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfTk1JKHZjcHVzW2pdKSxcbitcdFx0XHRcdCAgICBcIk5NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XCIsXG4rXHRcdFx0XHQgICAgdmNwdXNbal0tXHUwMDNlaWQpO1xuK1x0XHR9XG4rXG4rXHRcdHRyaWdnZXJfaW50ZXJydXB0KGRldmljZSwgZXZlbnRmZCk7XG4rXG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4rXHRcdHdoaWxlICghR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgdGltZXNwZWNfdG9fbnModGltZXNwZWNfZWxhcHNlZChzdGFydCkpIFx1MDAzYz0gdGltZW91dF9ucylcbitcdFx0XHRjcHVfcmVsYXgoKTtcbitcbitcdFx0VEVTVF9BU1NFUlQoR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpLFxuK1x0XHRcdCAgICBcInZDUFUgJWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yICVzICh2ZWN0b3IgMHgleCkgZnJvbSBHU0kgJWQgKHZpYSBDUFUgJWQpXFxuXCIsXG4rXHRcdFx0ICAgIHZjcHUtXHUwMDNlaWQsIGRvX3VzZV9ubWkgPyBcIk5NSVwiIDogXCJJUlFcIixcbitcdFx0XHQgICAgZG9fdXNlX25taSA/IE5NSV9WRUNUT1IgOiB2ZWN0b3IsIGdzaSwgaXJxX2NwdSk7XG4rXG4rXHRcdGlmIChkb191c2Vfbm1pKVxuK1x0XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9ubWlbdmNwdS1cdTAwM2VpZF0sIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9pcnFbdmNwdS1cdTAwM2VpZF0sIGZhbHNlKTtcbitcdH1cbitcbitcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4rXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbisjaW5jbHVkZSBcImt2bV9zeXNjYWxscy5oXCJcbiBcbiAjaWZkZWYgX19HTElCQ19fXG4gI2luY2x1ZGUgXHUwMDNjZXhlY2luZm8uaFx1MDAzZVxuQEAgLTY0LDExICs2NSw2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKVxuIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKSB7fVxuICNlbmRpZlxuIFxuLXN0YXRpYyBwaWRfdCBfZ2V0dGlkKHZvaWQpXG4te1xuLVx0cmV0dXJuIHN5c2NhbGwoU1lTX2dldHRpZCk7XG4tfVxuLVxuIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKVxuIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxuIFx0Y29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuQEAgLTgxLDcgKzc3LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRcdGZwcmludGYoc3RkZXJyLCBcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCJcbiBcdFx0XHRcIiAgJXM6JXU6ICVzXFxuXCJcbiBcdFx0XHRcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxuXCIsXG4tXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIF9nZXR0aWQoKSxcbitcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuIFx0XHRcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFx0XHR0ZXN0X2R1bXBfc3RhY2soKTtcbiBcdFx0aWYgKGZtdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMTk1ZjNmZGFlMWUzOTYuLjM3OTQ1NzVkMmNhMGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNSwxNCArMTUsMjIgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvcmVzb3VyY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbiBcbi11MzIgZ3Vlc3RfcmFuZG9tX3NlZWQ7XG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XG4tc3RhdGljIHUzMiBsYXN0X2d1ZXN0X3NlZWQ7XG4rdTMyIGt2bV9yYW5kb21fc2VlZDtcbitzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBrdm1fcm5nO1xuK3N0YXRpYyB1MzIgbGFzdF9rdm1fc2VlZDtcbitcbitzdGF0aWMgdm9pZCBrdm1fc2VlZF9ybmcodTMyIHNlZWQpXG4re1xuK1x0a3ZtX3JhbmRvbV9zZWVkID0gbGFzdF9rdm1fc2VlZCA9IHNlZWQ7XG4rXHRwcl9pbmZvKFwiUmFuZG9tIHNlZWQ6IDB4JXhcXG5cIiwga3ZtX3JhbmRvbV9zZWVkKTtcbitcdGt2bV9ybmcgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQpO1xuK31cbiBcbiBzdGF0aWMgc2l6ZV90IHZjcHVfbW1hcF9zeih2b2lkKTtcbiBcbkBAIC01MTUsMTIgKzUyMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdHNsb3QwID0gbWVtc2xvdDJyZWdpb24odm0sIDApO1xuIFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciArIHNsb3QwLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSk7XG4gXG4tXHRpZiAoZ3Vlc3RfcmFuZG9tX3NlZWQgIT0gbGFzdF9ndWVzdF9zZWVkKSB7XG4tXHRcdHByX2luZm8oXCJSYW5kb20gc2VlZDogMHgleFxcblwiLCBndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRcdGxhc3RfZ3Vlc3Rfc2VlZCA9IGd1ZXN0X3JhbmRvbV9zZWVkO1xuLVx0fVxuLVx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3Rfcm5nKTtcbitcdGlmIChrdm1fcmFuZG9tX3NlZWQgIT0gbGFzdF9rdm1fc2VlZClcbitcdFx0a3ZtX3NlZWRfcm5nKGt2bV9yYW5kb21fc2VlZCk7XG4rXG4rXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3JuZyk7XG4gXG4gXHRrdm1fYXJjaF92bV9wb3N0X2NyZWF0ZSh2bSwgbnJfcnVubmFibGVfdmNwdXMpO1xuIFxuQEAgLTY2MiwxOSArNjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpXG4gXHQgICAgICAgXCIgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcblwiLCBuYW1lLCBuYW1lKTtcbiB9XG4gXG4rdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4re1xuK1x0aW50IHRhcmdldF9pZHg7XG4rXHRpbnQgbnJfY3B1cztcbitcdGludCBjcHU7XG4rXG4rXHRucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpO1xuK1x0VEVTVF9BU1NFUlQobnJfY3B1cyBcdTAwM2UgMCwgXCJObyBDUFVzIGF2YWlsYWJsZSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK1xuK1x0dGFyZ2V0X2lkeCA9IGt2bV9yYW5kb21fdTY0KFx1MDAyNmt2bV9ybmcpICUgbnJfY3B1cztcbitcbitcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1KyspIHtcbitcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuK1x0XHRcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0VEVTVF9GQUlMKFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK31cbitcbiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sXG4gXHRcdFx0ICAgIGludCBucl92Y3B1cylcbiB7XG4gXHRjcHVfc2V0X3QgYWxsb3dlZF9tYXNrO1xuIFx0Y2hhciAqY3B1LCAqY3B1X2xpc3Q7XG4gXHRjaGFyIGRlbGltWzJdID0gXCIsXCI7XG4tXHRpbnQgaSwgcjtcbitcdGludCBpO1xuIFxuIFx0Y3B1X2xpc3QgPSBzdHJkdXAocGNwdXNfc3RyaW5nKTtcbiBcdFRFU1RfQVNTRVJUKGNwdV9saXN0LCBcInN0cmR1cCgpIGFsbG9jYXRpb24gZmFpbGVkLlwiKTtcbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInNjaGVkX2dldGFmZmluaXR5KCkgZmFpbGVkXCIpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIFxuIFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XG4gXG5AQCAtMjI3OSw4ICsyMzA1LDggQEAgdm9pZCBfX2F0dHJpYnV0ZSgoY29uc3RydWN0b3IpKSBrdm1fc2VsZnRlc3RfaW5pdCh2b2lkKVxuIFx0c2lnYWN0aW9uKFNJR0lMTCwgXHUwMDI2c2lnX3NhLCBOVUxMKTtcbiBcdHNpZ2FjdGlvbihTSUdGUEUsIFx1MDAyNnNpZ19zYSwgTlVMTCk7XG4gXG4tXHRndWVzdF9yYW5kb21fc2VlZCA9IGxhc3RfZ3Vlc3Rfc2VlZCA9IHJhbmRvbSgpO1xuLVx0cHJfaW5mbyhcIlJhbmRvbSBzZWVkOiAweCV4XFxuXCIsIGd1ZXN0X3JhbmRvbV9zZWVkKTtcbitcdHNyYW5kb20odGltZSgwKSk7XG4rXHRrdm1fc2VlZF9ybmcocmFuZG9tKCkpO1xuIFxuIFx0a3ZtX3NlbGZ0ZXN0X2FyY2hfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuaW5kZXggNmRjZDE1OTEwYTA2MDguLjM1OTliNzVkOTdjOTE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTQ4LDE0ICs0OCwxNCBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcdTAwMjZtZW1zdHJlc3NfYXJncztcbiBcdHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MgPSBcdTAwMjZhcmdzLVx1MDAzZXZjcHVfYXJnc1t2Y3B1X2lkeF07XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XG4rXHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSByYW5kX3N0YXRlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0dTY0IHBhZ2VzO1xuIFx0dTY0IGFkZHI7XG4gXHR1NjQgcGFnZTtcbiBcdGludCBpO1xuIFxuLVx0cmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XG4rXHRyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICsgdmNwdV9pZHgpO1xuIFxuIFx0Z3ZhID0gdmNwdV9hcmdzLVx1MDAzZWd2YTtcbiBcdHBhZ2VzID0gdmNwdV9hcmdzLVx1MDAzZXBhZ2VzO1xuQEAgLTY5LDEzICs2OSwxMyBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZXM7IGkrKykge1xuIFx0XHRcdGlmIChhcmdzLVx1MDAzZXJhbmRvbV9hY2Nlc3MpXG4tXHRcdFx0XHRwYWdlID0gZ3Vlc3RfcmFuZG9tX3UzMihcdTAwMjZyYW5kX3N0YXRlKSAlIHBhZ2VzO1xuK1x0XHRcdFx0cGFnZSA9IGt2bV9yYW5kb21fdTMyKFx1MDAyNnJhbmRfc3RhdGUpICUgcGFnZXM7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZSA9IGk7XG4gXG4gXHRcdFx0YWRkciA9IGd2YSArIChwYWdlICogYXJncy1cdTAwM2VndWVzdF9wYWdlX3NpemUpO1xuIFxuLVx0XHRcdGlmIChfX2d1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4rXHRcdFx0aWYgKF9fa3ZtX3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4gXHRcdFx0XHQqKHU2NCAqKWFkZHIgPSAweDAxMjM0NTY3ODlBQkNERUY7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0UkVBRF9PTkNFKCoodTY0ICopYWRkcik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk2MGIzODQxZDYzNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcbkBAIC0wLDAgKzEsNTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jX3V0aWwuaFwiXG4rXG4rc3RhdGljIEZJTEUgKm9wZW5fcHJvY19pbnRlcnJ1cHRzKHZvaWQpXG4re1xuK1x0RklMRSAqZnA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3Byb2MvaW50ZXJydXB0c1wiLCBcInJcIik7XG4rXHRURVNUX0FTU0VSVChmcCwgXCJmb3BlbigvcHJvYy9pbnRlcnJ1cHRzKSBmYWlsZWRcIik7XG4rXG4rXHRyZXR1cm4gZnA7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpXG4re1xuK1x0Y2hhciBzZWFyY2hfc3RyaW5nWzY0XTtcbitcdGNoYXIgbGluZVs0MDk2XTtcbitcdGludCBpcnEgPSAtMTtcbitcdEZJTEUgKmZwO1xuK1xuK1x0ZnAgPSBvcGVuX3Byb2NfaW50ZXJydXB0cygpO1xuK1xuK1x0c25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCBcInZmaW8tbXNpeFslZF1cIiwgbXNpeCk7XG4rXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHN0cnN0cihsaW5lLCBkZXZpY2VfYmRmKSBcdTAwMjZcdTAwMjYgc3Ryc3RyKGxpbmUsIHNlYXJjaF9zdHJpbmcpKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfRVEoMSwgc3NjYW5mKGxpbmUsIFwiJWQ6XCIsIFx1MDAyNmlycSkpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRmY2xvc2UoZnApO1xuK1xuK1x0VEVTVF9BU1NFUlQoaXJxICE9IC0xLCBcIkZhaWxlZCB0byBsb2NhdGUgSVJRIGZvciAlcyAlc1wiLCBkZXZpY2VfYmRmLFxuK1x0XHQgICAgc2VhcmNoX3N0cmluZyk7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGludClpcnE7XG4rfVxuK1xuK3ZvaWQgcHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgciwgZmQ7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvaXJxLyV1L3NtcF9hZmZpbml0eV9saXN0XCIsIGlycSk7XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcbitcdFRFU1RfQVNTRVJUKGZkIFx1MDAzZT0gMCwgXCJGYWlsZWQgdG8gb3BlbiAlc1wiLCBwYXRoKTtcbitcbitcdHIgPSBkcHJpbnRmKGZkLCBcIiVkXFxuXCIsIGNwdSk7XG4rXHRURVNUX0FTU0VSVChyIFx1MDAzZSAwLCBcIkZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcIiwgaXJxLCBjcHUpO1xuK1xuK1x0a3ZtX2Nsb3NlKGZkKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbmluZGV4IGJhYjFiZDJiNzc1YjZkLi42YjAwYWIxMWYzYzAyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXCJsaW51eC9rZXJuZWwuaFwiXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrdm1fc3lzY2FsbHMuaFwiXG4gXG4gc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjtcbiBcbkBAIC0zMCwxOCArMzEsMzYgQEAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgZXhwZWN0X3NpZ2J1c19oYW5kbGVyKGludCBzaWdudW0pXG4gICogUGFyay1NaWxsZXIgTENHIHVzaW5nIHN0YW5kYXJkIGNvbnN0YW50cy5cbiAgKi9cbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIG5ld19ndWVzdF9yYW5kb21fc3RhdGUodTMyIHNlZWQpXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpXG4ge1xuLVx0c3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4rXHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4gXHRyZXR1cm4gcztcbiB9XG4gXG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4rdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdGF0ZS1cdTAwM2VzZWVkID0gKHU2NClzdGF0ZS1cdTAwM2VzZWVkICogNDgyNzEgJSAoKHUzMikoMSBcdTAwM2NcdTAwM2MgMzEpIC0gMSk7XG4gXHRyZXR1cm4gc3RhdGUtXHUwMDNlc2VlZDtcbiB9XG4gXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbitcdFx0XHQgICAgdTY0IG1heClcbit7XG4rXHR1NjQgdmFsdWU7XG4rXHR1NjQgcmFuZ2U7XG4rXG4rXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcIiwgbWluLCBtYXgpO1xuK1xuK1x0dmFsdWUgPSBrdm1fcmFuZG9tX3U2NChzdGF0ZSk7XG4rXG4rXHRyYW5nZSA9IG1heCAtIG1pbjtcbitcdGlmIChyYW5nZSA9PSBVTExPTkdfTUFYKVxuK1x0XHRyZXR1cm4gdmFsdWU7XG4rXG4rXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xuK31cbitcbiAvKlxuICAqIFBhcnNlcyBcIlswLTldK1trbWd0XT9cIi5cbiAgKi9cbkBAIC0zNzcsNyArMzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXG4gXHRsb25nIHZhbFsyXTtcbiBcdEZJTEUgKmZwO1xuIFxuLVx0c3ByaW50ZihwYXRoLCBcIi9wcm9jLyVsZC9zY2hlZHN0YXRcIiwgc3lzY2FsbChTWVNfZ2V0dGlkKSk7XG4rXHRzcHJpbnRmKHBhdGgsIFwiL3Byb2MvJWxkL3NjaGVkc3RhdFwiLCAobG9uZylrdm1fZ2V0dGlkKCkpO1xuIFx0ZnAgPSBmb3BlbihwYXRoLCBcInJcIik7XG4gXHQvKiBSZXR1cm4gTUlOX1JVTl9ERUxBWV9OUyB1cG9uIGZhaWx1cmUganVzdCB0byBiZSBzYWZlICovXG4gXHRpZiAoZnNjYW5mKGZwLCBcIiVsZCAlbGQgXCIsIFx1MDAyNnZhbFswXSwgXHUwMDI2dmFsWzFdKSBcdTAwM2MgMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMTU1LDEwICsxNTUsOCBAQCBzdGF0aWMgdm9pZCAqdmNwdV93b3JrZXIodm9pZCAqZGF0YSlcbiBcdFx0ICAgIFwiRXhwZWN0ZWQgRUZBVUxUIG9uIHdyaXRlIHRvIFJPIG1lbW9yeSwgZ290IHIgPSAlZCwgZXJybm8gPSAlZFwiLCByLCBlcnJubyk7XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNm5yX3JvX2ZhdWx0cyk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykge1xuLVx0XHRXUklURV9PTkNFKGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCk7XG4tXHR9XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cylcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuIFxuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHQvKlxuQEAgLTI1NywxMSArMjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcbiBzdGF0aWMgdm9pZCBjYWxjX2RlZmF1bHRfbnJfdmNwdXModm9pZClcbiB7XG4gXHRjcHVfc2V0X3QgcG9zc2libGVfbWFzaztcbi1cdGludCByO1xuLVxuLVx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4tXHRURVNUX0FTU0VSVCghciwgXCJzY2hlZF9nZXRhZmZpbml0eSBmYWlsZWQsIGVycm5vID0gJWQgKCVzKVwiLFxuLVx0XHQgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7XG4rXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcdTAwMjZwb3NzaWJsZV9tYXNrKTtcbiBcbiBcdG5yX3ZjcHVzID0gQ1BVX0NPVU5UKFx1MDAyNnBvc3NpYmxlX21hc2spO1xuIFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNlIDAsIFwiVWgsIG5vIENQVXM/XCIpO1xuQEAgLTM4Myw4ICszNzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFx1MDAyNnRpbWVfcnVuMiwgXCJydW4gMlwiKTtcbiBcbiBcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQpO1xuLVx0bXByb3RlY3Rfcm9fZG9uZSA9IHRydWU7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgbXByb3RlY3Rfcm9fZG9uZSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7XG4gXG4gXHRyZW5kZXp2b3VzX3dpdGhfdmNwdXMoXHUwMDI2dGltZV9ybywgXCJtcHJvdGVjdCBST1wiKTtcbiBcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbmluZGV4IGY4MGFkNmI0N2QxNmIwLi41NTdlMzkzYzIyM2I5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG5AQCAtMjI2LDkgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFx1MDAyNnBvc3NpYmxlX21hc2spO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwic2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcIiwgZXJybm8sXG4tXHRcdCAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4gXG4gXHRjYWxjX21pbl9tYXhfY3B1KCk7XG4gXG5AQCAtMjQ0LDcgKzI0Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuIFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpc3lzY2FsbChTWVNfZ2V0dGlkKSk7XG4rXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7XG4gXG4gXHRpZiAobGF0ZW5jeSBcdTAwM2U9IDApIHtcbiBcdFx0LypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuaW5kZXggNzZmY2RkMWZkM2NiNDguLjJkZTg3NTQ5ZmNjMDM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxuIHtcbiBcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xuLVx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0sXG4rXHRcdFx0XHQodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsICh1bG9uZylzdF9ndmFbaV0gfCBLVk1fTVNSX0VOQUJMRUQpO1xuIH1cbkBAIC0xODcsOCArMTg3LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4gXHR9O1xuIFxuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdHN0X2lwYSA9ICh1bG9uZylzdF9ndmFbaV07XG4gXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG5AQCAtMzEwLDEwICszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4ge1xuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3RfZ3BhW2ldID0gYWRkcl9ndmEyZ3BhKHZjcHUtXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS1cdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2dwYVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuK1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QodmNwdS1cdTAwM2V2bSwgc3RfZ3BhW2ldLCBhZGRyX2d2YTJncGEodmNwdS1cdTAwM2V2bSwgKGd2YV90KXN0X2d2YVtpXSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2R1bXAoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkeClcbkBAIC00NDIsOCArNDM5LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4gXHR9O1xuIFxuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdGVyciA9IF9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCBcdTAwMjZhdHRyKTtcbiBcdFRFU1RfQVNTRVJUKGVyciA9PSAwLCBcIk5vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXCIpO1xuQEAgLTU0OSw4ICs1NDUsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdilcbiBcbiBcdFx0LyogU2Vjb25kIFZDUFUgcnVuLCBleHBlY3QgZ3Vlc3Qgc3RvbGVuIHRpbWUgdG8gYmUgXHUwMDNjPSBydW5fZGVsYXkgKi9cbiBcdFx0cnVuX3ZjcHUodmNwdXNbaV0pO1xuLVx0XHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4tXHRcdHN0b2xlbl90aW1lID0gZ3Vlc3Rfc3RvbGVuX3RpbWVbaV07XG4rXHRcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4gXHRcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTtcbiBcdFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXHUwMDNjPSBydW5fZGVsYXksXG4gXHRcdFx0ICAgIFwiRXhwZWN0ZWQgc3RvbGVuIHRpbWUgXHUwMDNjPSAlbGQsIGdvdCAlbGRcIixcbkBAIC01NzAsOCArNTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXG4gXG4gXHRcdC8qIFJ1biBWQ1BVIGFnYWluIHRvIGNvbmZpcm0gc3RvbGVuIHRpbWUgaXMgY29uc2lzdGVudCB3aXRoIHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXSAtIHN0b2xlbl90aW1lO1xuK1x0XHRzdG9sZW5fdGltZSA9IFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pIC0gc3RvbGVuX3RpbWU7XG4gXHRcdFRFU1RfQVNTRVJUKHN0b2xlbl90aW1lIFx1MDAzZT0gcnVuX2RlbGF5LFxuIFx0XHRcdCAgICBcIkV4cGVjdGVkIHN0b2xlbiB0aW1lIFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4gXHRcdFx0ICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5AQCAtMzQsNyArMzQsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZV9idWZmZXJzKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19fX3Rlc3Rfc2V2X2RiZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGksIGludCBqLCBpbnQgbnJfYnl0ZXMpXG4ge1xuLVx0dTggcGF0dGVybiA9IGd1ZXN0X3JhbmRvbV91MzIoXHUwMDI2Z3Vlc3Rfcm5nKTtcbitcdHU4IHBhdHRlcm4gPSBrdm1fcmFuZG9tX3UzMihcdTAwMjZrdm1fcm5nKTtcbiBcbiBcdGlmIChpICsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFIHx8IGogKyBucl9ieXRlcyBcdTAwM2UgQlVGRkVSX1NJWkUpXG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjM5OjM1Ljg1NjI1Nzk3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NjYzMTk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQncyBhZGRpbmcgYSBuZXcgdGVzdCwgYGlycV90ZXN0LmNgLCBhbmQgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gZXhpc3RpbmcgdGVzdCBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiAgSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgcmVuYW1pbmcgb2YgYGd1ZXN0X3JhbmRvbV8qYCB0byBga3ZtX3JhbmRvbV8qYCBhbmQgYSBiaXQgb2YgZmlsZSByZW9yZ2FuaXphdGlvbiB0b28uICBOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLCBvciB1bnJlYWNoYWJsZSBjb2RlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBsb29rcyBsaWtlIGl04oCZcyAqZW50aXJlbHkqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuICBTZWxmdGVzdHMsIGJ5IGRlZmluaXRpb24sIGFyZSB1c2VyLXNwYWNlIHRlc3RzLiBUaGV5J3JlIG5vdCBrZXJuZWwgY29kZS4gIEkgbmVlZCB0byBiZSB2ZXJ5IHN1cmUgYWJvdXQgdGhpcywgc28gSeKAmW0gZG91YmxlLWNoZWNraW5nIHRoZSBjaGFuZ2VkIGZpbGVzLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiwgdmVyaWZ5aW5nIHRoYXQgZXZlcnkgc2luZ2xlIGZpbGUgaXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIExldCdzIHNlZTogYE1ha2VmaWxlLmt2bWAsIGBhcmNoX3RpbWVyLmNgLCBgYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNgLCBgZGVtYW5kX3BhZ2luZ190ZXN0LmNgLCB0aGUgZGlydHkgbG9nIHRlc3RzLCBhbGwgdGhlIGluY2x1ZGUgaGVhZGVycywgYGlycV90ZXN0LmNgLCB0aGUgbGlicmFyeSBmaWxlcyAoYGFzc2VydC5jYCwgYGt2bV91dGlsLmNgLCBldGMuKSwgdGhlIG1lbW9yeSBzdHJlc3MgdGVzdCwgUlNFUSB0ZXN0LCBzdGVhbCB0aW1lLCBhbmQgdGhlIFNFViBkZWJ1ZyB0ZXN0LCBhbGwgd2l0aGluIHRoZSBga3ZtYCBzZWxmdGVzdHMgZGlyZWN0b3J5LlxuXG5ZdXAsIGl0J3MgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoaXMgY29uZmlybXMgaXQncyBzdHJpY3RseSB0ZXN0IGNvZGUsIG5vdCBjb3JlIGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCB3b3VsZCBpbXBhY3QgdGhlICprZXJuZWwncyogZXhlY3V0aW9uIGZsb3cuICBUaGUgcHJvbXB0IGRpcmVjdHMgbWUgdG8gdXNlIG15IGNvZGUgc2VhcmNoIHRvb2xzIGlmIHRoaXMgd2VyZSB0byB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgYnV0IHNpbmNlIGl0IGlzIHNlbGYtdGVzdHMsIHRoZXJlJ3Mgbm8gbmVlZC4gU2luY2UgSeKAmXZlIGVzdGFibGlzaGVkIHRoYXQgaXQgKm9ubHkqIHRvdWNoZXMgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJvbXB0IHNwZWNpZmllcyBub3QgdG8gZnV6eiBpdCBpZiBpdCB0b3VjaGVzICpvbmx5KiB0ZXN0IGNvZGUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSeKAmWxsIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBvbmUgbGFzdCB0aW1lIHRvIGJlIGV4dHJhIHN1cmUsIGJ1dCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgYXJlIG5vIG90aGVyIGZpbGVzIGludm9sdmVkLlxuXG5NeSBmaW5hbCBkZXRlcm1pbmF0aW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoJ3Mgc2NvcGUgaXMgbGltaXRlZCB0byBLVk0gc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cyBhbmQgZG9uJ3QgbW9kaWZ5IGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxOCwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjM5OjQ1LjUyMjU4MjA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsqnx6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 01:30:16 +0000 UTC FinishedAt: 2026-06-27 01:39:46 +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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGZlNjAxMTBkY2VkN2E5NmM3OTNjN2NkM2MwYzRmMjY0OTQ5ZDBmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDAxOjM5OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Yi4uODhjNmM4MDQ2ZGRlYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTEsNiAmIzQzOzExLDcgQEAgTElCS1ZNICYjNDM7PSBsaWIva3ZtX3V0aWwuY1xuIExJQktWTSAmIzQzOz0gbGliL2xydV9nZW5fdXRpbC5jXG4gTElCS1ZNICYjNDM7PSBsaWIvbWVtc3RyZXNzLmNcbiBMSUJLVk0gJiM0Mzs9IGxpYi9ndWVzdF9zcHJpbnRmLmNcbiYjNDM7TElCS1ZNICYjNDM7PSBsaWIvcHJvY191dGlsLmNcbiBMSUJLVk0gJiM0Mzs9IGxpYi9yYnRyZWUuY1xuIExJQktWTSAmIzQzOz0gbGliL3NwYXJzZWJpdC5jXG4gTElCS1ZNICYjNDM7PSBsaWIvdGVzdF91dGlsLmNcbkBAIC0xNTcsNiAmIzQzOzE1OCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGd1ZXN0X21lbWZkX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGlycV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gc3RlYWxfdGltZVxuQEAgLTI1OSw2ICYjNDM7MjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcbiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS5cbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcbiYjNDM7aW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rXG4gXG4gSU5TVEFMTF9IRFJfUEFUSCA9ICQodG9wX3NyY2RpcikvdXNyXG4gTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvXG5AQCAtMzEzLDcgJiM0MzszMTYsOSBAQCBMSUJLVk1fUyA6PSAkKGZpbHRlciAlLlMsJChMSUJLVk0pKVxuIExJQktWTV9DX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fQykpXG4gTElCS1ZNX1NfT0JKIDo9ICQocGF0c3Vic3QgJS5TLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TKSlcbiBMSUJLVk1fU1RSSU5HX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fU1RSSU5HKSlcbi1MSUJLVk1fT0JKUyA9ICQoTElCS1ZNX0NfT0JKKSAkKExJQktWTV9TX09CSikgJChMSUJLVk1fU1RSSU5HX09CSikgJChMSUJDR1JPVVBfTylcbiYjNDM7TElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopXG4mIzQzO0xJQktWTV9PQkpTICYjNDM7PSAkKExJQkNHUk9VUF9PKVxuJiM0MztMSUJLVk1fT0JKUyAmIzQzOz0gJChMSUJWRklPX08pXG4gU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpXG4gU1BMSVRfVEVTVF9HRU5fT0JKIDo9ICQocGF0c3Vic3QgJSwgJChPVVRQVVQpLyQoQVJDSCkvJS5vLCAkKFNQTElUX1RFU1RTKSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggOTBjNDc1YTYxYjIyYjYuLmY4YjAyNTk3ODk3YmQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xuQEAgLTg1LDcgJiM0Mzs4NSw3IEBAIHN0YXRpYyB1MzIgdGVzdF9nZXRfcGNwdSh2b2lkKVxuIFx0Y3B1X3NldF90IG9ubGluZV9jcHVzZXQ7XG4gXG4gXHRucHJvY19jb25mID0gZ2V0X25wcm9jc19jb25mKCk7XG4tXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3NldF90KSwgXHUwMDI2b25saW5lX2NwdXNldCk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcdTAwMjZvbmxpbmVfY3B1c2V0KTtcbiBcbiBcdC8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovXG4gXHRkbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jXG5pbmRleCBmNzYyNWViNzExZDZiOC4uZDljOTM3N2E2MzI1NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xuQEAgLTEwMzksNyAmIzQzOzEwMzksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0aWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKVxuIFx0XHRleGl0KEtTRlRfU0tJUCk7XG4gXG4tXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcdTAwMjZkZWZhdWx0X2NwdXNldCk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksIFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcbiBcdHNldF9jb3VudGVyX2RlZmF1bHRzKCk7XG4gXG4gXHRpZiAodGVzdF9hcmdzLnRlc3RfdmlydHVhbCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuaW5kZXggMzAyYzQ5MjNkMDkzMGYuLmY4YjNkMGI2ODgzMGQ3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbkBAIC01Nyw3ICYjNDM7NTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLFxuIFx0XHRzdHJ1Y3QgdWZmZF9tc2cgKm1zZylcbiB7XG4tXHRwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbiYjNDM7XHRwaWRfdCB0aWQgPSBrdm1fZ2V0dGlkKCk7XG4gXHR1NjQgYWRkciA9IG1zZy1cdTAwM2VhcmcucGFnZWZhdWx0LmFkZHJlc3M7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuaW5kZXggZWY3NzlmYTkxODI3YzkuLjdjNWFiZTFhZTllMDE4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xuQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdGludCBvcHQ7XG4gXG4gXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXG4tXHRndWVzdF9yYW5kb21fc2VlZCA9IDE7XG4mIzQzO1x0a3ZtX3JhbmRvbV9zZWVkID0gMTtcbiBcbiBcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XG4gXHRcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcbkBAIC0zNTcsNyAmIzQzOzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0cC5waHlzX29mZnNldCA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4tXHRcdFx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwmIzM0O1JhbmRvbSBzZWVkXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwmIzM0O1JhbmRvbSBzZWVkXCYjMzQ7LCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7cyYjMzk7OlxuIFx0XHRcdHAuYmFja2luZ19zcmMgPSBwYXJzZV9iYWNraW5nX3NyY190eXBlKG9wdGFyZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuaW5kZXggNzRjYTA5NmJmOTc2YjUuLmU4NDE5ZDdkYTFlYWI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5AQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR3aGlsZSAoIVJFQURfT05DRSh2Y3B1X3N0b3ApKSB7XG4gXHRcdFx0YWRkciA9IGd1ZXN0X3Rlc3RfdmlydF9tZW07XG4tXHRcdFx0YWRkciAmIzQzOz0gKGd1ZXN0X3JhbmRvbV91NjQoXHUwMDI2Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbiYjNDM7XHRcdFx0YWRkciAmIzQzOz0gKGt2bV9yYW5kb21fdTY0KFx1MDAyNmt2bV9ybmcpICUgZ3Vlc3RfbnVtX3BhZ2VzKVxuIFx0XHRcdFx0KiBndWVzdF9wYWdlX3NpemU7XG4gXHRcdFx0YWRkciA9IGFsaWduX2Rvd24oYWRkciwgaG9zdF9wYWdlX3NpemUpO1xuIFxuQEAgLTcwOCw4ICYjNDM7NzA4LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcbiBcdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XG4gXG4tXHRcdFdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7XG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTtcbiBcbiBcdFx0ZGlydHlfcmluZ19wcmV2X2l0ZXJhdGlvbl9sYXN0X3BhZ2UgPSBkaXJ0eV9yaW5nX2xhc3RfcGFnZTtcbiBcdFx0V1JJVEVfT05DRShkaXJ0eV9yaW5nX3ZjcHVfcmluZ19mdWxsLCBmYWxzZSk7XG5AQCAtNzc1LDE2ICYjNDM7Nzc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0KGVudW0gdm1fZ3Vlc3RfbW9kZSBtb2RlLCB2b2lkICphcmcpXG4gXHRcdCAqIHdyaXRpbmcgbWVtb3J5IGR1cmluZyB2ZXJpZmljYXRpb24sIHBhZ2VzIHRoYXQgdGhpcyB0aHJlYWRcbiBcdFx0ICogc2VlcyBhcyBjbGVhbiBtYXkgYmUgd3JpdHRlbiB3aXRoIHRoaXMgaXRlcmF0aW9uJiMzOTtzIHZhbHVlLlxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbiYjNDM7XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCB2Y3B1X3N0b3AsIHRydWUpO1xuIFx0XHRzZW1fd2FpdChcdTAwMjZzZW1fdmNwdV9zdG9wKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogQ2xlYXIgdmNwdV9zdG9wIGFmdGVyIHRoZSB2Q1BVIHRocmVhZCBoYXMgYWNrbm93bGVkZ2UgdGhlXG4gXHRcdCAqIHN0b3AgcmVxdWVzdCBhbmQgaXMgd2FpdGluZywgaS5lLiBpcyBkZWZpbml0ZWx5IG5vdCBydW5uaW5nIVxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIGZhbHNlKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHZjcHVfc3RvcCk7XG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCBmYWxzZSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFN5bmMgdGhlIG51bWJlciBvZiB3cml0ZXMgcGVyZm9ybWVkIGJlZm9yZSB2ZXJpZmljYXRpb24sIHRoZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbmluZGV4IDZjYjNiZWQyOWI4MWFiLi41ZGFlNjE0M2RkYjA0YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfdXRpbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQVBfQVJHUzAobSwuLi4pXG5AQCAtODMsMTEgJiM0Mzs4NCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fZHVwKGludCBmZClcbiBcdHJldHVybiBuZXdfZmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbiYjNDM7fVxuJiM0MztcbiBfX0tWTV9TWVNDQUxMX0RFRklORShtdW5tYXAsIDIsIHZvaWQgKiwgbWVtLCBzaXplX3QsIHNpemUpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGNsb3NlLCAxLCBpbnQsIGZkKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmYWxsb2NhdGUsIDQsIGludCwgZmQsIGludCwgbW9kZSwgbG9mZl90LCBvZmZzZXQsIGxvZmZfdCwgbGVuKTtcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKG1hZHZpc2UsIDMsIHZvaWQgKiwgYWRkciwgc2l6ZV90LCBsZW5ndGgsIGludCwgYWR2aWNlKTtcbiYjNDM7X19LVk1fU1lTQ0FMTF9ERUZJTkUoc2NoZWRfZ2V0YWZmaW5pdHksIDMsIHBpZF90LCBwaWQsIHNpemVfdCwgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICosIG1hc2spO1xuIFxuICNkZWZpbmUga3ZtX2ZyZWVfZmQoZmQpXHRcdFxcXG4gZG8ge1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggMDRhOTEwMTY0YTI5NmEuLmIzOWU3MTNjMzBhNDY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O0ZhaWxlZCB0byBzZXQgdGhyZWFkIGFmZmluaXR5IHRvIHBDUFUgJiMzOTsldSYjMzk7XCYjMzQ7LCBjcHUpO1xuIH1cbiBcbiYjNDM7dm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxuIHtcbiBcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcbkBAIC0xMTM4LDYgJiM0MzsxMTQwLDE2IEBAIHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHVuc2lnbmVkIGludCBudW1fZ3Vlc3RfcGFnZXMpXG4gXHRtZW1jcHkoXHUwMDI2KGcpLCBfcCwgc2l6ZW9mKGcpKTtcdFx0XHRcdFxcXG4gfSlcbiBcbiYjNDM7I2RlZmluZSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoX3ZtLCBfdmFyaWFibGUpICh7XHRcdFxcXG4mIzQzO1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdChfdm0sIF92YXJpYWJsZSk7XHRcdFx0XFxcbiYjNDM7XHRSRUFEX09OQ0UoX3ZhcmlhYmxlKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgV1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QoX3ZtLCBfdmFyaWFibGUsIF92YWx1ZSkgZG8ge1x0XFxcbiYjNDM7XHRXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTtcdFx0XHRcdFxcXG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1x0XHRcdFxcXG4mIzQzO30gd2hpbGUgKDApXG4mIzQzO1xuIC8qXG4gICogV3JpdGUgYSBnbG9iYWwgdmFsdWUsIGJ1dCBvbmx5IGluIHRoZSBWTSYjMzk7cyAoZ3Vlc3QmIzM5O3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkXG4gICogZm9yIFwmIzM0O2dsb2JhbHNcJiMzNDsgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOyNpZm5kZWYgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4mIzQzOyNkZWZpbmUgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7dW5zaWduZWQgaW50IHZmaW9fbXNpeF90b19ob3N0X2lycShjb25zdCBjaGFyICp2ZmlvX2RldmljZV9iZGYsIGludCBtc2l4KTtcbiYjNDM7XG4mIzQzO3ZvaWQgcHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMDgsMzIgJiM0MzsxMDgsMzUgQEAgc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX3N1YihzdHJ1Y3QgdGltZXNwZWMgdHMxLCBzdHJ1Y3QgdGltZXNwZWMgdHMyKTtcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpO1xuIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19kaXYoc3RydWN0IHRpbWVzcGVjIHRzLCBpbnQgZGl2aXNvcik7XG4gXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7XG4mIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHtcbiBcdHUzMiBzZWVkO1xuIH07XG4gXG4tZXh0ZXJuIHUzMiBndWVzdF9yYW5kb21fc2VlZDtcbi1leHRlcm4gc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XG4mIzQzO2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xuJiM0MztleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIG5ld19ndWVzdF9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xuJiM0Mzt1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgX19ndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSxcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fa3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSxcbiBcdFx0XHRcdCAgICAgICB1OCBwZXJjZW50KVxuIHtcbi1cdHJldHVybiAoZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSkgJSAxMDApIFx1MDAzYyBwZXJjZW50O1xuJiM0MztcdHJldHVybiAoa3ZtX3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcdTAwM2MgcGVyY2VudDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGd1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRyZXR1cm4gX19ndWVzdF9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuJiM0MztcdHJldHVybiBfX2t2bV9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBndWVzdF9yYW5kb21fdTY0KHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBrdm1fcmFuZG9tX3U2NChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0cmV0dXJuICgodTY0KWd1ZXN0X3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBndWVzdF9yYW5kb21fdTMyKHN0YXRlKTtcbiYjNDM7XHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxuJiM0MztcdFx0XHQgICAgdTY0IG1heCk7XG4mIzQzO1xuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbkBAIC01NSw5ICYjNDM7NTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaClcbiBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRjb25zdCB0eXBlb2YobWVtKSB2YWwgPSAoX192YWwpO1x0XHRcdFx0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRpZiAoIWlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZCB8fCBndWVzdF9yYW5kb21fYm9vbChcdTAwMjZndWVzdF9ybmcpKSB7XHRcdFxcXG4mIzQzO1x0aWYgKCFpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQgfHwga3ZtX3JhbmRvbV9ib29sKFx1MDAyNmt2bV9ybmcpKSB7XHRcdFxcXG4gXHRcdChtZW0pID0gdmFsO1x0XHRcdFx0XHRcdFx0XHRcXFxuLVx0fSBlbHNlIGlmIChndWVzdF9yYW5kb21fYm9vbChcdTAwMjZndWVzdF9ybmcpKSB7XHRcdFx0XHRcdFxcXG4mIzQzO1x0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXHUwMDI2a3ZtX3JuZykpIHtcdFx0XHRcdFx0XFxcbiBcdFx0X19hc21fXyBfX3ZvbGF0aWxlX18oS1ZNX0ZFUCBcJiMzNDttb3YgJTEsICUwXCYjMzQ7XHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICA6IFwmIzM0OyYjNDM7bVwmIzM0OyAobWVtKVx0XHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsgKHZhbCkgOiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMzYyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2NfdXRpbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNpbmZvLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0YXRpYyB1NjQgdGltZW91dF9ucyA9IDJVTEwgKiAxMDAwICogMTAwMCAqIDEwMDA7XG4mIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdO1xuJiM0MztzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XG4mIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX25taVtLVk1fTUFYX1ZDUFVTXTtcbiYjNDM7c3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTtcbiYjNDM7c3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xuJiM0MztzdGF0aWMgYm9vbCBkb25lO1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVx0XFxcbiYjNDM7XHRTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoKF9fdmNwdSktXHUwMDNldm0sIGd1ZXN0X3JlY2VpdmVkX2lycVsoX192Y3B1KS1cdTAwM2VpZF0pXG4mIzQzOyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSlcdFxcXG4mIzQzO1x0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVx1MDAzZXZtLCBndWVzdF9yZWNlaXZlZF9ubWlbKF9fdmNwdSktXHUwMDNlaWRdKVxuJiM0MztcbiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQoX192Y3B1LCBfX25taSlcdFxcXG4mIzQzO1x0KChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiBndWVzdF9nZXRfdmNwdV9pZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHgyYXBpYylcbiYjNDM7XHRcdHJldHVybiB4MmFwaWNfcmVhZF9yZWcoQVBJQ19JRCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHhhcGljX3JlYWRfcmVnKEFQSUNfSUQpIFx1MDAzZVx1MDAzZSAyNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfaXJxX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3JlY2VpdmVkX2lycVtndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGlmICh4MmFwaWMpXG4mIzQzO1x0XHR4MmFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR4YXBpY193cml0ZV9yZWcoQVBJQ19FT0ksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9ubWlfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdFdSSVRFX09OQ0UoZ3Vlc3RfcmVjZWl2ZWRfbm1pW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHgyYXBpYylcbiYjNDM7XHRcdHgyYXBpY19lbmFibGUoKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR4YXBpY19lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0c3RpX25vcCgpO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpXG4mIzQzO1x0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XG4mIzQzO1x0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19zZXR1cF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVM7XG4mIzQzO1x0Y29uc3QgaW50IHByb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFO1xuJiM0MztcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yO1xuJiM0MztcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb247XG4mIzQzO1xuJiM0MztcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBkZXZpY2UmIzQzO2RyaXZlciBjYW4gYWN0dWFsbHkgc2VuZCBNU0lzLiAqL1xuJiM0MztcdFRFU1RfUkVRVUlSRShkZXZpY2UtXHUwMDNlZHJpdmVyLm9wcyk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGRldmljZS1cdTAwM2Vkcml2ZXIub3BzLVx1MDAzZXNlbmRfbXNpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgdXAgYSBETUEtYWJsZSByZWdpb24gZm9yIHRoZSBkcml2ZXIgdG8gdXNlLiAgIFZlcnkgZmV3IGRldmljZXNcbiYjNDM7XHQgKiBwcm92aWRlIGEgd2F5IHRvIGFyYml0cmFyaWx5IHNlbmQgaW50ZXJydXB0cyAoTVNJcyksIGUuZy4gYnkgd3JpdGluZ1xuJiM0MztcdCAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzXG4mIzQzO1x0ICogY29tcGxldGVkLCBhbmQgcHJhY3RpY2FsbHkgYWxsIGFjdGlvbnMgaW52b2x2ZSBETUEgb2Ygc29tZSBmb3JtLlxuJiM0MztcdCAqL1xuJiM0MztcdGFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb247XG4mIzQzO1x0cmVnaW9uLVx1MDAzZXNpemUgPSBTWl8yTTtcbiYjNDM7XHRyZWdpb24tXHUwMDNlaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKGFsbG9jYXRvciwgcmVnaW9uLVx1MDAzZXNpemUpO1xuJiM0MztcdHJlZ2lvbi1cdTAwM2V2YWRkciA9IGt2bV9tbWFwKHJlZ2lvbi1cdTAwM2VzaXplLCBwcm90LCBmbGFncywgLTEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJlZ2lvbi1cdTAwM2V2YWRkciAhPSBNQVBfRkFJTEVELCBcJiMzNDttbWFwKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpb21tdV9tYXAoZGV2aWNlLVx1MDAzZWlvbW11LCByZWdpb24pO1xuJiM0MztcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKGFsbG9jYXRvcik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX2RyaXZlcl9pbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdHJpZ2dlcl9pbnRlcnJ1cHQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpbnQgZXZlbnRmZClcbiYjNDM7e1xuJiM0MztcdGlmIChkZXZpY2UpXG4mIzQzO1x0XHR2ZmlvX3BjaV9kcml2ZXJfc2VuZF9tc2koZGV2aWNlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3JvdXRlX21zaShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIGdzaSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xuJiM0MztcdFx0c3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBlbnRyeTtcbiYjNDM7XHR9IHJvdXRpbmcgPSB7XG4mIzQzO1x0XHQuaGVhZGVyLm5yID0gMSxcbiYjNDM7XHRcdC5lbnRyeSA9IHtcbiYjNDM7XHRcdFx0LmdzaSA9IGdzaSxcbiYjNDM7XHRcdFx0LnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLFxuJiM0MztcdFx0XHQudS5tc2kuYWRkcmVzc19sbyA9IDB4RkVFMDAwMDAgfCAodmNwdS1cdTAwM2VpZCBcdTAwMjYgR0VOTUFTSyg3LCAwKSkgXHUwMDNjXHUwMDNjIDEyLFxuJiM0MztcdFx0XHQudS5tc2kuYWRkcmVzc19oaSA9IHZjcHUtXHUwMDNlaWQgXHUwMDI2IEdFTk1BU0soMzEsIDgpLFxuJiM0MztcdFx0XHQudS5tc2kuZGF0YSA9IHVzZV9ubWkgPyBOTUlfVkVDVE9SIHwgKDQgXHUwMDNjXHUwMDNjIDgpIDogdmVjdG9yLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXHUwMDI2cm91dGluZy5oZWFkZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCBcdTAwMjZyb3V0aW5nKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2JlX2lvbW11X3R5cGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpb19mZDtcbiYjNDM7XG4mIzQzO1x0aW9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvaW9tbXVcJiMzNDssIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoaW9fZmQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRjbG9zZShpb19mZCk7XG4mIzQzO1x0XHRyZXR1cm4gTU9ERV9JT01NVUZEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9fZmQgPSBfX29wZW5fcGF0aF9vcl9leGl0KFwmIzM0Oy9kZXYvdmZpby92ZmlvXCYjMzQ7LCBPX1JET05MWSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7SXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1wmIzM0Oyk7XG4mIzQzO1x0Y2xvc2UoaW9fZmQpO1xuJiM0MztcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDtVc2FnZTogJXMgWy1hXSBbLWQgXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXHUwMDNlXSBbLWVdIFstaF0gWy1pIG5yX2lycXNdIFstbV0gWy1uXSBbLXQgaW9tbXVfdHlwZV0gWy12IG5yX3ZjcHVzXSBbLXhdXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7VGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LWFcdEFmZmluZSB0aGUgZGV2aWNlJiMzOTtzIGhvc3QgSVJRIHRvIGEgcmFuZG9tIHBoeXNpY2FsIENQVVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0Oy1kXHRVc2UgYSBWRklPIGRldmljZSB0byBzZW5kIE1TSS1YIGludGVycnVwdHMgaW5zdGVhZCBvZiBtYW51YWxseSBzaWduYWxpbmcgdGhlIGV2ZW50ZmRcXG5cJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDstZVx0U2V0IGVtcHR5IEdTSSByb3V0aW5nIGluLWJldHdlZW4gc29tZSBpbnRlcnJ1cHRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LWlcdFRoZSBudW1iZXIgb2YgSVJRcyB0byBnZW5lcmF0ZSBkdXJpbmcgdGhlIHRlc3RcXG5cJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDstbVx0UGluIHRhcmdldCB2Q1BVIHRvIHJhbmRvbSBwaHlzaWNhbCBDUFUgYmVmb3JlIHRyaWdnZXJpbmcgaW50ZXJydXB0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LW5cdERlbGl2ZXIgNTAgcGVyY2VudCBvZiBJUlFzIGFzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LXRcdE92ZXJyaWRlIHRoZSBJT01NVSB0eXBlIHRvIHVzZSAodmZpb190eXBlMV9pb21tdSBvciBpb21tdWZkKVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0Oy12XHROdW1iZXIgb2YgdkNQVVMgdG8gcnVuXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7LXhcdFVzZSB4QVBJQyBtb2RlIGluc3RlYWQgb2YgeDJBUElDIG1vZGUgaW4gdGhlIGd1ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRleGl0KEtTRlRfRkFJTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBQaWNrIGFuIElSUSB2ZWN0b3IgaW4gcmFuZ2UgWzMyLCBVSU5UOF9NQVhdLiBNaW4gdmFsdWUgaXMgMzIgYmVjYXVzZVxuJiM0MztcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxuJiM0MztcdCAqIGRlZmluZWQgTk1JcyBhbmQgaW50ZXJydXB0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxuJiM0MztcdCAqIGJlY2F1c2UgS1ZNIHJlc2VydmVzIEdTSXMgMC0xNSBmb3IgbGVnYWN5IElTQSBJUlFzIGFuZCAxNi0yMyBvbmx5IGdvXG4mIzQzO1x0ICogdG8gdGhlIElPQVBJQy4gVGhlIG1heCBpcyBLVk1fTUFYX0lSUV9ST1VURVMgLSAxLCBiZWNhdXNlXG4mIzQzO1x0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1MzIgZ3NpID0ga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2UoXHUwMDI2a3ZtX3JuZywgMjQsIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEpO1xuJiM0MztcdHU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDMyLCBVSU5UOF9NQVgpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX3QgdmNwdV90aHJlYWRzW0tWTV9NQVhfVkNQVVNdO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlID0gTlVMTDtcbiYjNDM7XHRpbnQgbnJfaXJxcyA9IDEwMDAsIG5yX3ZjcHVzID0gMTtcbiYjNDM7XHRib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7XG4mIzQzO1x0Y29uc3QgY2hhciAqZGV2aWNlX2JkZiA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqaW9tbXVfdHlwZSA9IE5VTEw7XG4mIzQzO1x0aW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7XG4mIzQzO1x0Ym9vbCBtaWdyYXRlX3ZjcHVzID0gZmFsc2U7XG4mIzQzO1x0Y3B1X3NldF90IGF2YWlsYWJsZV9jcHVzO1xuJiM0MztcdGJvb2wgdXNlX25taSA9IGZhbHNlO1xuJiM0MztcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGlycSwgaXJxX2NwdTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O2FkOmVoaTptbnQ6djp4XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHRcdHN3aXRjaCAoYykge1xuJiM0MztcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiYjNDM7XHRcdFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7ZCYjMzk7OlxuJiM0MztcdFx0XHRkZXZpY2VfYmRmID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtlJiMzOTs6XG4mIzQzO1x0XHRcdHNldF9lbXB0eV9yb3V0aW5nID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7aSYjMzk7OlxuJiM0MztcdFx0XHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcJiMzNDtOdW1iZXIgb2YgSVJRc1wmIzM0Oywgb3B0YXJnKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0XHRtaWdyYXRlX3ZjcHVzID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7biYjMzk7OlxuJiM0MztcdFx0XHR1c2Vfbm1pID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7dCYjMzk7OlxuJiM0MztcdFx0XHRpb21tdV90eXBlID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt2JiMzOTs6XG4mIzQzO1x0XHRcdG5yX3ZjcHVzID0gYXRvaV9wb3NpdGl2ZShcJiMzNDtOdW1iZXIgb2YgdkNQVVNcJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFx1MDAzYz0gS1ZNX01BWF9WQ1BVUyxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7S1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXNcJiMzNDssIEtWTV9NQVhfVkNQVVMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt4JiMzOTs6XG4mIzQzO1x0XHRcdHgyYXBpYyA9IGZhbHNlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAoKSk7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbiYjNDM7XHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX1gyQVBJQ19BUEksIEtWTV9YMkFQSUNfQVBJX1VTRV8zMkJJVF9JRFMgfFxuJiM0MztcdFx0XHRcdFx0ICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspO1xuJiM0MztcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCB2ZWN0b3IsIGd1ZXN0X2lycV9oYW5kbGVyKTtcbiYjNDM7XHR2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBOTUlfVkVDVE9SLCBndWVzdF9ubWlfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICgheDJhcGljKSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChucl92Y3B1cyBcdTAwM2MgMjU2LCBcJiMzNDt4QVBJQyBjYW4gb25seSB0YXJnZXQgSURzIFswLTI1NF0gKDI1NSB2Q1BVcylcJiMzNDspO1xuJiM0MztcdFx0dmlydF9wZ19tYXAodm0sIEFQSUNfREVGQVVMVF9HUEEsIEFQSUNfREVGQVVMVF9HUEEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9iZGYpIHtcbiYjNDM7XHRcdGlmICghaW9tbXVfdHlwZSlcbiYjNDM7XHRcdFx0aW9tbXVfdHlwZSA9IHByb2JlX2lvbW11X3R5cGUoKTtcbiYjNDM7XHRcdGlvbW11ID0gaW9tbXVfaW5pdChpb21tdV90eXBlKTtcbiYjNDM7XHRcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcbiYjNDM7XHRcdG1zaXggPSB2ZmlvX3NldHVwX21zaShkZXZpY2UpO1xuJiM0MztcdFx0aXJxID0gdmZpb19tc2l4X3RvX2hvc3RfaXJxKGRldmljZV9iZGYsIG1zaXgpO1xuJiM0MztcdFx0ZXZlbnRmZCA9IGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbbXNpeF07XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7VXNpbmcgZGV2aWNlICVzIE1TSS1YWyVkXSAoSVJRLSV1KVxcblwmIzM0OywgZGV2aWNlX2JkZiwgbXNpeCxcbiYjNDM7XHRcdCAgICAgICBpcnEpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgKC1hKSByZXF1aXJlcyBhIGJhY2tpbmcgZGV2aWNlICgtZClcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGV2ZW50ZmQgPSBrdm1fbmV3X2V2ZW50ZmQoKTtcbiYjNDM7XHRcdGlycSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtJbmplY3RpbmcgaW50ZXJydXB0cyBmb3IgR1NJICVkIChndWVzdCB2ZWN0b3IgMHgleCkgJWQgdGltZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRnc2ksIHZlY3RvciwgbnJfaXJxcyk7XG4mIzQzO1xuJiM0MztcdGt2bV9hc3NpZ25faXJxZmQodm0sIGdzaSwgZXZlbnRmZCk7XG4mIzQzO1xuJiM0MztcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB4MmFwaWMpO1xuJiM0MztcbiYjNDM7XHRpZiAobWlncmF0ZV92Y3B1cylcbiYjNDM7XHRcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYXZhaWxhYmxlX2NwdXMpLCBcdTAwMjZhdmFpbGFibGVfY3B1cyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl92Y3B1czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHZjcHVzW2ldO1xuJiM0MztcbiYjNDM7XHRcdHdoaWxlICghU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9yZWFkeV9mb3JfaXJxc1t2Y3B1LVx1MDAzZWlkXSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aXJxX2NwdSA9IC0xO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9pcnFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgYm9vbCBkb19zZXRfZW1wdHlfcm91dGluZyA9IHNldF9lbXB0eV9yb3V0aW5nIFx1MDAyNlx1MDAyNiAoaSBcdTAwMjYgQklUKDMpKTtcbiYjNDM7XHRcdGNvbnN0IGJvb2wgZG9fdXNlX25taSA9IHVzZV9ubWkgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiBCSVQoMikpO1xuJiM0MztcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcbiYjNDM7XHRcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZG9fc2V0X2VtcHR5X3JvdXRpbmcpXG4mIzQzO1x0XHRcdGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcodm0pO1xuJiM0MztcbiYjNDM7XHRcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXJxX2FmZmluaXR5KSB7XG4mIzQzO1x0XHRcdGlycV9jcHUgPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcbiYjNDM7XHRcdFx0cHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eShpcnEsIGlycV9jcHUpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtaWdyYXRlX3ZjcHVzKVxuJiM0MztcdFx0XHRwaW5fdGFza190b19yYW5kb21fY3B1KHZjcHVfdGhyZWFkc1tpICUgbnJfdmNwdXNdLCBcdTAwMjZhdmFpbGFibGVfY3B1cyk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnJfdmNwdXM7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9JUlEodmNwdXNbal0pLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtJUlEgZmxhZyBmb3IgdkNQVSAlZCBub3QgY2xlYXIgcHJpb3IgdG8gdGVzdFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgdmNwdXNbal0tXHUwMDNlaWQpO1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfTk1JKHZjcHVzW2pdKSxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7Tk1JIGZsYWcgZm9yIHZDUFUgJWQgbm90IGNsZWFyIHByaW9yIHRvIHRlc3RcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHZjcHVzW2pdLVx1MDAzZWlkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0cmlnZ2VyX2ludGVycnVwdChkZXZpY2UsIGV2ZW50ZmQpO1xuJiM0MztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4mIzQzO1x0XHR3aGlsZSAoIUdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgICB0aW1lc3BlY190b19ucyh0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSkgXHUwMDNjPSB0aW1lb3V0X25zKVxuJiM0MztcdFx0XHRjcHVfcmVsYXgoKTtcbiYjNDM7XG4mIzQzO1x0XHRURVNUX0FTU0VSVChHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQodmNwdSwgZG9fdXNlX25taSksXG4mIzQzO1x0XHRcdCAgICBcJiMzNDt2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHZjcHUtXHUwMDNlaWQsIGRvX3VzZV9ubWkgPyBcJiMzNDtOTUlcJiMzNDsgOiBcJiMzNDtJUlFcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBkb191c2Vfbm1pID8gTk1JX1ZFQ1RPUiA6IHZlY3RvciwgZ3NpLCBpcnFfY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZG9fdXNlX25taSlcbiYjNDM7XHRcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX25taVt2Y3B1LVx1MDAzZWlkXSwgZmFsc2UpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxW3ZjcHUtXHUwMDNlaWRdLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZG9uZSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbiBcbiAjaWZkZWYgX19HTElCQ19fXG4gI2luY2x1ZGUgXHUwMDNjZXhlY2luZm8uaFx1MDAzZVxuQEAgLTY0LDExICYjNDM7NjUsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZClcbiBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZCkge31cbiAjZW5kaWZcbiBcbi1zdGF0aWMgcGlkX3QgX2dldHRpZCh2b2lkKVxuLXtcbi1cdHJldHVybiBzeXNjYWxsKFNZU19nZXR0aWQpO1xuLX1cbi1cbiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSlcbiB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbkBAIC04MSw3ICYjNDM7NzcsNyBAQCB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcbiBcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0Oz09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAlczoldTogJXNcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIHBpZD0lZCB0aWQ9JWQgZXJybm89JWQgLSAlc1xcblwmIzM0Oyxcbi1cdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwgX2dldHRpZCgpLFxuJiM0MztcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuIFx0XHRcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFx0XHR0ZXN0X2R1bXBfc3RhY2soKTtcbiBcdFx0aWYgKGZtdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMTk1ZjNmZGFlMWUzOTYuLjM3OTQ1NzVkMmNhMGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNSwxNCAmIzQzOzE1LDIyIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Jlc291cmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuIFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlx0MlxuIFxuLXUzMiBndWVzdF9yYW5kb21fc2VlZDtcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZztcbi1zdGF0aWMgdTMyIGxhc3RfZ3Vlc3Rfc2VlZDtcbiYjNDM7dTMyIGt2bV9yYW5kb21fc2VlZDtcbiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcbiYjNDM7c3RhdGljIHUzMiBsYXN0X2t2bV9zZWVkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3NlZWRfcm5nKHUzMiBzZWVkKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3JhbmRvbV9zZWVkID0gbGFzdF9rdm1fc2VlZCA9IHNlZWQ7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSYW5kb20gc2VlZDogMHgleFxcblwmIzM0Oywga3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7XHRrdm1fcm5nID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyBzaXplX3QgdmNwdV9tbWFwX3N6KHZvaWQpO1xuIFxuQEAgLTUxNSwxMiAmIzQzOzUyMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdHNsb3QwID0gbWVtc2xvdDJyZWdpb24odm0sIDApO1xuIFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciAmIzQzOyBzbG90MC1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUpO1xuIFxuLVx0aWYgKGd1ZXN0X3JhbmRvbV9zZWVkICE9IGxhc3RfZ3Vlc3Rfc2VlZCkge1xuLVx0XHRwcl9pbmZvKFwmIzM0O1JhbmRvbSBzZWVkOiAweCV4XFxuXCYjMzQ7LCBndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRcdGxhc3RfZ3Vlc3Rfc2VlZCA9IGd1ZXN0X3JhbmRvbV9zZWVkO1xuLVx0fVxuLVx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3Rfcm5nKTtcbiYjNDM7XHRpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpXG4mIzQzO1x0XHRrdm1fc2VlZF9ybmcoa3ZtX3JhbmRvbV9zZWVkKTtcbiYjNDM7XG4mIzQzO1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpO1xuIFxuIFx0a3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTtcbiBcbkBAIC02NjIsMTkgJiM0Mzs2NjgsMzkgQEAgdm9pZCBrdm1fcHJpbnRfdmNwdV9waW5uaW5nX2hlbHAodm9pZClcbiBcdCAgICAgICBcJiMzNDsgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcblwmIzM0OywgbmFtZSwgbmFtZSk7XG4gfVxuIFxuJiM0Mzt2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcbiYjNDM7e1xuJiM0MztcdGludCB0YXJnZXRfaWR4O1xuJiM0MztcdGludCBucl9jcHVzO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdG5yX2NwdXMgPSBDUFVfQ09VTlQocG9zc2libGVfY3B1cyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobnJfY3B1cyBcdTAwM2UgMCwgXCYjMzQ7Tm8gQ1BVcyBhdmFpbGFibGUgaW4gcG9zc2libGVfY3B1c1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIG5yX2NwdXM7XG4mIzQzO1xuJiM0MztcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuJiM0MztcdFx0XHRwaW5fdGFza190b19jcHUodGFzaywgY3B1KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9GQUlMKFwmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1c1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxuIFx0XHRcdCAgICBpbnQgbnJfdmNwdXMpXG4ge1xuIFx0Y3B1X3NldF90IGFsbG93ZWRfbWFzaztcbiBcdGNoYXIgKmNwdSwgKmNwdV9saXN0O1xuIFx0Y2hhciBkZWxpbVsyXSA9IFwmIzM0OyxcJiMzNDs7XG4tXHRpbnQgaSwgcjtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGNwdV9saXN0ID0gc3RyZHVwKHBjcHVzX3N0cmluZyk7XG4gXHRURVNUX0FTU0VSVChjcHVfbGlzdCwgXCYjMzQ7c3RyZHVwKCkgYWxsb2NhdGlvbiBmYWlsZWQuXCYjMzQ7KTtcbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcJiMzNDtzY2hlZF9nZXRhZmZpbml0eSgpIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIFxuIFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XG4gXG5AQCAtMjI3OSw4ICYjNDM7MjMwNSw4IEBAIHZvaWQgX19hdHRyaWJ1dGUoKGNvbnN0cnVjdG9yKSkga3ZtX3NlbGZ0ZXN0X2luaXQodm9pZClcbiBcdHNpZ2FjdGlvbihTSUdJTEwsIFx1MDAyNnNpZ19zYSwgTlVMTCk7XG4gXHRzaWdhY3Rpb24oU0lHRlBFLCBcdTAwMjZzaWdfc2EsIE5VTEwpO1xuIFxuLVx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBsYXN0X2d1ZXN0X3NlZWQgPSByYW5kb20oKTtcbi1cdHByX2luZm8oXCYjMzQ7UmFuZG9tIHNlZWQ6IDB4JXhcXG5cJiMzNDssIGd1ZXN0X3JhbmRvbV9zZWVkKTtcbiYjNDM7XHRzcmFuZG9tKHRpbWUoMCkpO1xuJiM0MztcdGt2bV9zZWVkX3JuZyhyYW5kb20oKSk7XG4gXG4gXHRrdm1fc2VsZnRlc3RfYXJjaF9pbml0KCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5pbmRleCA2ZGNkMTU5MTBhMDYwOC4uMzU5OWI3NWQ5N2M5MTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jXG5AQCAtNDgsMTQgJiM0Mzs0OCwxNCBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcdTAwMjZtZW1zdHJlc3NfYXJncztcbiBcdHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MgPSBcdTAwMjZhcmdzLVx1MDAzZXZjcHVfYXJnc1t2Y3B1X2lkeF07XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XG4mIzQzO1x0c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTtcbiBcdGd2YV90IGd2YTtcbiBcdHU2NCBwYWdlcztcbiBcdHU2NCBhZGRyO1xuIFx0dTY0IHBhZ2U7XG4gXHRpbnQgaTtcbiBcbi1cdHJhbmRfc3RhdGUgPSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKGd1ZXN0X3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTtcbiYjNDM7XHRyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTtcbiBcbiBcdGd2YSA9IHZjcHVfYXJncy1cdTAwM2VndmE7XG4gXHRwYWdlcyA9IHZjcHVfYXJncy1cdTAwM2VwYWdlcztcbkBAIC02OSwxMyAmIzQzOzY5LDEzIEBAIHZvaWQgbWVtc3RyZXNzX2d1ZXN0X2NvZGUodTMyIHZjcHVfaWR4KVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYWdlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRpZiAoYXJncy1cdTAwM2VyYW5kb21fYWNjZXNzKVxuLVx0XHRcdFx0cGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcbiYjNDM7XHRcdFx0XHRwYWdlID0ga3ZtX3JhbmRvbV91MzIoXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRwYWdlID0gaTtcbiBcbiBcdFx0XHRhZGRyID0gZ3ZhICYjNDM7IChwYWdlICogYXJncy1cdTAwM2VndWVzdF9wYWdlX3NpemUpO1xuIFxuLVx0XHRcdGlmIChfX2d1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4mIzQzO1x0XHRcdGlmIChfX2t2bV9yYW5kb21fYm9vbChcdTAwMjZyYW5kX3N0YXRlLCBhcmdzLVx1MDAzZXdyaXRlX3BlcmNlbnQpKVxuIFx0XHRcdFx0Kih1NjQgKilhZGRyID0gMHgwMTIzNDU2Nzg5QUJDREVGO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdFJFQURfT05DRSgqKHU2NCAqKWFkZHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM5NjBiMzg0MWQ2MzcwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXG5AQCAtMCwwICYjNDM7MSw1NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Byb2NfdXRpbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgRklMRSAqb3Blbl9wcm9jX2ludGVycnVwdHModm9pZClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmZwO1xuJiM0MztcbiYjNDM7XHRmcCA9IGZvcGVuKFwmIzM0Oy9wcm9jL2ludGVycnVwdHNcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKGZwLCBcJiMzNDtmb3BlbigvcHJvYy9pbnRlcnJ1cHRzKSBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHNlYXJjaF9zdHJpbmdbNjRdO1xuJiM0MztcdGNoYXIgbGluZVs0MDk2XTtcbiYjNDM7XHRpbnQgaXJxID0gLTE7XG4mIzQzO1x0RklMRSAqZnA7XG4mIzQzO1xuJiM0MztcdGZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCBcJiMzNDt2ZmlvLW1zaXhbJWRdXCYjMzQ7LCBtc2l4KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7XG4mIzQzO1x0XHRpZiAoc3Ryc3RyKGxpbmUsIGRldmljZV9iZGYpIFx1MDAyNlx1MDAyNiBzdHJzdHIobGluZSwgc2VhcmNoX3N0cmluZykpIHtcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoMSwgc3NjYW5mKGxpbmUsIFwmIzM0OyVkOlwmIzM0OywgXHUwMDI2aXJxKSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGZwKTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQoaXJxICE9IC0xLCBcJiMzNDtGYWlsZWQgdG8gbG9jYXRlIElSUSBmb3IgJXMgJXNcJiMzNDssIGRldmljZV9iZGYsXG4mIzQzO1x0XHQgICAgc2VhcmNoX3N0cmluZyk7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHIsIGZkO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jL2lycS8ldS9zbXBfYWZmaW5pdHlfbGlzdFwmIzM0OywgaXJxKTtcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcbiYjNDM7XHRURVNUX0FTU0VSVChmZCBcdTAwM2U9IDAsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzXCYjMzQ7LCBwYXRoKTtcbiYjNDM7XG4mIzQzO1x0ciA9IGRwcmludGYoZmQsIFwmIzM0OyVkXFxuXCYjMzQ7LCBjcHUpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHIgXHUwMDNlIDAsIFwmIzM0O0ZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcJiMzNDssIGlycSwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2Nsb3NlKGZkKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5pbmRleCBiYWIxYmQyYjc3NWI2ZC4uNmIwMGFiMTFmM2MwMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9rZXJuZWwuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV9zeXNjYWxscy5oXCYjMzQ7XG4gXG4gc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjtcbiBcbkBAIC0zMCwxOCAmIzQzOzMxLDM2IEBAIHZvaWQgX19hdHRyaWJ1dGVfXygodXNlZCkpIGV4cGVjdF9zaWdidXNfaGFuZGxlcihpbnQgc2lnbnVtKVxuICAqIFBhcmstTWlsbGVyIExDRyB1c2luZyBzdGFuZGFyZCBjb25zdGFudHMuXG4gICovXG4gXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKVxuJiM0MztzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZSh1MzIgc2VlZClcbiB7XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHMgPSB7LnNlZWQgPSBzZWVkfTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4gXHRyZXR1cm4gcztcbiB9XG4gXG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4mIzQzO3UzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RhdGUtXHUwMDNlc2VlZCA9ICh1NjQpc3RhdGUtXHUwMDNlc2VlZCAqIDQ4MjcxICUgKCh1MzIpKDEgXHUwMDNjXHUwMDNjIDMxKSAtIDEpO1xuIFx0cmV0dXJuIHN0YXRlLVx1MDAzZXNlZWQ7XG4gfVxuIFxuJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi9cbiYjNDM7dTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbiYjNDM7XHRcdFx0ICAgIHU2NCBtYXgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsdWU7XG4mIzQzO1x0dTY0IHJhbmdlO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwmIzM0O1BFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XCYjMzQ7LCBtaW4sIG1heCk7XG4mIzQzO1xuJiM0MztcdHZhbHVlID0ga3ZtX3JhbmRvbV91NjQoc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyYW5nZSA9IG1heCAtIG1pbjtcbiYjNDM7XHRpZiAocmFuZ2UgPT0gVUxMT05HX01BWClcbiYjNDM7XHRcdHJldHVybiB2YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbiAmIzQzOyAodmFsdWUgJSAocmFuZ2UgJiM0MzsgMSkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUGFyc2VzIFwmIzM0O1swLTldJiM0Mztba21ndF0/XCYjMzQ7LlxuICAqL1xuQEAgLTM3Nyw3ICYjNDM7Mzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXG4gXHRsb25nIHZhbFsyXTtcbiBcdEZJTEUgKmZwO1xuIFxuLVx0c3ByaW50ZihwYXRoLCBcJiMzNDsvcHJvYy8lbGQvc2NoZWRzdGF0XCYjMzQ7LCBzeXNjYWxsKFNZU19nZXR0aWQpKTtcbiYjNDM7XHRzcHJpbnRmKHBhdGgsIFwmIzM0Oy9wcm9jLyVsZC9zY2hlZHN0YXRcJiMzNDssIChsb25nKWt2bV9nZXR0aWQoKSk7XG4gXHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuIFx0LyogUmV0dXJuIE1JTl9SVU5fREVMQVlfTlMgdXBvbiBmYWlsdXJlIGp1c3QgdG8gYmUgc2FmZSAqL1xuIFx0aWYgKGZzY2FuZihmcCwgXCYjMzQ7JWxkICVsZCBcJiMzNDssIFx1MDAyNnZhbFswXSwgXHUwMDI2dmFsWzFdKSBcdTAwM2MgMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMTU1LDEwICYjNDM7MTU1LDggQEAgc3RhdGljIHZvaWQgKnZjcHVfd29ya2VyKHZvaWQgKmRhdGEpXG4gXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkXCYjMzQ7LCByLCBlcnJubyk7XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNm5yX3JvX2ZhdWx0cyk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykge1xuLVx0XHRXUklURV9PTkNFKGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCk7XG4tXHR9XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNm5yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpXG4mIzQzO1x0XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCwgdHJ1ZSk7XG4gXG4gI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiBcdC8qXG5AQCAtMjU3LDExICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcbiBzdGF0aWMgdm9pZCBjYWxjX2RlZmF1bHRfbnJfdmNwdXModm9pZClcbiB7XG4gXHRjcHVfc2V0X3QgcG9zc2libGVfbWFzaztcbi1cdGludCByO1xuLVxuLVx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4tXHRURVNUX0FTU0VSVCghciwgXCYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcJiMzNDssXG4tXHRcdCAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcdTAwMjZwb3NzaWJsZV9tYXNrKTtcbiBcbiBcdG5yX3ZjcHVzID0gQ1BVX0NPVU5UKFx1MDAyNnBvc3NpYmxlX21hc2spO1xuIFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNlIDAsIFwmIzM0O1VoLCBubyBDUFVzP1wmIzM0Oyk7XG5AQCAtMzgzLDggJiM0MzszNzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFx1MDAyNnRpbWVfcnVuMiwgXCYjMzQ7cnVuIDJcJiMzNDspO1xuIFxuIFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7XG4tXHRtcHJvdGVjdF9yb19kb25lID0gdHJ1ZTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBtcHJvdGVjdF9yb19kb25lKTtcbiYjNDM7XHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7XG4gXG4gXHRyZW5kZXp2b3VzX3dpdGhfdmNwdXMoXHUwMDI2dGltZV9ybywgXCYjMzQ7bXByb3RlY3QgUk9cJiMzNDspO1xuIFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuaW5kZXggZjgwYWQ2YjQ3ZDE2YjAuLjU1N2UzOTNjMjIzYjk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbkBAIC0yMjYsOSAmIzQzOzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFx1MDAyNnBvc3NpYmxlX21hc2spO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwmIzM0O3NjaGVkX2dldGFmZmluaXR5IGZhaWxlZCwgZXJybm8gPSAlZCAoJXMpXCYjMzQ7LCBlcnJubyxcbi1cdFx0ICAgIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4gXG4gXHRjYWxjX21pbl9tYXhfY3B1KCk7XG4gXG5AQCAtMjQ0LDcgJiM0MzsyNDIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiBcbiBcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNm1pZ3JhdGlvbl90aHJlYWQsIE5VTEwsIG1pZ3JhdGlvbl93b3JrZXIsXG4tXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXN5c2NhbGwoU1lTX2dldHRpZCkpO1xuJiM0MztcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcbiBcbiBcdGlmIChsYXRlbmN5IFx1MDAzZT0gMCkge1xuIFx0XHQvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5pbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jXG5AQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxuIHtcbiBcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xuLVx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0pO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSxcbiYjNDM7XHRcdFx0XHQodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7XG4gXG4gXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLCAodWxvbmcpc3RfZ3ZhW2ldIHwgS1ZNX01TUl9FTkFCTEVEKTtcbiB9XG5AQCAtMTg3LDggJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcbiBcdH07XG4gXG4gXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cbi1cdHN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4mIzQzO1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuIFxuIFx0c3RfaXBhID0gKHVsb25nKXN0X2d2YVtpXTtcbiBcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgXHUwMDI2ZGV2KTtcbkBAIC0zMTAsMTAgJiM0MzszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4ge1xuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKTtcbi1cdHN0X2dwYVtpXSA9IGFkZHJfZ3ZhMmdwYSh2Y3B1LVx1MDAzZXZtLCAoZ3ZhX3Qpc3RfZ3ZhW2ldKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVx1MDAzZXZtLCBzdF9ncGFbaV0pO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuJiM0MztcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXHUwMDNldm0sIHN0X2dwYVtpXSwgYWRkcl9ndmEyZ3BhKHZjcHUtXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9kdW1wKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZHgpXG5AQCAtNDQyLDggJiM0Mzs0MzksNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcbiBcdH07XG4gXG4gXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cbi1cdHN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4mIzQzO1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuIFxuIFx0ZXJyID0gX192Y3B1X2lvY3RsKHZjcHUsIEtWTV9IQVNfREVWSUNFX0FUVFIsIFx1MDAyNmF0dHIpO1xuIFx0VEVTVF9BU1NFUlQoZXJyID09IDAsIFwmIzM0O05vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXCYjMzQ7KTtcbkBAIC01NDksOCAmIzQzOzU0NSw3IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxuIFxuIFx0XHQvKiBTZWNvbmQgVkNQVSBydW4sIGV4cGVjdCBndWVzdCBzdG9sZW4gdGltZSB0byBiZSBcdTAwM2M9IHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXTtcbiYjNDM7XHRcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4gXHRcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTtcbiBcdFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXHUwMDNjPSBydW5fZGVsYXksXG4gXHRcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHN0b2xlbiB0aW1lIFx1MDAzYz0gJWxkLCBnb3QgJWxkXCYjMzQ7LFxuQEAgLTU3MCw4ICYjNDM7NTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXG4gXG4gXHRcdC8qIFJ1biBWQ1BVIGFnYWluIHRvIGNvbmZpcm0gc3RvbGVuIHRpbWUgaXMgY29uc2lzdGVudCB3aXRoIHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXSAtIHN0b2xlbl90aW1lO1xuJiM0MztcdFx0c3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKSAtIHN0b2xlbl90aW1lO1xuIFx0XHRURVNUX0FTU0VSVChzdG9sZW5fdGltZSBcdTAwM2U9IHJ1bl9kZWxheSxcbiBcdFx0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgc3RvbGVuIHRpbWUgXHUwMDNlPSAlbGQsIGdvdCAlbGRcJiMzNDssXG4gXHRcdFx0ICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5AQCAtMzQsNyAmIzQzOzM0LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGVfYnVmZmVycyh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIF9fX190ZXN0X3Nldl9kYmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBpLCBpbnQgaiwgaW50IG5yX2J5dGVzKVxuIHtcbi1cdHU4IHBhdHRlcm4gPSBndWVzdF9yYW5kb21fdTMyKFx1MDAyNmd1ZXN0X3JuZyk7XG4mIzQzO1x0dTggcGF0dGVybiA9IGt2bV9yYW5kb21fdTMyKFx1MDAyNmt2bV9ybmcpO1xuIFxuIFx0aWYgKGkgJiM0MzsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFIHx8IGogJiM0MzsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFKVxuIFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmZTYwMTEwZGNlZDdhOTZjNzkzYzdjZDNjMGM0ZjI2NDk0OWQwZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDRhY2UxMjYwNmU5MzdiLi44OGM2YzgwNDZkZGVjMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMSw2ICYjNDM7MTEsNyBAQCBMSUJLVk0gJiM0Mzs9IGxpYi9rdm1fdXRpbC5jCiBMSUJLVk0gJiM0Mzs9IGxpYi9scnVfZ2VuX3V0aWwuYwogTElCS1ZNICYjNDM7PSBsaWIvbWVtc3RyZXNzLmMKIExJQktWTSAmIzQzOz0gbGliL2d1ZXN0X3NwcmludGYuYwomIzQzO0xJQktWTSAmIzQzOz0gbGliL3Byb2NfdXRpbC5jCiBMSUJLVk0gJiM0Mzs9IGxpYi9yYnRyZWUuYwogTElCS1ZNICYjNDM7PSBsaWIvc3BhcnNlYml0LmMKIExJQktWTSAmIzQzOz0gbGliL3Rlc3RfdXRpbC5jCkBAIC0xNTcsNiAmIzQzOzE1OCw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gZGlydHlfbG9nX3BlcmZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBndWVzdF9tZW1mZF90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gaXJxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSBzdGVhbF90aW1lCkBAIC0yNTksNiAmIzQzOzI2MSw3IEBAIE9WRVJSSURFX1RBUkdFVFMgPSAxCiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS4KIGluY2x1ZGUgLi4vbGliLm1rCiBpbmNsdWRlIC4uL2Nncm91cC9saWIvbGliY2dyb3VwLm1rCiYjNDM7aW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rCiAKIElOU1RBTExfSERSX1BBVEggPSAkKHRvcF9zcmNkaXIpL3VzcgogTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvCkBAIC0zMTMsNyAmIzQzOzMxNiw5IEBAIExJQktWTV9TIDo9ICQoZmlsdGVyICUuUywkKExJQktWTSkpCiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKQogTElCS1ZNX1NfT0JKIDo9ICQocGF0c3Vic3QgJS5TLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TKSkKIExJQktWTV9TVFJJTkdfT0JKIDo9ICQocGF0c3Vic3QgJS5jLCAkKE9VVFBVVCkvJS5vLCAkKExJQktWTV9TVFJJTkcpKQotTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pCiYjNDM7TElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopCiYjNDM7TElCS1ZNX09CSlMgJiM0Mzs9ICQoTElCQ0dST1VQX08pCiYjNDM7TElCS1ZNX09CSlMgJiM0Mzs9ICQoTElCVkZJT19PKQogU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpCiBTUExJVF9URVNUX0dFTl9PQkogOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJChBUkNIKS8lLm8sICQoU1BMSVRfVEVTVFMpKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwppbmRleCA5MGM0NzVhNjFiMjJiNi4uZjhiMDI1OTc4OTdiZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuYwpAQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHUzMiB0ZXN0X2dldF9wY3B1KHZvaWQpCiAJY3B1X3NldF90IG9ubGluZV9jcHVzZXQ7CiAKIAlucHJvY19jb25mID0gZ2V0X25wcm9jc19jb25mKCk7Ci0Jc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksICZhbXA7b25saW5lX2NwdXNldCk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3NldF90KSwgJmFtcDtvbmxpbmVfY3B1c2V0KTsKIAogCS8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovCiAJZG8gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jCmluZGV4IGY3NjI1ZWI3MTFkNmI4Li5kOWM5Mzc3YTYzMjU2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYwpAQCAtMTAzOSw3ICYjNDM7MTAzOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKQogCQlleGl0KEtTRlRfU0tJUCk7CiAKLQlzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCAmYW1wO2RlZmF1bHRfY3B1c2V0KTsKJiM0MzsJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksICZhbXA7ZGVmYXVsdF9jcHVzZXQpOwogCXNldF9jb3VudGVyX2RlZmF1bHRzKCk7CiAKIAlpZiAodGVzdF9hcmdzLnRlc3RfdmlydHVhbCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgc3RhdGljIHZvaWQgdmNwdV93b3JrZXIoc3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncykKIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLAogCQlzdHJ1Y3QgdWZmZF9tc2cgKm1zZykKIHsKLQlwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKJiM0MzsJcGlkX3QgdGlkID0ga3ZtX2dldHRpZCgpOwogCXU2NCBhZGRyID0gbXNnLSZndDthcmcucGFnZWZhdWx0LmFkZHJlc3M7CiAJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwogCXN0cnVjdCB0aW1lc3BlYyB0c19kaWZmOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKaW5kZXggZWY3NzlmYTkxODI3YzkuLjdjNWFiZTFhZTllMDE4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMKQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbnQgb3B0OwogCiAJLyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqLwotCWd1ZXN0X3JhbmRvbV9zZWVkID0gMTsKJiM0MzsJa3ZtX3JhbmRvbV9zZWVkID0gMTsKIAogCWRpcnR5X2xvZ19tYW51YWxfY2FwcyA9CiAJCWt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTsKQEAgLTM1Nyw3ICYjNDM7MzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCXAucGh5c19vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtyJiMzOTs6Ci0JCQlndWVzdF9yYW5kb21fc2VlZCA9IGF0b2lfcG9zaXRpdmUoJiMzNDtSYW5kb20gc2VlZCYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCWt2bV9yYW5kb21fc2VlZCA9IGF0b2lfcG9zaXRpdmUoJiMzNDtSYW5kb20gc2VlZCYjMzQ7LCBvcHRhcmcpOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtzJiMzOTs6CiAJCQlwLmJhY2tpbmdfc3JjID0gcGFyc2VfYmFja2luZ19zcmNfdHlwZShvcHRhcmcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYwppbmRleCA3NGNhMDk2YmY5NzZiNS4uZTg0MTlkN2RhMWVhYjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jCkBAIC0xMjEsNyAmIzQzOzEyMSw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZCkKIAl3aGlsZSAodHJ1ZSkgewogCQl3aGlsZSAoIVJFQURfT05DRSh2Y3B1X3N0b3ApKSB7CiAJCQlhZGRyID0gZ3Vlc3RfdGVzdF92aXJ0X21lbTsKLQkJCWFkZHIgJiM0Mzs9IChndWVzdF9yYW5kb21fdTY0KCZhbXA7Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcykKJiM0MzsJCQlhZGRyICYjNDM7PSAoa3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcykKIAkJCQkqIGd1ZXN0X3BhZ2Vfc2l6ZTsKIAkJCWFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTsKIApAQCAtNzA4LDggJiM0Mzs3MDgsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCiAJCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBpdGVyYXRpb24pOwogCi0JCVdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7CiYjNDM7CQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTsKIAogCQlkaXJ0eV9yaW5nX3ByZXZfaXRlcmF0aW9uX2xhc3RfcGFnZSA9IGRpcnR5X3JpbmdfbGFzdF9wYWdlOwogCQlXUklURV9PTkNFKGRpcnR5X3JpbmdfdmNwdV9yaW5nX2Z1bGwsIGZhbHNlKTsKQEAgLTc3NSwxNiAmIzQzOzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKQogCQkgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkCiAJCSAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbiYjMzk7cyB2YWx1ZS4KIAkJICovCi0JCVdSSVRFX09OQ0UodmNwdV9zdG9wLCB0cnVlKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHZjcHVfc3RvcCk7CiYjNDM7CQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCB0cnVlKTsKIAkJc2VtX3dhaXQoJmFtcDtzZW1fdmNwdV9zdG9wKTsKIAogCQkvKgogCQkgKiBDbGVhciB2Y3B1X3N0b3AgYWZ0ZXIgdGhlIHZDUFUgdGhyZWFkIGhhcyBhY2tub3dsZWRnZSB0aGUKIAkJICogc3RvcCByZXF1ZXN0IGFuZCBpcyB3YWl0aW5nLCBpLmUuIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmchCiAJCSAqLwotCQlXUklURV9PTkNFKHZjcHVfc3RvcCwgZmFsc2UpOwotCQlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTsKJiM0MzsJCVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCB2Y3B1X3N0b3AsIGZhbHNlKTsKIAogCQkvKgogCQkgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmgKaW5kZXggNmNiM2JlZDI5YjgxYWIuLjVkYWU2MTQzZGRiMDRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaApAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKIAogI2RlZmluZSBNQVBfQVJHUzAobSwuLi4pCkBAIC04MywxMSAmIzQzOzg0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9kdXAoaW50IGZkKQogCXJldHVybiBuZXdfZmQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKJiM0Mzt9CiYjNDM7CiBfX0tWTV9TWVNDQUxMX0RFRklORShtdW5tYXAsIDIsIHZvaWQgKiwgbWVtLCBzaXplX3QsIHNpemUpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUoZmFsbG9jYXRlLCA0LCBpbnQsIGZkLCBpbnQsIG1vZGUsIGxvZmZfdCwgb2Zmc2V0LCBsb2ZmX3QsIGxlbik7CiBfX0tWTV9TWVNDQUxMX0RFRklORShmdHJ1bmNhdGUsIDIsIHVuc2lnbmVkIGludCwgZmQsIG9mZl90LCBsZW5ndGgpOwogX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpOwomIzQzO19fS1ZNX1NZU0NBTExfREVGSU5FKHNjaGVkX2dldGFmZmluaXR5LCAzLCBwaWRfdCwgcGlkLCBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBtYXNrKTsKIAogI2RlZmluZSBrdm1fZnJlZV9mZChmZCkJCVwKIGRvIHsJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKaW5kZXggMDRhOTEwMTY0YTI5NmEuLmIzOWU3MTNjMzBhNDY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTEwOTQsNiAmIzQzOzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KQogCVRFU1RfQVNTRVJUKCFyLCAmIzM0O0ZhaWxlZCB0byBzZXQgdGhyZWFkIGFmZmluaXR5IHRvIHBDUFUgJiMzOTsldSYjMzk7JiMzNDssIGNwdSk7CiB9CiAKJiM0Mzt2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKQogewogCWludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTsKQEAgLTExMzgsNiAmIzQzOzExNDAsMTYgQEAgdm1fYWRqdXN0X251bV9ndWVzdF9wYWdlcyhlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdW5zaWduZWQgaW50IG51bV9ndWVzdF9wYWdlcykKIAltZW1jcHkoJmFtcDsoZyksIF9wLCBzaXplb2YoZykpOwkJCQlcCiB9KQogCiYjNDM7I2RlZmluZSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQoX3ZtLCBfdmFyaWFibGUpICh7CQlcCiYjNDM7CXN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpOwkJCVwKJiM0MzsJUkVBRF9PTkNFKF92YXJpYWJsZSk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKF92bSwgX3ZhcmlhYmxlLCBfdmFsdWUpIGRvIHsJXAomIzQzOwlXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTsJCQkJXAomIzQzOwlzeW5jX2dsb2JhbF90b19ndWVzdChfdm0sIF92YXJpYWJsZSk7CQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiAvKgogICogV3JpdGUgYSBnbG9iYWwgdmFsdWUsIGJ1dCBvbmx5IGluIHRoZSBWTSYjMzk7cyAoZ3Vlc3QmIzM5O3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkCiAgKiBmb3IgJiMzNDtnbG9iYWxzJiMzNDsgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaApAQCAtMCwwICYjNDM7MSwxMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsjaWZuZGVmIFNFTEZURVNUX0tWTV9QUk9DX1VUSUxfSAomIzQzOyNkZWZpbmUgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOwomIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7CiYjNDM7CiYjNDM7dm9pZCBwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmgKaW5kZXggYTU2MjcxYzIzN2FlOWUuLmQ2NGM4YTIyODIwN2E3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaApAQCAtMTA4LDMyICYjNDM7MTA4LDM1IEBAIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19zdWIoc3RydWN0IHRpbWVzcGVjIHRzMSwgc3RydWN0IHRpbWVzcGVjIHRzMik7CiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpOwogc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX2RpdihzdHJ1Y3QgdGltZXNwZWMgdHMsIGludCBkaXZpc29yKTsKIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7CiYjNDM7c3RydWN0IGt2bV9yYW5kb21fc3RhdGUgewogCXUzMiBzZWVkOwogfTsKIAotZXh0ZXJuIHUzMiBndWVzdF9yYW5kb21fc2VlZDsKLWV4dGVybiBzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZzsKJiM0MztleHRlcm4gdTMyIGt2bV9yYW5kb21fc2VlZDsKJiM0MztleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZzsKIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKTsKLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTsKJiM0MztzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7CiYjNDM7dTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBfX2d1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlLAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX2t2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsCiAJCQkJICAgICAgIHU4IHBlcmNlbnQpCiB7Ci0JcmV0dXJuIChndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgJmx0OyBwZXJjZW50OwomIzQzOwlyZXR1cm4gKGt2bV9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgJmx0OyBwZXJjZW50OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZ3Vlc3RfcmFuZG9tX2Jvb2woc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiB7Ci0JcmV0dXJuIF9fZ3Vlc3RfcmFuZG9tX2Jvb2woc3RhdGUsIDUwKTsKJiM0MzsJcmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiYjNDM7c3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKQogewotCXJldHVybiAoKHU2NClndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAmbHQ7Jmx0OyAzMikgfCBndWVzdF9yYW5kb21fdTMyKHN0YXRlKTsKJiM0MzsJcmV0dXJuICgodTY0KWt2bV9yYW5kb21fdTMyKHN0YXRlKSAmbHQ7Jmx0OyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7CiB9CiAKJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAomIzQzOwkJCSAgICB1NjQgbWF4KTsKJiM0MzsKIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgewogCVZNX01FTV9TUkNfQU5PTllNT1VTLAogCVZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYva3ZtX3V0aWxfYXJjaC5oCmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYva3ZtX3V0aWxfYXJjaC5oCkBAIC01NSw5ICYjNDM7NTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaCkKIGRvIHsJCQkJCQkJCQkJCVwKIAljb25zdCB0eXBlb2YobWVtKSB2YWwgPSAoX192YWwpOwkJCQkJCVwKIAkJCQkJCQkJCQkJXAotCWlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGd1ZXN0X3JhbmRvbV9ib29sKCZhbXA7Z3Vlc3Rfcm5nKSkgewkJXAomIzQzOwlpZiAoIWlzX2ZvcmNlZF9lbXVsYXRpb25fZW5hYmxlZCB8fCBrdm1fcmFuZG9tX2Jvb2woJmFtcDtrdm1fcm5nKSkgewkJXAogCQkobWVtKSA9IHZhbDsJCQkJCQkJCVwKLQl9IGVsc2UgaWYgKGd1ZXN0X3JhbmRvbV9ib29sKCZhbXA7Z3Vlc3Rfcm5nKSkgewkJCQkJXAomIzQzOwl9IGVsc2UgaWYgKGt2bV9yYW5kb21fYm9vbCgmYW1wO2t2bV9ybmcpKSB7CQkJCQlcCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKEtWTV9GRVAgJiMzNDttb3YgJTEsICUwJiMzNDsJCQkJXAogCQkJCSAgICAgOiAmIzM0OyYjNDM7bSYjMzQ7IChtZW0pCQkJCQlcCiAJCQkJICAgICA6ICYjMzQ7ciYjMzQ7ICh2YWwpIDogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMzYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Byb2NfdXRpbC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2luZm8uaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgdTY0IHRpbWVvdXRfbnMgPSAyVUxMICogMTAwMCAqIDEwMDAgKiAxMDAwOwomIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdOwomIzQzO3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX2lycVtLVk1fTUFYX1ZDUFVTXTsKJiM0MztzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9ubWlbS1ZNX01BWF9WQ1BVU107CiYjNDM7c3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTsKJiM0MztzdGF0aWMgYm9vbCBpcnFfYWZmaW5pdHk7CiYjNDM7c3RhdGljIGJvb2wgZG9uZTsKJiM0MzsKJiM0MzsjZGVmaW5lIEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpCVwKJiM0MzsJU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLSZndDt2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLSZndDtpZF0pCiYjNDM7I2RlZmluZSBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KQlcCiYjNDM7CVNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS0mZ3Q7dm0sIGd1ZXN0X3JlY2VpdmVkX25taVsoX192Y3B1KS0mZ3Q7aWRdKQomIzQzOwomIzQzOyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKF9fdmNwdSwgX19ubWkpCVwKJiM0MzsJKChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKQomIzQzOwomIzQzO3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICh4MmFwaWMpCiYjNDM7CQlyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4geGFwaWNfcmVhZF9yZWcoQVBJQ19JRCkgJmd0OyZndDsgMjQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2lycV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9pcnFbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpOwomIzQzOwomIzQzOwlpZiAoeDJhcGljKQomIzQzOwkJeDJhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7CiYjNDM7CWVsc2UKJiM0MzsJCXhhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoeDJhcGljKQomIzQzOwkJeDJhcGljX2VuYWJsZSgpOwomIzQzOwllbHNlCiYjNDM7CQl4YXBpY19lbmFibGUoKTsKJiM0MzsKJiM0MzsJc3RpX25vcCgpOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW2d1ZXN0X2dldF92Y3B1X2lkKCldLCB0cnVlKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpCiYjNDM7CQljcHVfcmVsYXgoKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CVRFU1RfQVNTRVJUX0VRKFVDQUxMX0RPTkUsIGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fc2V0dXBfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCBmbGFncyA9IE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTOwomIzQzOwljb25zdCBpbnQgcHJvdCA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CiYjNDM7CXN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yOwomIzQzOwlzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uOwomIzQzOwomIzQzOwkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgZGV2aWNlJiM0Mztkcml2ZXIgY2FuIGFjdHVhbGx5IHNlbmQgTVNJcy4gKi8KJiM0MzsJVEVTVF9SRVFVSVJFKGRldmljZS0mZ3Q7ZHJpdmVyLm9wcyk7CiYjNDM7CVRFU1RfUkVRVUlSRShkZXZpY2UtJmd0O2RyaXZlci5vcHMtJmd0O3NlbmRfbXNpKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHVwIGEgRE1BLWFibGUgcmVnaW9uIGZvciB0aGUgZHJpdmVyIHRvIHVzZS4gICBWZXJ5IGZldyBkZXZpY2VzCiYjNDM7CSAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nCiYjNDM7CSAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzCiYjNDM7CSAqIGNvbXBsZXRlZCwgYW5kIHByYWN0aWNhbGx5IGFsbCBhY3Rpb25zIGludm9sdmUgRE1BIG9mIHNvbWUgZm9ybS4KJiM0MzsJICovCiYjNDM7CWFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLSZndDtpb21tdSk7CiYjNDM7CiYjNDM7CXJlZ2lvbiA9ICZhbXA7ZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uOwomIzQzOwlyZWdpb24tJmd0O3NpemUgPSBTWl8yTTsKJiM0MzsJcmVnaW9uLSZndDtpb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2MoYWxsb2NhdG9yLCByZWdpb24tJmd0O3NpemUpOwomIzQzOwlyZWdpb24tJmd0O3ZhZGRyID0ga3ZtX21tYXAocmVnaW9uLSZndDtzaXplLCBwcm90LCBmbGFncywgLTEpOwomIzQzOwlURVNUX0FTU0VSVChyZWdpb24tJmd0O3ZhZGRyICE9IE1BUF9GQUlMRUQsICYjMzQ7bW1hcCgpIGZhaWxlZFxuJiMzNDspOwomIzQzOwlpb21tdV9tYXAoZGV2aWNlLSZndDtpb21tdSwgcmVnaW9uKTsKJiM0MzsKJiM0MzsJaW92YV9hbGxvY2F0b3JfY2xlYW51cChhbGxvY2F0b3IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9kcml2ZXJfaW5pdChkZXZpY2UpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2aWNlLSZndDtkcml2ZXIubXNpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0cmlnZ2VyX2ludGVycnVwdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGludCBldmVudGZkKQomIzQzO3sKJiM0MzsJaWYgKGRldmljZSkKJiM0MzsJCXZmaW9fcGNpX2RyaXZlcl9zZW5kX21zaShkZXZpY2UpOwomIzQzOwllbHNlCiYjNDM7CQlldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcm91dGVfbXNpKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgZ3NpLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJICB1OCB2ZWN0b3IsIGJvb2wgdXNlX25taSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIGhlYWRlcjsKJiM0MzsJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cnk7CiYjNDM7CX0gcm91dGluZyA9IHsKJiM0MzsJCS5oZWFkZXIubnIgPSAxLAomIzQzOwkJLmVudHJ5ID0gewomIzQzOwkJCS5nc2kgPSBnc2ksCiYjNDM7CQkJLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLAomIzQzOwkJCS51Lm1zaS5hZGRyZXNzX2xvID0gMHhGRUUwMDAwMCB8ICh2Y3B1LSZndDtpZCAmYW1wOyBHRU5NQVNLKDcsIDApKSAmbHQ7Jmx0OyAxMiwKJiM0MzsJCQkudS5tc2kuYWRkcmVzc19oaSA9IHZjcHUtJmd0O2lkICZhbXA7IEdFTk1BU0soMzEsIDgpLAomIzQzOwkJCS51Lm1zaS5kYXRhID0gdXNlX25taSA/IE5NSV9WRUNUT1IgfCAoNCAmbHQ7Jmx0OyA4KSA6IHZlY3RvciwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCAmYW1wO3JvdXRpbmcuaGVhZGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3NldF9lbXB0eV9nc2lfcm91dGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgcm91dGluZyA9IHt9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgJmFtcDtyb3V0aW5nKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnByb2JlX2lvbW11X3R5cGUodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpb19mZDsKJiM0MzsKJiM0MzsJaW9fZmQgPSBvcGVuKCYjMzQ7L2Rldi9pb21tdSYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWlmIChpb19mZCAmZ3Q7PSAwKSB7CiYjNDM7CQljbG9zZShpb19mZCk7CiYjNDM7CQlyZXR1cm4gTU9ERV9JT01NVUZEOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvX2ZkID0gX19vcGVuX3BhdGhfb3JfZXhpdCgmIzM0Oy9kZXYvdmZpby92ZmlvJiMzNDssIE9fUkRPTkxZLAomIzQzOwkJCQkgICAgJiMzNDtJcyBWRklPIChvciBJT01NVUZEKSBsb2FkZWQgYW5kIGVuYWJsZWQ/JiMzNDspOwomIzQzOwljbG9zZShpb19mZCk7CiYjNDM7CXJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0O1VzYWdlOiAlcyBbLWFdIFstZCAmbHQ7c2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uJmd0O10gWy1lXSBbLWhdIFstaSBucl9pcnFzXSBbLW1dIFstbl0gWy10IGlvbW11X3R5cGVdIFstdiBucl92Y3B1c10gWy14XVxuJiMzNDssIG5hbWUpOwomIzQzOwlwcmludGYoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7VGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1hCUFmZmluZSB0aGUgZGV2aWNlJiMzOTtzIGhvc3QgSVJRIHRvIGEgcmFuZG9tIHBoeXNpY2FsIENQVVxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDstZAlVc2UgYSBWRklPIGRldmljZSB0byBzZW5kIE1TSS1YIGludGVycnVwdHMgaW5zdGVhZCBvZiBtYW51YWxseSBzaWduYWxpbmcgdGhlIGV2ZW50ZmRcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7LWUJU2V0IGVtcHR5IEdTSSByb3V0aW5nIGluLWJldHdlZW4gc29tZSBpbnRlcnJ1cHRzXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1pCVRoZSBudW1iZXIgb2YgSVJRcyB0byBnZW5lcmF0ZSBkdXJpbmcgdGhlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7LW0JUGluIHRhcmdldCB2Q1BVIHRvIHJhbmRvbSBwaHlzaWNhbCBDUFUgYmVmb3JlIHRyaWdnZXJpbmcgaW50ZXJydXB0XG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy1uCURlbGl2ZXIgNTAgcGVyY2VudCBvZiBJUlFzIGFzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy10CU92ZXJyaWRlIHRoZSBJT01NVSB0eXBlIHRvIHVzZSAodmZpb190eXBlMV9pb21tdSBvciBpb21tdWZkKVxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDstdglOdW1iZXIgb2YgdkNQVVMgdG8gcnVuXG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0Oy14CVVzZSB4QVBJQyBtb2RlIGluc3RlYWQgb2YgeDJBUElDIG1vZGUgaW4gdGhlIGd1ZXN0XG4mIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0O1xuJiMzNDspOwomIzQzOwlleGl0KEtTRlRfRkFJTCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBpY2sgYSByYW5kb20gdmVjdG9yIGFuZCBhIHJhbmRvbSBHU0kgdG8gdXNlIGZvciBkZXZpY2UgSVJRLgomIzQzOwkgKgomIzQzOwkgKiBQaWNrIGFuIElSUSB2ZWN0b3IgaW4gcmFuZ2UgWzMyLCBVSU5UOF9NQVhdLiBNaW4gdmFsdWUgaXMgMzIgYmVjYXVzZQomIzQzOwkgKiBMaW51eC94ODYgcmVzZXJ2ZXMgdmVjdG9ycyAwLTMxIGZvciBleGNlcHRpb25zIGFuZCBhcmNoaXRlY3R1cmUKJiM0MzsJICogZGVmaW5lZCBOTUlzIGFuZCBpbnRlcnJ1cHRzLgomIzQzOwkgKgomIzQzOwkgKiBQaWNrIGEgR1NJIGluIHJhbmdlIFsyNCwgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMV0uIFRoZSBtaW4gdmFsdWUgaXMgMjQKJiM0MzsJICogYmVjYXVzZSBLVk0gcmVzZXJ2ZXMgR1NJcyAwLTE1IGZvciBsZWdhY3kgSVNBIElSUXMgYW5kIDE2LTIzIG9ubHkgZ28KJiM0MzsJICogdG8gdGhlIElPQVBJQy4gVGhlIG1heCBpcyBLVk1fTUFYX0lSUV9ST1VURVMgLSAxLCBiZWNhdXNlCiYjNDM7CSAqIEtWTV9NQVhfSVJRX1JPVVRFUyBpcyBleGNsdXNpdmUuCiYjNDM7CSAqLwomIzQzOwl1MzIgZ3NpID0ga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2UoJmFtcDtrdm1fcm5nLCAyNCwgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMSk7CiYjNDM7CXU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKCZhbXA7a3ZtX3JuZywgMzIsIFVJTlQ4X01BWCk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfdCB2Y3B1X3RocmVhZHNbS1ZNX01BWF9WQ1BVU107CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiYjNDM7CWludCBucl9pcnFzID0gMTAwMCwgbnJfdmNwdXMgPSAxOwomIzQzOwlib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7CiYjNDM7CWNvbnN0IGNoYXIgKmRldmljZV9iZGYgPSBOVUxMOwomIzQzOwljb25zdCBjaGFyICppb21tdV90eXBlID0gTlVMTDsKJiM0MzsJaW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7CiYjNDM7CWJvb2wgbWlncmF0ZV92Y3B1cyA9IGZhbHNlOwomIzQzOwljcHVfc2V0X3QgYXZhaWxhYmxlX2NwdXM7CiYjNDM7CWJvb2wgdXNlX25taSA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgaW9tbXUgKmlvbW11OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGlycSwgaXJxX2NwdTsKJiM0MzsKJiM0MzsJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7YWQ6ZWhpOm1udDp2OngmIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKGMpIHsKJiM0MzsJCWNhc2UgJiMzOTthJiMzOTs6CiYjNDM7CQkJaXJxX2FmZmluaXR5ID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtkJiMzOTs6CiYjNDM7CQkJZGV2aWNlX2JkZiA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtlJiMzOTs6CiYjNDM7CQkJc2V0X2VtcHR5X3JvdXRpbmcgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2kmIzM5OzoKJiM0MzsJCQlucl9pcnFzID0gYXRvaV9wb3NpdGl2ZSgmIzM0O051bWJlciBvZiBJUlFzJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCW1pZ3JhdGVfdmNwdXMgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzoKJiM0MzsJCQl1c2Vfbm1pID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt0JiMzOTs6CiYjNDM7CQkJaW9tbXVfdHlwZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt2JiMzOTs6CiYjNDM7CQkJbnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKCYjMzQ7TnVtYmVyIG9mIHZDUFVTJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJVEVTVF9BU1NFUlQobnJfdmNwdXMgJmx0Oz0gS1ZNX01BWF9WQ1BVUywKJiM0MzsJCQkJICAgICYjMzQ7S1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXMmIzM0OywgS1ZNX01BWF9WQ1BVUyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7eCYjMzk7OgomIzQzOwkJCXgyYXBpYyA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJaGVscChhcmd2WzBdKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF92Y3B1cyhucl92Y3B1cywgZ3Vlc3RfY29kZSwgdmNwdXMpOwomIzQzOwl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX1gyQVBJQ19BUEksIEtWTV9YMkFQSUNfQVBJX1VTRV8zMkJJVF9JRFMgfAomIzQzOwkJCQkJICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspOwomIzQzOwomIzQzOwl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCB2ZWN0b3IsIGd1ZXN0X2lycV9oYW5kbGVyKTsKJiM0MzsJdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXgyYXBpYykgewomIzQzOwkJVEVTVF9BU1NFUlQobnJfdmNwdXMgJmx0OyAyNTYsICYjMzQ7eEFQSUMgY2FuIG9ubHkgdGFyZ2V0IElEcyBbMC0yNTRdICgyNTUgdkNQVXMpJiMzNDspOwomIzQzOwkJdmlydF9wZ19tYXAodm0sIEFQSUNfREVGQVVMVF9HUEEsIEFQSUNfREVGQVVMVF9HUEEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkZXZpY2VfYmRmKSB7CiYjNDM7CQlpZiAoIWlvbW11X3R5cGUpCiYjNDM7CQkJaW9tbXVfdHlwZSA9IHByb2JlX2lvbW11X3R5cGUoKTsKJiM0MzsJCWlvbW11ID0gaW9tbXVfaW5pdChpb21tdV90eXBlKTsKJiM0MzsJCWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTsKJiM0MzsJCW1zaXggPSB2ZmlvX3NldHVwX21zaShkZXZpY2UpOwomIzQzOwkJaXJxID0gdmZpb19tc2l4X3RvX2hvc3RfaXJxKGRldmljZV9iZGYsIG1zaXgpOwomIzQzOwkJZXZlbnRmZCA9IGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW21zaXhdOwomIzQzOwkJcHJpbnRmKCYjMzQ7VXNpbmcgZGV2aWNlICVzIE1TSS1YWyVkXSAoSVJRLSV1KVxuJiMzNDssIGRldmljZV9iZGYsIG1zaXgsCiYjNDM7CQkgICAgICAgaXJxKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCVRFU1RfQVNTRVJUKCFpcnFfYWZmaW5pdHksCiYjNDM7CQkJICAgICYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgKC1hKSByZXF1aXJlcyBhIGJhY2tpbmcgZGV2aWNlICgtZCkmIzM0Oyk7CiYjNDM7CiYjNDM7CQlldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7CiYjNDM7CQlpcnEgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7SW5qZWN0aW5nIGludGVycnVwdHMgZm9yIEdTSSAlZCAoZ3Vlc3QgdmVjdG9yIDB4JXgpICVkIHRpbWVzXG4mIzM0OywKJiM0MzsJCWdzaSwgdmVjdG9yLCBucl9pcnFzKTsKJiM0MzsKJiM0MzsJa3ZtX2Fzc2lnbl9pcnFmZCh2bSwgZ3NpLCBldmVudGZkKTsKJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHgyYXBpYyk7CiYjNDM7CiYjNDM7CWlmIChtaWdyYXRlX3ZjcHVzKQomIzQzOwkJa3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksICZhbXA7YXZhaWxhYmxlX2NwdXMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfdmNwdXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJcHRocmVhZF9jcmVhdGUoJmFtcDt2Y3B1X3RocmVhZHNbaV0sIE5VTEwsIHZjcHVfdGhyZWFkX21haW4sIHZjcHVzW2ldKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaV07CiYjNDM7CiYjNDM7CQl3aGlsZSAoIVNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3RfcmVhZHlfZm9yX2lycXNbdmNwdS0mZ3Q7aWRdKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpcnFfY3B1ID0gLTE7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9pcnFzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgYm9vbCBkb19zZXRfZW1wdHlfcm91dGluZyA9IHNldF9lbXB0eV9yb3V0aW5nICZhbXA7JmFtcDsgKGkgJmFtcDsgQklUKDMpKTsKJiM0MzsJCWNvbnN0IGJvb2wgZG9fdXNlX25taSA9IHVzZV9ubWkgJmFtcDsmYW1wOyAoaSAmYW1wOyBCSVQoMikpOwomIzQzOwkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBzdGFydDsKJiM0MzsKJiM0MzsJCWlmIChkb19zZXRfZW1wdHlfcm91dGluZykKJiM0MzsJCQlrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHZtKTsKJiM0MzsKJiM0MzsJCWt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTsKJiM0MzsKJiM0MzsJCWlmIChpcnFfYWZmaW5pdHkpIHsKJiM0MzsJCQlpcnFfY3B1ID0ga3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTsKJiM0MzsJCQlwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KGlycSwgaXJxX2NwdSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobWlncmF0ZV92Y3B1cykKJiM0MzsJCQlwaW5fdGFza190b19yYW5kb21fY3B1KHZjcHVfdGhyZWFkc1tpICUgbnJfdmNwdXNdLCAmYW1wO2F2YWlsYWJsZV9jcHVzKTsKJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBucl92Y3B1czsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfSVJRKHZjcHVzW2pdKSwKJiM0MzsJCQkJICAgICYjMzQ7SVJRIGZsYWcgZm9yIHZDUFUgJWQgbm90IGNsZWFyIHByaW9yIHRvIHRlc3QmIzM0OywKJiM0MzsJCQkJICAgIHZjcHVzW2pdLSZndDtpZCk7CiYjNDM7CQkJVEVTVF9BU1NFUlQoIUdVRVNUX1JFQ0VJVkVEX05NSSh2Y3B1c1tqXSksCiYjNDM7CQkJCSAgICAmIzM0O05NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0JiMzNDssCiYjNDM7CQkJCSAgICB2Y3B1c1tqXS0mZ3Q7aWQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHJpZ2dlcl9pbnRlcnJ1cHQoZGV2aWNlLCBldmVudGZkKTsKJiM0MzsKJiM0MzsJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYW1wO3N0YXJ0KTsKJiM0MzsJCXdoaWxlICghR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICB0aW1lc3BlY190b19ucyh0aW1lc3BlY19lbGFwc2VkKHN0YXJ0KSkgJmx0Oz0gdGltZW91dF9ucykKJiM0MzsJCQljcHVfcmVsYXgoKTsKJiM0MzsKJiM0MzsJCVRFU1RfQVNTRVJUKEdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSwKJiM0MzsJCQkgICAgJiMzNDt2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxuJiMzNDssCiYjNDM7CQkJICAgIHZjcHUtJmd0O2lkLCBkb191c2Vfbm1pID8gJiMzNDtOTUkmIzM0OyA6ICYjMzQ7SVJRJiMzNDssCiYjNDM7CQkJICAgIGRvX3VzZV9ubWkgPyBOTUlfVkVDVE9SIDogdmVjdG9yLCBnc2ksIGlycV9jcHUpOwomIzQzOwomIzQzOwkJaWYgKGRvX3VzZV9ubWkpCiYjNDM7CQkJV1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX25taVt2Y3B1LSZndDtpZF0sIGZhbHNlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxW3ZjcHUtJmd0O2lkXSwgZmFsc2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3ZjcHVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwppbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKIAogI2lmZGVmIF9fR0xJQkNfXwogI2luY2x1ZGUgJmx0O2V4ZWNpbmZvLmgmZ3Q7CkBAIC02NCwxMSAmIzQzOzY1LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9kdW1wX3N0YWNrKHZvaWQpCiBzdGF0aWMgdm9pZCB0ZXN0X2R1bXBfc3RhY2sodm9pZCkge30KICNlbmRpZgogCi1zdGF0aWMgcGlkX3QgX2dldHRpZCh2b2lkKQotewotCXJldHVybiBzeXNjYWxsKFNZU19nZXR0aWQpOwotfQotCiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCWNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTgxLDcgJiM0Mzs3Nyw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLAogCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDs9PT09IFRlc3QgQXNzZXJ0aW9uIEZhaWx1cmUgPT09PVxuJiMzNDsKIAkJCSYjMzQ7ICAlczoldTogJXNcbiYjMzQ7CiAJCQkmIzM0OyAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXG4mIzM0OywKLQkJCWZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBfZ2V0dGlkKCksCiYjNDM7CQkJZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIGt2bV9nZXR0aWQoKSwKIAkJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOwogCQl0ZXN0X2R1bXBfc3RhY2soKTsKIAkJaWYgKGZtdCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDE5NWYzZmRhZTFlMzk2Li4zNzk0NTc1ZDJjYTBjZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwpAQCAtMTUsMTQgJiM0MzsxNSwyMiBAQAogI2luY2x1ZGUgJmx0O3N5cy9yZXNvdXJjZS5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKIAogI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOCTIKIAotdTMyIGd1ZXN0X3JhbmRvbV9zZWVkOwotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7Ci1zdGF0aWMgdTMyIGxhc3RfZ3Vlc3Rfc2VlZDsKJiM0Mzt1MzIga3ZtX3JhbmRvbV9zZWVkOwomIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIGt2bV9ybmc7CiYjNDM7c3RhdGljIHUzMiBsYXN0X2t2bV9zZWVkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9zZWVkX3JuZyh1MzIgc2VlZCkKJiM0Mzt7CiYjNDM7CWt2bV9yYW5kb21fc2VlZCA9IGxhc3Rfa3ZtX3NlZWQgPSBzZWVkOwomIzQzOwlwcl9pbmZvKCYjMzQ7UmFuZG9tIHNlZWQ6IDB4JXhcbiYjMzQ7LCBrdm1fcmFuZG9tX3NlZWQpOwomIzQzOwlrdm1fcm5nID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkKTsKJiM0Mzt9CiAKIHN0YXRpYyBzaXplX3QgdmNwdV9tbWFwX3N6KHZvaWQpOwogCkBAIC01MTUsMTIgJiM0Mzs1MjMsMTAgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsCiAJc2xvdDAgPSBtZW1zbG90MnJlZ2lvbih2bSwgMCk7CiAJdWNhbGxfaW5pdCh2bSwgc2xvdDAtJmd0O3JlZ2lvbi5ndWVzdF9waHlzX2FkZHIgJiM0Mzsgc2xvdDAtJmd0O3JlZ2lvbi5tZW1vcnlfc2l6ZSk7CiAKLQlpZiAoZ3Vlc3RfcmFuZG9tX3NlZWQgIT0gbGFzdF9ndWVzdF9zZWVkKSB7Ci0JCXByX2luZm8oJiMzNDtSYW5kb20gc2VlZDogMHgleFxuJiMzNDssIGd1ZXN0X3JhbmRvbV9zZWVkKTsKLQkJbGFzdF9ndWVzdF9zZWVkID0gZ3Vlc3RfcmFuZG9tX3NlZWQ7Ci0JfQotCWd1ZXN0X3JuZyA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQpOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9ybmcpOwomIzQzOwlpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpCiYjNDM7CQlrdm1fc2VlZF9ybmcoa3ZtX3JhbmRvbV9zZWVkKTsKJiM0MzsKJiM0MzsJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpOwogCiAJa3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTsKIApAQCAtNjYyLDE5ICYjNDM7NjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpCiAJICAgICAgICYjMzQ7ICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcbiYjMzQ7LCBuYW1lLCBuYW1lKTsKIH0KIAomIzQzO3ZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKQomIzQzO3sKJiM0MzsJaW50IHRhcmdldF9pZHg7CiYjNDM7CWludCBucl9jcHVzOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpOwomIzQzOwlURVNUX0FTU0VSVChucl9jcHVzICZndDsgMCwgJiMzNDtObyBDUFVzIGF2YWlsYWJsZSBpbiBwb3NzaWJsZV9jcHVzJiMzNDspOwomIzQzOwomIzQzOwl0YXJnZXRfaWR4ID0ga3ZtX3JhbmRvbV91NjQoJmFtcDtrdm1fcm5nKSAlIG5yX2NwdXM7CiYjNDM7CiYjNDM7CWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgQ1BVX1NFVFNJWkU7IGNwdSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChDUFVfSVNTRVQoY3B1LCBwb3NzaWJsZV9jcHVzKSAmYW1wOyZhbXA7IHRhcmdldF9pZHgtLSA9PSAwKSB7CiYjNDM7CQkJcGluX3Rhc2tfdG9fY3B1KHRhc2ssIGNwdSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CVRFU1RfRkFJTCgmIzM0O0ZhaWxlZCB0byBmaW5kIHJhbmRvbSBDUFUgaW4gcG9zc2libGVfY3B1cyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sCiAJCQkgICAgaW50IG5yX3ZjcHVzKQogewogCWNwdV9zZXRfdCBhbGxvd2VkX21hc2s7CiAJY2hhciAqY3B1LCAqY3B1X2xpc3Q7CiAJY2hhciBkZWxpbVsyXSA9ICYjMzQ7LCYjMzQ7OwotCWludCBpLCByOwomIzQzOwlpbnQgaTsKIAogCWNwdV9saXN0ID0gc3RyZHVwKHBjcHVzX3N0cmluZyk7CiAJVEVTVF9BU1NFUlQoY3B1X2xpc3QsICYjMzQ7c3RyZHVwKCkgYWxsb2NhdGlvbiBmYWlsZWQuJiMzNDspOwogCi0JciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCAmYW1wO2FsbG93ZWRfbWFzayk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkoKSBmYWlsZWQmIzM0Oyk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgJmFtcDthbGxvd2VkX21hc2spOwogCiAJY3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7CiAKQEAgLTIyNzksOCAmIzQzOzIzMDUsOCBAQCB2b2lkIF9fYXR0cmlidXRlKChjb25zdHJ1Y3RvcikpIGt2bV9zZWxmdGVzdF9pbml0KHZvaWQpCiAJc2lnYWN0aW9uKFNJR0lMTCwgJmFtcDtzaWdfc2EsIE5VTEwpOwogCXNpZ2FjdGlvbihTSUdGUEUsICZhbXA7c2lnX3NhLCBOVUxMKTsKIAotCWd1ZXN0X3JhbmRvbV9zZWVkID0gbGFzdF9ndWVzdF9zZWVkID0gcmFuZG9tKCk7Ci0JcHJfaW5mbygmIzM0O1JhbmRvbSBzZWVkOiAweCV4XG4mIzM0OywgZ3Vlc3RfcmFuZG9tX3NlZWQpOwomIzQzOwlzcmFuZG9tKHRpbWUoMCkpOwomIzQzOwlrdm1fc2VlZF9ybmcocmFuZG9tKCkpOwogCiAJa3ZtX3NlbGZ0ZXN0X2FyY2hfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKaW5kZXggNmRjZDE1OTEwYTA2MDguLjM1OTliNzVkOTdjOTE5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmMKQEAgLTQ4LDE0ICYjNDM7NDgsMTQgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpCiB7CiAJc3RydWN0IG1lbXN0cmVzc19hcmdzICphcmdzID0gJmFtcDttZW1zdHJlc3NfYXJnczsKIAlzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzID0gJmFtcDthcmdzLSZndDt2Y3B1X2FyZ3NbdmNwdV9pZHhdOwotCXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTsKJiM0MzsJc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgcmFuZF9zdGF0ZTsKIAlndmFfdCBndmE7CiAJdTY0IHBhZ2VzOwogCXU2NCBhZGRyOwogCXU2NCBwYWdlOwogCWludCBpOwogCi0JcmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgJiM0MzsgdmNwdV9pZHgpOwomIzQzOwlyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICYjNDM7IHZjcHVfaWR4KTsKIAogCWd2YSA9IHZjcHVfYXJncy0mZ3Q7Z3ZhOwogCXBhZ2VzID0gdmNwdV9hcmdzLSZndDtwYWdlczsKQEAgLTY5LDEzICYjNDM7NjksMTMgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpCiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHBhZ2VzOyBpJiM0MzsmIzQzOykgewogCQkJaWYgKGFyZ3MtJmd0O3JhbmRvbV9hY2Nlc3MpCi0JCQkJcGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoJmFtcDtyYW5kX3N0YXRlKSAlIHBhZ2VzOwomIzQzOwkJCQlwYWdlID0ga3ZtX3JhbmRvbV91MzIoJmFtcDtyYW5kX3N0YXRlKSAlIHBhZ2VzOwogCQkJZWxzZQogCQkJCXBhZ2UgPSBpOwogCiAJCQlhZGRyID0gZ3ZhICYjNDM7IChwYWdlICogYXJncy0mZ3Q7Z3Vlc3RfcGFnZV9zaXplKTsKIAotCQkJaWYgKF9fZ3Vlc3RfcmFuZG9tX2Jvb2woJmFtcDtyYW5kX3N0YXRlLCBhcmdzLSZndDt3cml0ZV9wZXJjZW50KSkKJiM0MzsJCQlpZiAoX19rdm1fcmFuZG9tX2Jvb2woJmFtcDtyYW5kX3N0YXRlLCBhcmdzLSZndDt3cml0ZV9wZXJjZW50KSkKIAkJCQkqKHU2NCAqKWFkZHIgPSAweDAxMjM0NTY3ODlBQkNERUY7CiAJCQllbHNlCiAJCQkJUkVBRF9PTkNFKCoodTY0ICopYWRkcik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk2MGIzODQxZDYzNzAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jCkBAIC0wLDAgJiM0MzsxLDU0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY191dGlsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBGSUxFICpvcGVuX3Byb2NfaW50ZXJydXB0cyh2b2lkKQomIzQzO3sKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CWZwID0gZm9wZW4oJiMzNDsvcHJvYy9pbnRlcnJ1cHRzJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQoZnAsICYjMzQ7Zm9wZW4oL3Byb2MvaW50ZXJydXB0cykgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZnA7CiYjNDM7fQomIzQzOwomIzQzO3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpCiYjNDM7ewomIzQzOwljaGFyIHNlYXJjaF9zdHJpbmdbNjRdOwomIzQzOwljaGFyIGxpbmVbNDA5Nl07CiYjNDM7CWludCBpcnEgPSAtMTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CWZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTsKJiM0MzsKJiM0MzsJc25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCAmIzM0O3ZmaW8tbXNpeFslZF0mIzM0OywgbXNpeCk7CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewomIzQzOwkJaWYgKHN0cnN0cihsaW5lLCBkZXZpY2VfYmRmKSAmYW1wOyZhbXA7IHN0cnN0cihsaW5lLCBzZWFyY2hfc3RyaW5nKSkgewomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKDEsIHNzY2FuZihsaW5lLCAmIzM0OyVkOiYjMzQ7LCAmYW1wO2lycSkpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmcCk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKGlycSAhPSAtMSwgJiMzNDtGYWlsZWQgdG8gbG9jYXRlIElSUSBmb3IgJXMgJXMmIzM0OywgZGV2aWNlX2JkZiwKJiM0MzsJCSAgICBzZWFyY2hfc3RyaW5nKTsKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CWludCByLCBmZDsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jL2lycS8ldS9zbXBfYWZmaW5pdHlfbGlzdCYjMzQ7LCBpcnEpOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKJiM0MzsJVEVTVF9BU1NFUlQoZmQgJmd0Oz0gMCwgJiMzNDtGYWlsZWQgdG8gb3BlbiAlcyYjMzQ7LCBwYXRoKTsKJiM0MzsKJiM0MzsJciA9IGRwcmludGYoZmQsICYjMzQ7JWRcbiYjMzQ7LCBjcHUpOwomIzQzOwlURVNUX0FTU0VSVChyICZndDsgMCwgJiMzNDtGYWlsZWQgdG8gYWZmaW5pdGl6ZSBJUlEtJXUgdG8gQ1BVICVkJiMzNDssIGlycSwgY3B1KTsKJiM0MzsKJiM0MzsJa3ZtX2Nsb3NlKGZkKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwppbmRleCBiYWIxYmQyYjc3NWI2ZC4uNmIwMGFiMTFmM2MwMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICYjMzQ7bGludXgva2VybmVsLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3Rlc3RfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKIAogc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjsKIApAQCAtMzAsMTggJiM0MzszMSwzNiBAQCB2b2lkIF9fYXR0cmlidXRlX18oKHVzZWQpKSBleHBlY3Rfc2lnYnVzX2hhbmRsZXIoaW50IHNpZ251bSkKICAqIFBhcmstTWlsbGVyIExDRyB1c2luZyBzdGFuZGFyZCBjb25zdGFudHMuCiAgKi8KIAotc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBuZXdfZ3Vlc3RfcmFuZG9tX3N0YXRlKHUzMiBzZWVkKQomIzQzO3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIG5ld19rdm1fcmFuZG9tX3N0YXRlKHUzMiBzZWVkKQogewotCXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgcyA9IHsuc2VlZCA9IHNlZWR9OwomIzQzOwlzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07CiAJcmV0dXJuIHM7CiB9CiAKLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKQomIzQzO3UzMiBrdm1fcmFuZG9tX3UzMihzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RhdGUtJmd0O3NlZWQgPSAodTY0KXN0YXRlLSZndDtzZWVkICogNDgyNzEgJSAoKHUzMikoMSAmbHQ7Jmx0OyAzMSkgLSAxKTsKIAlyZXR1cm4gc3RhdGUtJmd0O3NlZWQ7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgcmFuZG9tIHU2NCBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFttaW4sIG1heF0gKi8KJiM0Mzt1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLAomIzQzOwkJCSAgICB1NjQgbWF4KQomIzQzO3sKJiM0MzsJdTY0IHZhbHVlOwomIzQzOwl1NjQgcmFuZ2U7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKG1pbiAmbHQ7PSBtYXgsICYjMzQ7UEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHgmIzM0OywgbWluLCBtYXgpOwomIzQzOwomIzQzOwl2YWx1ZSA9IGt2bV9yYW5kb21fdTY0KHN0YXRlKTsKJiM0MzsKJiM0MzsJcmFuZ2UgPSBtYXggLSBtaW47CiYjNDM7CWlmIChyYW5nZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIHZhbHVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWluICYjNDM7ICh2YWx1ZSAlIChyYW5nZSAmIzQzOyAxKSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFBhcnNlcyAmIzM0O1swLTldJiM0Mztba21ndF0/JiMzNDsuCiAgKi8KQEAgLTM3Nyw3ICYjNDM7Mzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpCiAJbG9uZyB2YWxbMl07CiAJRklMRSAqZnA7CiAKLQlzcHJpbnRmKHBhdGgsICYjMzQ7L3Byb2MvJWxkL3NjaGVkc3RhdCYjMzQ7LCBzeXNjYWxsKFNZU19nZXR0aWQpKTsKJiM0MzsJc3ByaW50ZihwYXRoLCAmIzM0Oy9wcm9jLyVsZC9zY2hlZHN0YXQmIzM0OywgKGxvbmcpa3ZtX2dldHRpZCgpKTsKIAlmcCA9IGZvcGVuKHBhdGgsICYjMzQ7ciYjMzQ7KTsKIAkvKiBSZXR1cm4gTUlOX1JVTl9ERUxBWV9OUyB1cG9uIGZhaWx1cmUganVzdCB0byBiZSBzYWZlICovCiAJaWYgKGZzY2FuZihmcCwgJiMzNDslbGQgJWxkICYjMzQ7LCAmYW1wO3ZhbFswXSwgJmFtcDt2YWxbMV0pICZsdDsgMikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwppbmRleCA1NGQyODE0MTlkMzEwNC4uM2Q1ZjMzYTYzYjJiNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMKQEAgLTE1NSwxMCAmIzQzOzE1NSw4IEBAIHN0YXRpYyB2b2lkICp2Y3B1X3dvcmtlcih2b2lkICpkYXRhKQogCQkgICAgJiMzNDtFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkJiMzNDssIHIsIGVycm5vKTsKIAogCWF0b21pY19pbmMoJmFtcDtucl9yb19mYXVsdHMpOwotCWlmIChhdG9taWNfcmVhZCgmYW1wO25yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpIHsKLQkJV1JJVEVfT05DRShhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTsKLQkJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGFsbF92Y3B1c19oaXRfcm9fZmF1bHQpOwotCX0KJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykKJiM0MzsJCVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTsKIAogI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIAkvKgpAQCAtMjU3LDExICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSkKIHN0YXRpYyB2b2lkIGNhbGNfZGVmYXVsdF9ucl92Y3B1cyh2b2lkKQogewogCWNwdV9zZXRfdCBwb3NzaWJsZV9tYXNrOwotCWludCByOwotCi0JciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgJmFtcDtwb3NzaWJsZV9tYXNrKTsKLQlURVNUX0FTU0VSVCghciwgJiMzNDtzY2hlZF9nZXRhZmZpbml0eSBmYWlsZWQsIGVycm5vID0gJWQgKCVzKSYjMzQ7LAotCQkgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksICZhbXA7cG9zc2libGVfbWFzayk7CiAKIAlucl92Y3B1cyA9IENQVV9DT1VOVCgmYW1wO3Bvc3NpYmxlX21hc2spOwogCVRFU1RfQVNTRVJUKG5yX3ZjcHVzICZndDsgMCwgJiMzNDtVaCwgbm8gQ1BVcz8mIzM0Oyk7CkBAIC0zODMsOCAmIzQzOzM3Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcmVuZGV6dm91c193aXRoX3ZjcHVzKCZhbXA7dGltZV9ydW4yLCAmIzM0O3J1biAyJiMzNDspOwogCiAJbXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7Ci0JbXByb3RlY3Rfcm9fZG9uZSA9IHRydWU7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG1wcm90ZWN0X3JvX2RvbmUpOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7CiAKIAlyZW5kZXp2b3VzX3dpdGhfdmNwdXMoJmFtcDt0aW1lX3JvLCAmIzM0O21wcm90ZWN0IFJPJiMzNDspOwogCW1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwppbmRleCBmODBhZDZiNDdkMTZiMC4uNTU3ZTM5M2MyMjNiOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMKQEAgLTIyNiw5ICYjNDM7MjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJfQogCX0KIAotCXIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksICZhbXA7cG9zc2libGVfbWFzayk7Ci0JVEVTVF9BU1NFUlQoIXIsICYjMzQ7c2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcykmIzM0OywgZXJybm8sCi0JCSAgICBzdHJlcnJvcihlcnJubykpOwomIzQzOwlrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCAmYW1wO3Bvc3NpYmxlX21hc2spOwogCiAJY2FsY19taW5fbWF4X2NwdSgpOwogCkBAIC0yNDQsNyAmIzQzOzI0Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X2NvZGUpOwogCiAJcHRocmVhZF9jcmVhdGUoJmFtcDttaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLAotCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylzeXNjYWxsKFNZU19nZXR0aWQpKTsKJiM0MzsJCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7CiAKIAlpZiAobGF0ZW5jeSAmZ3Q7PSAwKSB7CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwppbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYwpAQCAtNzAsOCAmIzQzOzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpCiB7CiAJLyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovCi0Jc3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS0mZ3Q7dm0sIHN0X2d2YVtpXSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtJmd0O3ZtLCBzdF9ndmFbaV0sCiYjNDM7CQkJCSh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpKTsKIAogCXZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsICh1bG9uZylzdF9ndmFbaV0gfCBLVk1fTVNSX0VOQUJMRUQpOwogfQpAQCAtMTg3LDggJiM0MzsxODcsNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSkKIAl9OwogCiAJLyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovCi0Jc3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgJiM0MzsgaSAqIFNURUFMX1RJTUVfU0laRSk7Ci0Jc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpKTsKIAogCXN0X2lwYSA9ICh1bG9uZylzdF9ndmFbaV07CiAJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2Rldik7CkBAIC0zMTAsMTAgJiM0MzszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSkKIHsKIAkvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi8KLQlzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKTsKLQlzdF9ncGFbaV0gPSBhZGRyX2d2YTJncGEodmNwdS0mZ3Q7dm0sIChndmFfdClzdF9ndmFbaV0pOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtJmd0O3ZtLCBzdF9ndmFbaV0pOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtJmd0O3ZtLCBzdF9ncGFbaV0pOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LSZndDt2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7CiYjNDM7CVdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtJmd0O3ZtLCBzdF9ncGFbaV0sIGFkZHJfZ3ZhMmdwYSh2Y3B1LSZndDt2bSwgKGd2YV90KXN0X2d2YVtpXSkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2R1bXAoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkeCkKQEAgLTQ0Miw4ICYjNDM7NDM5LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpCiAJfTsKIAogCS8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqLwotCXN0X2d2YVtpXSA9ICh2b2lkICopKFNUX0dQQV9CQVNFICYjNDM7IGkgKiBTVEVBTF9USU1FX1NJWkUpOwotCXN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBzdF9ndmFbaV0pOwomIzQzOwlXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSAmIzQzOyBpICogU1RFQUxfVElNRV9TSVpFKSk7CiAKIAllcnIgPSBfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgJmFtcDthdHRyKTsKIAlURVNUX0FTU0VSVChlcnIgPT0gMCwgJiMzNDtObyBQViBzdGVhbHRpbWUgRmVhdHVyZSYjMzQ7KTsKQEAgLTU0OSw4ICYjNDM7NTQ1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAKIAkJLyogU2Vjb25kIFZDUFUgcnVuLCBleHBlY3QgZ3Vlc3Qgc3RvbGVuIHRpbWUgdG8gYmUgJmx0Oz0gcnVuX2RlbGF5ICovCiAJCXJ1bl92Y3B1KHZjcHVzW2ldKTsKLQkJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pOwotCQlzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldOwomIzQzOwkJc3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTsKIAkJcnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpOwogCQlURVNUX0FTU0VSVChzdG9sZW5fdGltZSAmbHQ7PSBydW5fZGVsYXksCiAJCQkgICAgJiMzNDtFeHBlY3RlZCBzdG9sZW4gdGltZSAmbHQ7PSAlbGQsIGdvdCAlbGQmIzM0OywKQEAgLTU3MCw4ICYjNDM7NTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAKIAkJLyogUnVuIFZDUFUgYWdhaW4gdG8gY29uZmlybSBzdG9sZW4gdGltZSBpcyBjb25zaXN0ZW50IHdpdGggcnVuX2RlbGF5ICovCiAJCXJ1bl92Y3B1KHZjcHVzW2ldKTsKLQkJc3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pOwotCQlzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldIC0gc3RvbGVuX3RpbWU7CiYjNDM7CQlzdG9sZW5fdGltZSA9IFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pIC0gc3RvbGVuX3RpbWU7CiAJCVRFU1RfQVNTRVJUKHN0b2xlbl90aW1lICZndDs9IHJ1bl9kZWxheSwKIAkJCSAgICAmIzM0O0V4cGVjdGVkIHN0b2xlbiB0aW1lICZndDs9ICVsZCwgZ290ICVsZCYjMzQ7LAogCQkJICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMKaW5kZXggYTlkOGU0YzA1OWY5NjkuLmVhYTgyMDFiOTM3ZDMwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMKQEAgLTM0LDcgJiM0MzszNCw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlX2J1ZmZlcnModm9pZCkKIAogc3RhdGljIHZvaWQgX19fX3Rlc3Rfc2V2X2RiZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGksIGludCBqLCBpbnQgbnJfYnl0ZXMpCiB7Ci0JdTggcGF0dGVybiA9IGd1ZXN0X3JhbmRvbV91MzIoJmFtcDtndWVzdF9ybmcpOwomIzQzOwl1OCBwYXR0ZXJuID0ga3ZtX3JhbmRvbV91MzIoJmFtcDtrdm1fcm5nKTsKIAogCWlmIChpICYjNDM7IG5yX2J5dGVzICZndDsgQlVGRkVSX1NJWkUgfHwgaiAmIzQzOyBucl9ieXRlcyAmZ3Q7IEJVRkZFUl9TSVpFKQogCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODE4CgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogODg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IHRlc3QsIGBpcnFfdGVzdC5jYCwgYW5kIG1ha2luZyBhIGZldyBjaGFuZ2VzIHRvIGV4aXN0aW5nIHRlc3QgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSByZW5hbWluZyBvZiBgZ3Vlc3RfcmFuZG9tXypgIHRvIGBrdm1fcmFuZG9tXypgIGFuZCBhIGJpdCBvZiBmaWxlIHJlb3JnYW5pemF0aW9uIHRvby4gIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgYXNrcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCBvciB1bnJlYWNoYWJsZSBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgKmVudGlyZWx5KiBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiAgU2VsZnRlc3RzLCBieSBkZWZpbml0aW9uLCBhcmUgdXNlci1zcGFjZSB0ZXN0cy4gVGhleSYjMzk7cmUgbm90IGtlcm5lbCBjb2RlLiAgSSBuZWVkIHRvIGJlIHZlcnkgc3VyZSBhYm91dCB0aGlzLCBzbyBJ4oCZbSBkb3VibGUtY2hlY2tpbmcgdGhlIGNoYW5nZWQgZmlsZXMuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiwgdmVyaWZ5aW5nIHRoYXQgZXZlcnkgc2luZ2xlIGZpbGUgaXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIExldCYjMzk7cyBzZWU6IGBNYWtlZmlsZS5rdm1gLCBgYXJjaF90aW1lci5jYCwgYGFybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jYCwgYGRlbWFuZF9wYWdpbmdfdGVzdC5jYCwgdGhlIGRpcnR5IGxvZyB0ZXN0cywgYWxsIHRoZSBpbmNsdWRlIGhlYWRlcnMsIGBpcnFfdGVzdC5jYCwgdGhlIGxpYnJhcnkgZmlsZXMgKGBhc3NlcnQuY2AsIGBrdm1fdXRpbC5jYCwgZXRjLiksIHRoZSBtZW1vcnkgc3RyZXNzIHRlc3QsIFJTRVEgdGVzdCwgc3RlYWwgdGltZSwgYW5kIHRoZSBTRVYgZGVidWcgdGVzdCwgYWxsIHdpdGhpbiB0aGUgYGt2bWAgc2VsZnRlc3RzIGRpcmVjdG9yeS4KCll1cCwgaXQmIzM5O3MgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoaXMgY29uZmlybXMgaXQmIzM5O3Mgc3RyaWN0bHkgdGVzdCBjb2RlLCBub3QgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIHRoYXQgd291bGQgaW1wYWN0IHRoZSAqa2VybmVsJiMzOTtzKiBleGVjdXRpb24gZmxvdy4gIFRoZSBwcm9tcHQgZGlyZWN0cyBtZSB0byB1c2UgbXkgY29kZSBzZWFyY2ggdG9vbHMgaWYgdGhpcyB3ZXJlIHRvIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBidXQgc2luY2UgaXQgaXMgc2VsZi10ZXN0cywgdGhlcmUmIzM5O3Mgbm8gbmVlZC4gU2luY2UgSeKAmXZlIGVzdGFibGlzaGVkIHRoYXQgaXQgKm9ubHkqIHRvdWNoZXMgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJvbXB0IHNwZWNpZmllcyBub3QgdG8gZnV6eiBpdCBpZiBpdCB0b3VjaGVzICpvbmx5KiB0ZXN0IGNvZGUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIEnigJlsbCBkb3VibGUtY2hlY2sgdGhlIGRpZmYgb25lIGxhc3QgdGltZSB0byBiZSBleHRyYSBzdXJlLCBidXQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gb3RoZXIgZmlsZXMgaW52b2x2ZWQuCgpNeSBmaW5hbCBkZXRlcm1pbmF0aW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gS1ZNIHNlbGZ0ZXN0cywgd2hpY2ggYXJlIHVzZXItc3BhY2UgdGVzdHMgYW5kIGRvbiYjMzk7dCBtb2RpZnkga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTozOTozNS4zMjM2NTYxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTk5MDEzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDE6Mzk6MzUuMzIzNjYzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODkwMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGZlNjAxMTBkY2VkN2E5NmM3OTNjN2NkM2MwYzRmMjY0OTQ5ZDBmZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDRhY2UxMjYwNmU5MzdiLi44OGM2YzgwNDZkZGVjMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0xMSw2ICsxMSw3IEBAIExJQktWTSArPSBsaWIva3ZtX3V0aWwuY1xcbiBMSUJLVk0gKz0gbGliL2xydV9nZW5fdXRpbC5jXFxuIExJQktWTSArPSBsaWIvbWVtc3RyZXNzLmNcXG4gTElCS1ZNICs9IGxpYi9ndWVzdF9zcHJpbnRmLmNcXG4rTElCS1ZNICs9IGxpYi9wcm9jX3V0aWwuY1xcbiBMSUJLVk0gKz0gbGliL3JidHJlZS5jXFxuIExJQktWTSArPSBsaWIvc3BhcnNlYml0LmNcXG4gTElCS1ZNICs9IGxpYi90ZXN0X3V0aWwuY1xcbkBAIC0xNTcsNiArMTU4LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGNvYWxlc2NlZF9pb190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBkaXJ0eV9sb2dfcGVyZl90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBoYXJkd2FyZV9kaXNhYmxlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGlycV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHJzZXFfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gc3RlYWxfdGltZVxcbkBAIC0yNTksNiArMjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcXG4gIyB3aGljaCBjYXVzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJyaWRlIHRoZSBtYWtlZmlsZSkuXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcXG4raW5jbHVkZSAuLi92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuIFxcbiBJTlNUQUxMX0hEUl9QQVRIID0gJCh0b3Bfc3JjZGlyKS91c3JcXG4gTElOVVhfSERSX1BBVEggPSAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvXFxuQEAgLTMxMyw3ICszMTYsOSBAQCBMSUJLVk1fUyA6PSAkKGZpbHRlciAlLlMsJChMSUJLVk0pKVxcbiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKVxcbiBMSUJLVk1fU19PQkogOj0gJChwYXRzdWJzdCAlLlMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX1MpKVxcbiBMSUJLVk1fU1RSSU5HX09CSiA6PSAkKHBhdHN1YnN0ICUuYywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fU1RSSU5HKSlcXG4tTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pXFxuK0xJQktWTV9PQkpTID0gJChMSUJLVk1fQ19PQkopICQoTElCS1ZNX1NfT0JKKSAkKExJQktWTV9TVFJJTkdfT0JKKVxcbitMSUJLVk1fT0JKUyArPSAkKExJQkNHUk9VUF9PKVxcbitMSUJLVk1fT0JKUyArPSAkKExJQlZGSU9fTylcXG4gU1BMSVRfVEVTVF9HRU5fUFJPR1MgOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJSwgJChTUExJVF9URVNUUykpXFxuIFNQTElUX1RFU1RfR0VOX09CSiA6PSAkKHBhdHN1YnN0ICUsICQoT1VUUFVUKS8kKEFSQ0gpLyUubywgJChTUExJVF9URVNUUykpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDkwYzQ3NWE2MWIyMmI2Li5mOGIwMjU5Nzg5N2JkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FyY2hfdGltZXIuY1xcbkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB1MzIgdGVzdF9nZXRfcGNwdSh2b2lkKVxcbiBcXHRjcHVfc2V0X3Qgb25saW5lX2NwdXNldDtcXG4gXFxuIFxcdG5wcm9jX2NvbmYgPSBnZXRfbnByb2NzX2NvbmYoKTtcXG4tXFx0c2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksIFxcdTAwMjZvbmxpbmVfY3B1c2V0KTtcXG4rXFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcXHUwMDI2b25saW5lX2NwdXNldCk7XFxuIFxcbiBcXHQvKiBSYW5kb21seSBmaW5kIGFuIGF2YWlsYWJsZSBwQ1BVIHRvIHBsYWNlIGEgdkNQVSBvbiAqL1xcbiBcXHRkbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xcbmluZGV4IGY3NjI1ZWI3MTFkNmI4Li5kOWM5Mzc3YTYzMjU2ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcXG5AQCAtMTAzOSw3ICsxMDM5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0aWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKVxcbiBcXHRcXHRleGl0KEtTRlRfU0tJUCk7XFxuIFxcbi1cXHRzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcXHUwMDI2ZGVmYXVsdF9jcHVzZXQpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGRlZmF1bHRfY3B1c2V0KSwgXFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcXG4gXFx0c2V0X2NvdW50ZXJfZGVmYXVsdHMoKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2FyZ3MudGVzdF92aXJ0dWFsKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xcbmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcXG5AQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxcbiBzdGF0aWMgaW50IGhhbmRsZV91ZmZkX3BhZ2VfcmVxdWVzdChpbnQgdWZmZF9tb2RlLCBpbnQgdWZmZCxcXG4gXFx0XFx0c3RydWN0IHVmZmRfbXNnICptc2cpXFxuIHtcXG4tXFx0cGlkX3QgdGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XFxuK1xcdHBpZF90IHRpZCA9IGt2bV9nZXR0aWQoKTtcXG4gXFx0dTY0IGFkZHIgPSBtc2ctXFx1MDAzZWFyZy5wYWdlZmF1bHQuYWRkcmVzcztcXG4gXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWMgdHNfZGlmZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5pbmRleCBlZjc3OWZhOTE4MjdjOS4uN2M1YWJlMWFlOWUwMTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ19wZXJmX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmNcXG5AQCAtMzExLDcgKzMxMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGludCBvcHQ7XFxuIFxcbiBcXHQvKiBPdmVycmlkZSB0aGUgc2VlZCB0byBiZSBkZXRlcm1pbmlzdGljIGJ5IGRlZmF1bHQuICovXFxuLVxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gMTtcXG4rXFx0a3ZtX3JhbmRvbV9zZWVkID0gMTtcXG4gXFxuIFxcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XFxuIFxcdFxcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFxcdFxcdHAucGh5c19vZmZzZXQgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAncic6XFxuLVxcdFxcdFxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gYXRvaV9wb3NpdGl2ZShcXFwiUmFuZG9tIHNlZWRcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFxcXCJSYW5kb20gc2VlZFxcXCIsIG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdzJzpcXG4gXFx0XFx0XFx0cC5iYWNraW5nX3NyYyA9IHBhcnNlX2JhY2tpbmdfc3JjX3R5cGUob3B0YXJnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbmluZGV4IDc0Y2EwOTZiZjk3NmI1Li5lODQxOWQ3ZGExZWFiNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXFxuQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdHdoaWxlICghUkVBRF9PTkNFKHZjcHVfc3RvcCkpIHtcXG4gXFx0XFx0XFx0YWRkciA9IGd1ZXN0X3Rlc3RfdmlydF9tZW07XFxuLVxcdFxcdFxcdGFkZHIgKz0gKGd1ZXN0X3JhbmRvbV91NjQoXFx1MDAyNmd1ZXN0X3JuZykgJSBndWVzdF9udW1fcGFnZXMpXFxuK1xcdFxcdFxcdGFkZHIgKz0gKGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcXG4gXFx0XFx0XFx0XFx0KiBndWVzdF9wYWdlX3NpemU7XFxuIFxcdFxcdFxcdGFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTtcXG4gXFxuQEAgLTcwOCw4ICs3MDgsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXG4gXFx0XFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XFxuIFxcbi1cXHRcXHRXUklURV9PTkNFKG5yX3dyaXRlcywgMCk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBucl93cml0ZXMpO1xcbitcXHRcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbnJfd3JpdGVzLCAwKTtcXG4gXFxuIFxcdFxcdGRpcnR5X3JpbmdfcHJldl9pdGVyYXRpb25fbGFzdF9wYWdlID0gZGlydHlfcmluZ19sYXN0X3BhZ2U7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGlydHlfcmluZ192Y3B1X3JpbmdfZnVsbCwgZmFsc2UpO1xcbkBAIC03NzUsMTYgKzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxcbiBcXHRcXHQgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkXFxuIFxcdFxcdCAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbidzIHZhbHVlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xcbi1cXHRcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcXG4rXFx0XFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgdHJ1ZSk7XFxuIFxcdFxcdHNlbV93YWl0KFxcdTAwMjZzZW1fdmNwdV9zdG9wKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIENsZWFyIHZjcHVfc3RvcCBhZnRlciB0aGUgdkNQVSB0aHJlYWQgaGFzIGFja25vd2xlZGdlIHRoZVxcbiBcXHRcXHQgKiBzdG9wIHJlcXVlc3QgYW5kIGlzIHdhaXRpbmcsIGkuZS4gaXMgZGVmaW5pdGVseSBub3QgcnVubmluZyFcXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdV9zdG9wLCBmYWxzZSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB2Y3B1X3N0b3ApO1xcbitcXHRcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgdmNwdV9zdG9wLCBmYWxzZSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxcbmluZGV4IDZjYjNiZWQyOWI4MWFiLi41ZGFlNjE0M2RkYjA0YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3V0aWwuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUFQX0FSR1MwKG0sLi4uKVxcbkBAIC04MywxMSArODQsMTcgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX2R1cChpbnQgZmQpXFxuIFxcdHJldHVybiBuZXdfZmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgcGlkX3Qga3ZtX2dldHRpZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcXG4rfVxcbitcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobXVubWFwLCAyLCB2b2lkICosIG1lbSwgc2l6ZV90LCBzaXplKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpO1xcbiBfX0tWTV9TWVNDQUxMX0RFRklORShmYWxsb2NhdGUsIDQsIGludCwgZmQsIGludCwgbW9kZSwgbG9mZl90LCBvZmZzZXQsIGxvZmZfdCwgbGVuKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoZnRydW5jYXRlLCAyLCB1bnNpZ25lZCBpbnQsIGZkLCBvZmZfdCwgbGVuZ3RoKTtcXG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xcbitfX0tWTV9TWVNDQUxMX0RFRklORShzY2hlZF9nZXRhZmZpbml0eSwgMywgcGlkX3QsIHBpZCwgc2l6ZV90LCBjcHVzZXRzaXplLCBjcHVfc2V0X3QgKiwgbWFzayk7XFxuIFxcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVxcdFxcdFxcXFxcXG4gZG8ge1xcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5pbmRleCAwNGE5MTAxNjRhMjk2YS4uYjM5ZTcxM2MzMGE0NjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMTA5NCw2ICsxMDk0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBpbl90YXNrX3RvX2NwdShwdGhyZWFkX3QgdGFzaywgaW50IGNwdSlcXG4gXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJGYWlsZWQgdG8gc2V0IHRocmVhZCBhZmZpbml0eSB0byBwQ1BVICcldSdcXFwiLCBjcHUpO1xcbiB9XFxuIFxcbit2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cyk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxcbiB7XFxuIFxcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcXG5AQCAtMTEzOCw2ICsxMTQwLDE2IEBAIHZtX2FkanVzdF9udW1fZ3Vlc3RfcGFnZXMoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHVuc2lnbmVkIGludCBudW1fZ3Vlc3RfcGFnZXMpXFxuIFxcdG1lbWNweShcXHUwMDI2KGcpLCBfcCwgc2l6ZW9mKGcpKTtcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbisjZGVmaW5lIFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRChfdm0sIF92YXJpYWJsZSkgKHtcXHRcXHRcXFxcXFxuK1xcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1xcdFxcdFxcdFxcXFxcXG4rXFx0UkVBRF9PTkNFKF92YXJpYWJsZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBXUklURV9BTkRfU1lOQ19UT19HVUVTVChfdm0sIF92YXJpYWJsZSwgX3ZhbHVlKSBkbyB7XFx0XFxcXFxcbitcXHRXUklURV9PTkNFKF92YXJpYWJsZSwgX3ZhbHVlKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KF92bSwgX3ZhcmlhYmxlKTtcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbiAvKlxcbiAgKiBXcml0ZSBhIGdsb2JhbCB2YWx1ZSwgYnV0IG9ubHkgaW4gdGhlIFZNJ3MgKGd1ZXN0J3MpIGRvbWFpbi4gIFByaW1hcmlseSB1c2VkXFxuICAqIGZvciBcXFwiZ2xvYmFsc1xcXCIgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9wcm9jX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcXG5AQCAtMCwwICsxLDExIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcXG4rI2RlZmluZSBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rXFxuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7XFxuK1xcbit2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSk7XFxuK1xcbisjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxcbkBAIC0xMDgsMzIgKzEwOCwzNSBAQCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfc3ViKHN0cnVjdCB0aW1lc3BlYyB0czEsIHN0cnVjdCB0aW1lc3BlYyB0czIpO1xcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZWxhcHNlZChzdHJ1Y3QgdGltZXNwZWMgc3RhcnQpO1xcbiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfZGl2KHN0cnVjdCB0aW1lc3BlYyB0cywgaW50IGRpdmlzb3IpO1xcbiBcXG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSB7XFxuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHtcXG4gXFx0dTMyIHNlZWQ7XFxuIH07XFxuIFxcbi1leHRlcm4gdTMyIGd1ZXN0X3JhbmRvbV9zZWVkO1xcbi1leHRlcm4gc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XFxuK2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xcbitleHRlcm4gc3RydWN0IGt2bV9yYW5kb21fc3RhdGUga3ZtX3JuZztcXG4gXFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7XFxuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKTtcXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpO1xcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBfX2d1ZXN0X3JhbmRvbV9ib29sKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlLFxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1fcmFuZG9tX2Jvb2woc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdTggcGVyY2VudClcXG4ge1xcbi1cXHRyZXR1cm4gKGd1ZXN0X3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcXHUwMDNjIHBlcmNlbnQ7XFxuK1xcdHJldHVybiAoa3ZtX3JhbmRvbV91MzIoc3RhdGUpICUgMTAwKSBcXHUwMDNjIHBlcmNlbnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yYW5kb21fYm9vbChzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fZ3Vlc3RfcmFuZG9tX2Jvb2woc3RhdGUsIDUwKTtcXG4rXFx0cmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXFxuK3N0YXRpYyBpbmxpbmUgdTY0IGt2bV9yYW5kb21fdTY0KHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcXG4ge1xcbi1cXHRyZXR1cm4gKCh1NjQpZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSk7XFxuK1xcdHJldHVybiAoKHU2NClrdm1fcmFuZG9tX3UzMihzdGF0ZSkgXFx1MDAzY1xcdTAwM2MgMzIpIHwga3ZtX3JhbmRvbV91MzIoc3RhdGUpO1xcbiB9XFxuIFxcbit1NjQga3ZtX3JhbmRvbV91NjRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLCB1NjQgbWluLFxcbitcXHRcXHRcXHQgICAgdTY0IG1heCk7XFxuK1xcbiBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHtcXG4gXFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuIFxcdFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcXG5pbmRleCBjMzNhYjZlMDQxNzE3OS4uNjkwNGRiZGE3OWY5MjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcXG5AQCAtNTUsOSArNTUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgX192bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm1fYXJjaCAqYXJjaClcXG4gZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0Y29uc3QgdHlwZW9mKG1lbSkgdmFsID0gKF9fdmFsKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0aWYgKCFpc19mb3JjZWRfZW11bGF0aW9uX2VuYWJsZWQgfHwgZ3Vlc3RfcmFuZG9tX2Jvb2woXFx1MDAyNmd1ZXN0X3JuZykpIHtcXHRcXHRcXFxcXFxuK1xcdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGt2bV9yYW5kb21fYm9vbChcXHUwMDI2a3ZtX3JuZykpIHtcXHRcXHRcXFxcXFxuIFxcdFxcdChtZW0pID0gdmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0fSBlbHNlIGlmIChndWVzdF9yYW5kb21fYm9vbChcXHUwMDI2Z3Vlc3Rfcm5nKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXFx1MDAyNmt2bV9ybmcpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhLVk1fRkVQIFxcXCJtb3YgJTEsICUwXFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICA6IFxcXCIrbVxcXCIgKG1lbSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdCAgICAgOiBcXFwiclxcXCIgKHZhbCkgOiBcXFwibWVtb3J5XFxcIik7XFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjQwZjZmMGZkYmU0M2VcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2lycV90ZXN0LmNcXG5AQCAtMCwwICsxLDM2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYXBpYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwcm9jX3V0aWwuaFxcXCJcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvZXZlbnRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2luZm8uaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyB1NjQgdGltZW91dF9ucyA9IDJVTEwgKiAxMDAwICogMTAwMCAqIDEwMDA7XFxuK3N0YXRpYyBib29sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW0tWTV9NQVhfVkNQVVNdO1xcbitzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XFxuK3N0YXRpYyBib29sIGd1ZXN0X3JlY2VpdmVkX25taVtLVk1fTUFYX1ZDUFVTXTtcXG4rc3RhdGljIGJvb2wgeDJhcGljID0gdHJ1ZTtcXG4rc3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xcbitzdGF0aWMgYm9vbCBkb25lO1xcbitcXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVxcdFxcXFxcXG4rXFx0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVxcdTAwM2V2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLVxcdTAwM2VpZF0pXFxuKyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSlcXHRcXFxcXFxuK1xcdFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS1cXHUwMDNldm0sIGd1ZXN0X3JlY2VpdmVkX25taVsoX192Y3B1KS1cXHUwMDNlaWRdKVxcbitcXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQoX192Y3B1LCBfX25taSlcXHRcXFxcXFxuK1xcdCgoX19ubWkpID8gR1VFU1RfUkVDRUlWRURfTk1JKF9fdmNwdSkgOiBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KSlcXG4rXFxuK3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZClcXG4re1xcbitcXHRpZiAoeDJhcGljKVxcbitcXHRcXHRyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiB4YXBpY19yZWFkX3JlZyhBUElDX0lEKSBcXHUwMDNlXFx1MDAzZSAyNDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfaXJxX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9pcnFbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xcbitcXG4rXFx0aWYgKHgyYXBpYylcXG4rXFx0XFx0eDJhcGljX3dyaXRlX3JlZyhBUElDX0VPSSwgMCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0eGFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXFxuK3tcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuK3tcXG4rXFx0aWYgKHgyYXBpYylcXG4rXFx0XFx0eDJhcGljX2VuYWJsZSgpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHhhcGljX2VuYWJsZSgpO1xcbitcXG4rXFx0c3RpX25vcCgpO1xcbitcXG4rXFx0V1JJVEVfT05DRShndWVzdF9yZWFkeV9mb3JfaXJxc1tndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XFxuK1xcbitcXHR3aGlsZSAoIVJFQURfT05DRShkb25lKSlcXG4rXFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcbitcXHRHVUVTVF9ET05FKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp2Y3B1X3RocmVhZF9tYWluKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBhcmc7XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZjcHVfcnVuKHZjcHUpO1xcbitcXHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3NldHVwX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0Y29uc3QgaW50IGZsYWdzID0gTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVM7XFxuK1xcdGNvbnN0IGludCBwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICphbGxvY2F0b3I7XFxuK1xcdHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb247XFxuK1xcbitcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgZGV2aWNlK2RyaXZlciBjYW4gYWN0dWFsbHkgc2VuZCBNU0lzLiAqL1xcbitcXHRURVNUX1JFUVVJUkUoZGV2aWNlLVxcdTAwM2Vkcml2ZXIub3BzKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGRldmljZS1cXHUwMDNlZHJpdmVyLm9wcy1cXHUwMDNlc2VuZF9tc2kpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIGEgRE1BLWFibGUgcmVnaW9uIGZvciB0aGUgZHJpdmVyIHRvIHVzZS4gICBWZXJ5IGZldyBkZXZpY2VzXFxuK1xcdCAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nXFxuK1xcdCAqIGFuIE1NSU8gcmVnaXN0ZXIuICBJbnN0ZWFkLCBtb3N0IGRldmljZXMgc2VuZCBNU0lzIHdoZW4gYW4gYWN0aW9uIGlzXFxuK1xcdCAqIGNvbXBsZXRlZCwgYW5kIHByYWN0aWNhbGx5IGFsbCBhY3Rpb25zIGludm9sdmUgRE1BIG9mIHNvbWUgZm9ybS5cXG4rXFx0ICovXFxuK1xcdGFsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoZGV2aWNlLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZWdpb24gPSBcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uO1xcbitcXHRyZWdpb24tXFx1MDAzZXNpemUgPSBTWl8yTTtcXG4rXFx0cmVnaW9uLVxcdTAwM2Vpb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2MoYWxsb2NhdG9yLCByZWdpb24tXFx1MDAzZXNpemUpO1xcbitcXHRyZWdpb24tXFx1MDAzZXZhZGRyID0ga3ZtX21tYXAocmVnaW9uLVxcdTAwM2VzaXplLCBwcm90LCBmbGFncywgLTEpO1xcbitcXHRURVNUX0FTU0VSVChyZWdpb24tXFx1MDAzZXZhZGRyICE9IE1BUF9GQUlMRUQsIFxcXCJtbWFwKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0aW9tbXVfbWFwKGRldmljZS1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuK1xcbitcXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKGFsbG9jYXRvcik7XFxuK1xcbitcXHR2ZmlvX3BjaV9kcml2ZXJfaW5pdChkZXZpY2UpO1xcbitcXG4rXFx0cmV0dXJuIGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9pbnRlcnJ1cHQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpbnQgZXZlbnRmZClcXG4re1xcbitcXHRpZiAoZGV2aWNlKVxcbitcXHRcXHR2ZmlvX3BjaV9kcml2ZXJfc2VuZF9tc2koZGV2aWNlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRldmVudGZkX3dyaXRlKGV2ZW50ZmQsIDEpO1xcbit9XFxuK1xcbitcXG4rc3RhdGljIHZvaWQga3ZtX3JvdXRlX21zaShzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIGdzaSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxcbit7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJ5O1xcbitcXHR9IHJvdXRpbmcgPSB7XFxuK1xcdFxcdC5oZWFkZXIubnIgPSAxLFxcbitcXHRcXHQuZW50cnkgPSB7XFxuK1xcdFxcdFxcdC5nc2kgPSBnc2ksXFxuK1xcdFxcdFxcdC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX01TSSxcXG4rXFx0XFx0XFx0LnUubXNpLmFkZHJlc3NfbG8gPSAweEZFRTAwMDAwIHwgKHZjcHUtXFx1MDAzZWlkIFxcdTAwMjYgR0VOTUFTSyg3LCAwKSkgXFx1MDAzY1xcdTAwM2MgMTIsXFxuK1xcdFxcdFxcdC51Lm1zaS5hZGRyZXNzX2hpID0gdmNwdS1cXHUwMDNlaWQgXFx1MDAyNiBHRU5NQVNLKDMxLCA4KSxcXG4rXFx0XFx0XFx0LnUubXNpLmRhdGEgPSB1c2Vfbm1pID8gTk1JX1ZFQ1RPUiB8ICg0IFxcdTAwM2NcXHUwMDNjIDgpIDogdmVjdG9yLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9TRVRfR1NJX1JPVVRJTkcsIFxcdTAwMjZyb3V0aW5nLmhlYWRlcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXFx1MDAyNnJvdXRpbmcpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVfaW9tbXVfdHlwZSh2b2lkKVxcbit7XFxuK1xcdGludCBpb19mZDtcXG4rXFxuK1xcdGlvX2ZkID0gb3BlbihcXFwiL2Rldi9pb21tdVxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGlvX2ZkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0Y2xvc2UoaW9fZmQpO1xcbitcXHRcXHRyZXR1cm4gTU9ERV9JT01NVUZEO1xcbitcXHR9XFxuK1xcbitcXHRpb19mZCA9IF9fb3Blbl9wYXRoX29yX2V4aXQoXFxcIi9kZXYvdmZpby92ZmlvXFxcIiwgT19SRE9OTFksXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiSXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1xcXCIpO1xcbitcXHRjbG9zZShpb19mZCk7XFxuK1xcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRwcmludGYoXFxcIlVzYWdlOiAlcyBbLWFdIFstZCBcXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXFx1MDAzZV0gWy1lXSBbLWhdIFstaSBucl9pcnFzXSBbLW1dIFstbl0gWy10IGlvbW11X3R5cGVdIFstdiBucl92Y3B1c10gWy14XVxcXFxuXFxcIiwgbmFtZSk7XFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJUZXN0cyBLVk0gaW50ZXJydXB0IHJvdXRpbmcgYW5kIGRlbGl2ZXJ5IHZpYSBpcnFmZC5cXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi1hXFx0QWZmaW5lIHRoZSBkZXZpY2UncyBob3N0IElSUSB0byBhIHJhbmRvbSBwaHlzaWNhbCBDUFVcXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi1kXFx0VXNlIGEgVkZJTyBkZXZpY2UgdG8gc2VuZCBNU0ktWCBpbnRlcnJ1cHRzIGluc3RlYWQgb2YgbWFudWFsbHkgc2lnbmFsaW5nIHRoZSBldmVudGZkXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCItZVxcdFNldCBlbXB0eSBHU0kgcm91dGluZyBpbi1iZXR3ZWVuIHNvbWUgaW50ZXJydXB0c1xcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLWlcXHRUaGUgbnVtYmVyIG9mIElSUXMgdG8gZ2VuZXJhdGUgZHVyaW5nIHRoZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCItbVxcdFBpbiB0YXJnZXQgdkNQVSB0byByYW5kb20gcGh5c2ljYWwgQ1BVIGJlZm9yZSB0cmlnZ2VyaW5nIGludGVycnVwdFxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLW5cXHREZWxpdmVyIDUwIHBlcmNlbnQgb2YgSVJRcyBhcyBub24tbWFza2FibGUgaW50ZXJydXB0c1xcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLXRcXHRPdmVycmlkZSB0aGUgSU9NTVUgdHlwZSB0byB1c2UgKHZmaW9fdHlwZTFfaW9tbXUgb3IgaW9tbXVmZClcXFxcblxcXCIpO1xcbitcXHRwcmludGYoXFxcIi12XFx0TnVtYmVyIG9mIHZDUFVTIHRvIHJ1blxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiLXhcXHRVc2UgeEFQSUMgbW9kZSBpbnN0ZWFkIG9mIHgyQVBJQyBtb2RlIGluIHRoZSBndWVzdFxcXFxuXFxcIik7XFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFwiKTtcXG4rXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXFxuK1xcdCAqXFxuK1xcdCAqIFBpY2sgYW4gSVJRIHZlY3RvciBpbiByYW5nZSBbMzIsIFVJTlQ4X01BWF0uIE1pbiB2YWx1ZSBpcyAzMiBiZWNhdXNlXFxuK1xcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxcbitcXHQgKiBkZWZpbmVkIE5NSXMgYW5kIGludGVycnVwdHMuXFxuK1xcdCAqXFxuK1xcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxcbitcXHQgKiBiZWNhdXNlIEtWTSByZXNlcnZlcyBHU0lzIDAtMTUgZm9yIGxlZ2FjeSBJU0EgSVJRcyBhbmQgMTYtMjMgb25seSBnb1xcbitcXHQgKiB0byB0aGUgSU9BUElDLiBUaGUgbWF4IGlzIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEsIGJlY2F1c2VcXG4rXFx0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cXG4rXFx0ICovXFxuK1xcdHUzMiBnc2kgPSBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMjQsIEtWTV9NQVhfSVJRX1JPVVRFUyAtIDEpO1xcbitcXHR1OCB2ZWN0b3IgPSBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShcXHUwMDI2a3ZtX3JuZywgMzIsIFVJTlQ4X01BWCk7XFxuK1xcbitcXHRwdGhyZWFkX3QgdmNwdV90aHJlYWRzW0tWTV9NQVhfVkNQVVNdO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVzW0tWTV9NQVhfVkNQVVNdO1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UgPSBOVUxMO1xcbitcXHRpbnQgbnJfaXJxcyA9IDEwMDAsIG5yX3ZjcHVzID0gMTtcXG4rXFx0Ym9vbCBzZXRfZW1wdHlfcm91dGluZyA9IGZhbHNlO1xcbitcXHRjb25zdCBjaGFyICpkZXZpY2VfYmRmID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqaW9tbXVfdHlwZSA9IE5VTEw7XFxuK1xcdGludCBpLCBqLCBjLCBtc2l4LCBldmVudGZkO1xcbitcXHRib29sIG1pZ3JhdGVfdmNwdXMgPSBmYWxzZTtcXG4rXFx0Y3B1X3NldF90IGF2YWlsYWJsZV9jcHVzO1xcbitcXHRib29sIHVzZV9ubWkgPSBmYWxzZTtcXG4rXFx0c3RydWN0IGlvbW11ICppb21tdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpcnEsIGlycV9jcHU7XFxuK1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcImFkOmVoaTptbnQ6djp4XFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAoYykge1xcbitcXHRcXHRjYXNlICdhJzpcXG4rXFx0XFx0XFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2QnOlxcbitcXHRcXHRcXHRkZXZpY2VfYmRmID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnZSc6XFxuK1xcdFxcdFxcdHNldF9lbXB0eV9yb3V0aW5nID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2knOlxcbitcXHRcXHRcXHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcXFwiTnVtYmVyIG9mIElSUXNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbSc6XFxuK1xcdFxcdFxcdG1pZ3JhdGVfdmNwdXMgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbic6XFxuK1xcdFxcdFxcdHVzZV9ubWkgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAndCc6XFxuK1xcdFxcdFxcdGlvbW11X3R5cGUgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICd2JzpcXG4rXFx0XFx0XFx0bnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKFxcXCJOdW1iZXIgb2YgdkNQVVNcXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVChucl92Y3B1cyBcXHUwMDNjPSBLVk1fTUFYX1ZDUFVTLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIktWTSBzZWxmdGVzdHMgc3VwcG9ydCBhdCBtb3N0ICV1IHZDUFVzXFxcIiwgS1ZNX01BWF9WQ1BVUyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICd4JzpcXG4rXFx0XFx0XFx0eDJhcGljID0gZmFsc2U7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aGVscChhcmd2WzBdKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcXG4rXFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YMkFQSUNfQVBJLCBLVk1fWDJBUElDX0FQSV9VU0VfMzJCSVRfSURTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgS1ZNX1gyQVBJQ19BUElfRElTQUJMRV9CUk9BRENBU1RfUVVJUkspO1xcbitcXG4rXFx0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgdmVjdG9yLCBndWVzdF9pcnFfaGFuZGxlcik7XFxuK1xcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIE5NSV9WRUNUT1IsIGd1ZXN0X25taV9oYW5kbGVyKTtcXG4rXFxuK1xcdGlmICgheDJhcGljKSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFxcdTAwM2MgMjU2LCBcXFwieEFQSUMgY2FuIG9ubHkgdGFyZ2V0IElEcyBbMC0yNTRdICgyNTUgdkNQVXMpXFxcIik7XFxuK1xcdFxcdHZpcnRfcGdfbWFwKHZtLCBBUElDX0RFRkFVTFRfR1BBLCBBUElDX0RFRkFVTFRfR1BBKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldmljZV9iZGYpIHtcXG4rXFx0XFx0aWYgKCFpb21tdV90eXBlKVxcbitcXHRcXHRcXHRpb21tdV90eXBlID0gcHJvYmVfaW9tbXVfdHlwZSgpO1xcbitcXHRcXHRpb21tdSA9IGlvbW11X2luaXQoaW9tbXVfdHlwZSk7XFxuK1xcdFxcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcXG4rXFx0XFx0bXNpeCA9IHZmaW9fc2V0dXBfbXNpKGRldmljZSk7XFxuK1xcdFxcdGlycSA9IHZmaW9fbXNpeF90b19ob3N0X2lycShkZXZpY2VfYmRmLCBtc2l4KTtcXG4rXFx0XFx0ZXZlbnRmZCA9IGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW21zaXhdO1xcbitcXHRcXHRwcmludGYoXFxcIlVzaW5nIGRldmljZSAlcyBNU0ktWFslZF0gKElSUS0ldSlcXFxcblxcXCIsIGRldmljZV9iZGYsIG1zaXgsXFxuK1xcdFxcdCAgICAgICBpcnEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxcbitcXHRcXHRcXHQgICAgXFxcIlNldHRpbmcgSVJRIGFmZmluaXR5ICgtYSkgcmVxdWlyZXMgYSBiYWNraW5nIGRldmljZSAoLWQpXFxcIik7XFxuK1xcbitcXHRcXHRldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7XFxuK1xcdFxcdGlycSA9IC0xO1xcbitcXHR9XFxuK1xcbitcXHRwcl9pbmZvKFxcXCJJbmplY3RpbmcgaW50ZXJydXB0cyBmb3IgR1NJICVkIChndWVzdCB2ZWN0b3IgMHgleCkgJWQgdGltZXNcXFxcblxcXCIsXFxuK1xcdFxcdGdzaSwgdmVjdG9yLCBucl9pcnFzKTtcXG4rXFxuK1xcdGt2bV9hc3NpZ25faXJxZmQodm0sIGdzaSwgZXZlbnRmZCk7XFxuK1xcbitcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgeDJhcGljKTtcXG4rXFxuK1xcdGlmIChtaWdyYXRlX3ZjcHVzKVxcbitcXHRcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGF2YWlsYWJsZV9jcHVzKSwgXFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl92Y3B1czsgaSsrKVxcbitcXHRcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dmNwdV90aHJlYWRzW2ldLCBOVUxMLCB2Y3B1X3RocmVhZF9tYWluLCB2Y3B1c1tpXSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcXG4rXFxuK1xcdFxcdHdoaWxlICghU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9yZWFkeV9mb3JfaXJxc1t2Y3B1LVxcdTAwM2VpZF0pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0fVxcbitcXG4rXFx0aXJxX2NwdSA9IC0xO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2lycXM7IGkrKykge1xcbitcXHRcXHRjb25zdCBib29sIGRvX3NldF9lbXB0eV9yb3V0aW5nID0gc2V0X2VtcHR5X3JvdXRpbmcgXFx1MDAyNlxcdTAwMjYgKGkgXFx1MDAyNiBCSVQoMykpO1xcbitcXHRcXHRjb25zdCBib29sIGRvX3VzZV9ubWkgPSB1c2Vfbm1pIFxcdTAwMjZcXHUwMDI2IChpIFxcdTAwMjYgQklUKDIpKTtcXG4rXFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbitcXG4rXFx0XFx0aWYgKGRvX3NldF9lbXB0eV9yb3V0aW5nKVxcbitcXHRcXHRcXHRrdm1fc2V0X2VtcHR5X2dzaV9yb3V0aW5nKHZtKTtcXG4rXFxuK1xcdFxcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcXG4rXFxuK1xcdFxcdGlmIChpcnFfYWZmaW5pdHkpIHtcXG4rXFx0XFx0XFx0aXJxX2NwdSA9IGt2bV9yYW5kb21fdTY0KFxcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcXG4rXFx0XFx0XFx0cHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eShpcnEsIGlycV9jcHUpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobWlncmF0ZV92Y3B1cylcXG4rXFx0XFx0XFx0cGluX3Rhc2tfdG9fcmFuZG9tX2NwdSh2Y3B1X3RocmVhZHNbaSAlIG5yX3ZjcHVzXSwgXFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBucl92Y3B1czsgaisrKSB7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9JUlEodmNwdXNbal0pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIklSUSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHZjcHVzW2pdLVxcdTAwM2VpZCk7XFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUKCFHVUVTVF9SRUNFSVZFRF9OTUkodmNwdXNbal0pLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk5NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHZjcHVzW2pdLVxcdTAwM2VpZCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRyaWdnZXJfaW50ZXJydXB0KGRldmljZSwgZXZlbnRmZCk7XFxuK1xcbitcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0d2hpbGUgKCFHVUVTVF9SRUNFSVZFRF9JTlRFUlJVUFQodmNwdSwgZG9fdXNlX25taSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgIHRpbWVzcGVjX3RvX25zKHRpbWVzcGVjX2VsYXBzZWQoc3RhcnQpKSBcXHUwMDNjPSB0aW1lb3V0X25zKVxcbitcXHRcXHRcXHRjcHVfcmVsYXgoKTtcXG4rXFxuK1xcdFxcdFRFU1RfQVNTRVJUKEdVRVNUX1JFQ0VJVkVEX0lOVEVSUlVQVCh2Y3B1LCBkb191c2Vfbm1pKSxcXG4rXFx0XFx0XFx0ICAgIFxcXCJ2Q1BVICVkIHRpbWVkIG91dCB3YWl0aW5nIGZvciAlcyAodmVjdG9yIDB4JXgpIGZyb20gR1NJICVkICh2aWEgQ1BVICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIHZjcHUtXFx1MDAzZWlkLCBkb191c2Vfbm1pID8gXFxcIk5NSVxcXCIgOiBcXFwiSVJRXFxcIixcXG4rXFx0XFx0XFx0ICAgIGRvX3VzZV9ubWkgPyBOTUlfVkVDVE9SIDogdmVjdG9yLCBnc2ksIGlycV9jcHUpO1xcbitcXG4rXFx0XFx0aWYgKGRvX3VzZV9ubWkpXFxuK1xcdFxcdFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9ubWlbdmNwdS1cXHUwMDNlaWRdLCBmYWxzZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGd1ZXN0X3JlY2VpdmVkX2lycVt2Y3B1LVxcdTAwM2VpZF0sIGZhbHNlKTtcXG4rXFx0fVxcbitcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGRvbmUsIHRydWUpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3ZjcHVzOyBpKyspXFxuK1xcdFxcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hc3NlcnQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImt2bV9zeXNjYWxscy5oXFxcIlxcbiBcXG4gI2lmZGVmIF9fR0xJQkNfX1xcbiAjaW5jbHVkZSBcXHUwMDNjZXhlY2luZm8uaFxcdTAwM2VcXG5AQCAtNjQsMTEgKzY1LDYgQEAgc3RhdGljIHZvaWQgdGVzdF9kdW1wX3N0YWNrKHZvaWQpXFxuIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKSB7fVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBwaWRfdCBfZ2V0dGlkKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIHN5c2NhbGwoU1lTX2dldHRpZCk7XFxuLX1cXG4tXFxuIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKVxcbiB0ZXN0X2Fzc2VydChib29sIGV4cCwgY29uc3QgY2hhciAqZXhwX3N0cixcXG4gXFx0Y29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbkBAIC04MSw3ICs3Nyw3IEBAIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgICVzOiV1OiAlc1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICBwaWQ9JWQgdGlkPSVkIGVycm5vPSVkIC0gJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBfZ2V0dGlkKCksXFxuK1xcdFxcdFxcdGZpbGUsIGxpbmUsIGV4cF9zdHIsIGdldHBpZCgpLCBrdm1fZ2V0dGlkKCksXFxuIFxcdFxcdFxcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbiBcXHRcXHR0ZXN0X2R1bXBfc3RhY2soKTtcXG4gXFx0XFx0aWYgKGZtdCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5pbmRleCAxOTVmM2ZkYWUxZTM5Ni4uMzc5NDU3NWQyY2EwY2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE1LDE0ICsxNSwyMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3Jlc291cmNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXFx0MlxcbiBcXG4tdTMyIGd1ZXN0X3JhbmRvbV9zZWVkO1xcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIGd1ZXN0X3JuZztcXG4tc3RhdGljIHUzMiBsYXN0X2d1ZXN0X3NlZWQ7XFxuK3UzMiBrdm1fcmFuZG9tX3NlZWQ7XFxuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIGt2bV9ybmc7XFxuK3N0YXRpYyB1MzIgbGFzdF9rdm1fc2VlZDtcXG4rXFxuK3N0YXRpYyB2b2lkIGt2bV9zZWVkX3JuZyh1MzIgc2VlZClcXG4re1xcbitcXHRrdm1fcmFuZG9tX3NlZWQgPSBsYXN0X2t2bV9zZWVkID0gc2VlZDtcXG4rXFx0cHJfaW5mbyhcXFwiUmFuZG9tIHNlZWQ6IDB4JXhcXFxcblxcXCIsIGt2bV9yYW5kb21fc2VlZCk7XFxuK1xcdGt2bV9ybmcgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQpO1xcbit9XFxuIFxcbiBzdGF0aWMgc2l6ZV90IHZjcHVfbW1hcF9zeih2b2lkKTtcXG4gXFxuQEAgLTUxNSwxMiArNTIzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRzbG90MCA9IG1lbXNsb3QycmVnaW9uKHZtLCAwKTtcXG4gXFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgKyBzbG90MC1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplKTtcXG4gXFxuLVxcdGlmIChndWVzdF9yYW5kb21fc2VlZCAhPSBsYXN0X2d1ZXN0X3NlZWQpIHtcXG4tXFx0XFx0cHJfaW5mbyhcXFwiUmFuZG9tIHNlZWQ6IDB4JXhcXFxcblxcXCIsIGd1ZXN0X3JhbmRvbV9zZWVkKTtcXG4tXFx0XFx0bGFzdF9ndWVzdF9zZWVkID0gZ3Vlc3RfcmFuZG9tX3NlZWQ7XFxuLVxcdH1cXG4tXFx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XFxuLVxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBndWVzdF9ybmcpO1xcbitcXHRpZiAoa3ZtX3JhbmRvbV9zZWVkICE9IGxhc3Rfa3ZtX3NlZWQpXFxuK1xcdFxcdGt2bV9zZWVkX3JuZyhrdm1fcmFuZG9tX3NlZWQpO1xcbitcXG4rXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGt2bV9ybmcpO1xcbiBcXG4gXFx0a3ZtX2FyY2hfdm1fcG9zdF9jcmVhdGUodm0sIG5yX3J1bm5hYmxlX3ZjcHVzKTtcXG4gXFxuQEAgLTY2MiwxOSArNjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpXFxuIFxcdCAgICAgICBcXFwiICAgICAoZGVmYXVsdDogbm8gcGlubmluZylcXFxcblxcXCIsIG5hbWUsIG5hbWUpO1xcbiB9XFxuIFxcbit2b2lkIHBpbl90YXNrX3RvX3JhbmRvbV9jcHUocHRocmVhZF90IHRhc2ssIGNwdV9zZXRfdCAqcG9zc2libGVfY3B1cylcXG4re1xcbitcXHRpbnQgdGFyZ2V0X2lkeDtcXG4rXFx0aW50IG5yX2NwdXM7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpO1xcbitcXHRURVNUX0FTU0VSVChucl9jcHVzIFxcdTAwM2UgMCwgXFxcIk5vIENQVXMgYXZhaWxhYmxlIGluIHBvc3NpYmxlX2NwdXNcXFwiKTtcXG4rXFxuK1xcdHRhcmdldF9pZHggPSBrdm1fcmFuZG9tX3U2NChcXHUwMDI2a3ZtX3JuZykgJSBucl9jcHVzO1xcbitcXG4rXFx0Zm9yIChjcHUgPSAwOyBjcHUgXFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1KyspIHtcXG4rXFx0XFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFxcdTAwMjZcXHUwMDI2IHRhcmdldF9pZHgtLSA9PSAwKSB7XFxuK1xcdFxcdFxcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0VEVTVF9GQUlMKFxcXCJGYWlsZWQgdG8gZmluZCByYW5kb20gQ1BVIGluIHBvc3NpYmxlX2NwdXNcXFwiKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fcGFyc2VfdmNwdV9waW5uaW5nKGNvbnN0IGNoYXIgKnBjcHVzX3N0cmluZywgdTMyIHZjcHVfdG9fcGNwdVtdLFxcbiBcXHRcXHRcXHQgICAgaW50IG5yX3ZjcHVzKVxcbiB7XFxuIFxcdGNwdV9zZXRfdCBhbGxvd2VkX21hc2s7XFxuIFxcdGNoYXIgKmNwdSwgKmNwdV9saXN0O1xcbiBcXHRjaGFyIGRlbGltWzJdID0gXFxcIixcXFwiO1xcbi1cXHRpbnQgaSwgcjtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRjcHVfbGlzdCA9IHN0cmR1cChwY3B1c19zdHJpbmcpO1xcbiBcXHRURVNUX0FTU0VSVChjcHVfbGlzdCwgXFxcInN0cmR1cCgpIGFsbG9jYXRpb24gZmFpbGVkLlxcXCIpO1xcbiBcXG4tXFx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcXHUwMDI2YWxsb3dlZF9tYXNrKTtcXG4tXFx0VEVTVF9BU1NFUlQoIXIsIFxcXCJzY2hlZF9nZXRhZmZpbml0eSgpIGZhaWxlZFxcXCIpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGFsbG93ZWRfbWFzayksIFxcdTAwMjZhbGxvd2VkX21hc2spO1xcbiBcXG4gXFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XFxuIFxcbkBAIC0yMjc5LDggKzIzMDUsOCBAQCB2b2lkIF9fYXR0cmlidXRlKChjb25zdHJ1Y3RvcikpIGt2bV9zZWxmdGVzdF9pbml0KHZvaWQpXFxuIFxcdHNpZ2FjdGlvbihTSUdJTEwsIFxcdTAwMjZzaWdfc2EsIE5VTEwpO1xcbiBcXHRzaWdhY3Rpb24oU0lHRlBFLCBcXHUwMDI2c2lnX3NhLCBOVUxMKTtcXG4gXFxuLVxcdGd1ZXN0X3JhbmRvbV9zZWVkID0gbGFzdF9ndWVzdF9zZWVkID0gcmFuZG9tKCk7XFxuLVxcdHByX2luZm8oXFxcIlJhbmRvbSBzZWVkOiAweCV4XFxcXG5cXFwiLCBndWVzdF9yYW5kb21fc2VlZCk7XFxuK1xcdHNyYW5kb20odGltZSgwKSk7XFxuK1xcdGt2bV9zZWVkX3JuZyhyYW5kb20oKSk7XFxuIFxcbiBcXHRrdm1fc2VsZnRlc3RfYXJjaF9pbml0KCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5pbmRleCA2ZGNkMTU5MTBhMDYwOC4uMzU5OWI3NWQ5N2M5MTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbWVtc3RyZXNzLmNcXG5AQCAtNDgsMTQgKzQ4LDE0IEBAIHZvaWQgbWVtc3RyZXNzX2d1ZXN0X2NvZGUodTMyIHZjcHVfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1zdHJlc3NfYXJncyAqYXJncyA9IFxcdTAwMjZtZW1zdHJlc3NfYXJncztcXG4gXFx0c3RydWN0IG1lbXN0cmVzc192Y3B1X2FyZ3MgKnZjcHVfYXJncyA9IFxcdTAwMjZhcmdzLVxcdTAwM2V2Y3B1X2FyZ3NbdmNwdV9pZHhdO1xcbi1cXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XFxuK1xcdHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XFxuIFxcdGd2YV90IGd2YTtcXG4gXFx0dTY0IHBhZ2VzO1xcbiBcXHR1NjQgYWRkcjtcXG4gXFx0dTY0IHBhZ2U7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0cmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XFxuK1xcdHJhbmRfc3RhdGUgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XFxuIFxcbiBcXHRndmEgPSB2Y3B1X2FyZ3MtXFx1MDAzZWd2YTtcXG4gXFx0cGFnZXMgPSB2Y3B1X2FyZ3MtXFx1MDAzZXBhZ2VzO1xcbkBAIC02OSwxMyArNjksMTMgQEAgdm9pZCBtZW1zdHJlc3NfZ3Vlc3RfY29kZSh1MzIgdmNwdV9pZHgpXFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFnZXM7IGkrKykge1xcbiBcXHRcXHRcXHRpZiAoYXJncy1cXHUwMDNlcmFuZG9tX2FjY2VzcylcXG4tXFx0XFx0XFx0XFx0cGFnZSA9IGd1ZXN0X3JhbmRvbV91MzIoXFx1MDAyNnJhbmRfc3RhdGUpICUgcGFnZXM7XFxuK1xcdFxcdFxcdFxcdHBhZ2UgPSBrdm1fcmFuZG9tX3UzMihcXHUwMDI2cmFuZF9zdGF0ZSkgJSBwYWdlcztcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRwYWdlID0gaTtcXG4gXFxuIFxcdFxcdFxcdGFkZHIgPSBndmEgKyAocGFnZSAqIGFyZ3MtXFx1MDAzZWd1ZXN0X3BhZ2Vfc2l6ZSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoX19ndWVzdF9yYW5kb21fYm9vbChcXHUwMDI2cmFuZF9zdGF0ZSwgYXJncy1cXHUwMDNld3JpdGVfcGVyY2VudCkpXFxuK1xcdFxcdFxcdGlmIChfX2t2bV9yYW5kb21fYm9vbChcXHUwMDI2cmFuZF9zdGF0ZSwgYXJncy1cXHUwMDNld3JpdGVfcGVyY2VudCkpXFxuIFxcdFxcdFxcdFxcdCoodTY0ICopYWRkciA9IDB4MDEyMzQ1Njc4OUFCQ0RFRjtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRSRUFEX09OQ0UoKih1NjQgKilhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zOTYwYjM4NDFkNjM3MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Byb2NfdXRpbC5jXFxuQEAgLTAsMCArMSw1NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY191dGlsLmhcXFwiXFxuK1xcbitzdGF0aWMgRklMRSAqb3Blbl9wcm9jX2ludGVycnVwdHModm9pZClcXG4re1xcbitcXHRGSUxFICpmcDtcXG4rXFxuK1xcdGZwID0gZm9wZW4oXFxcIi9wcm9jL2ludGVycnVwdHNcXFwiLCBcXFwiclxcXCIpO1xcbitcXHRURVNUX0FTU0VSVChmcCwgXFxcImZvcGVuKC9wcm9jL2ludGVycnVwdHMpIGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGZwO1xcbit9XFxuK1xcbit1bnNpZ25lZCBpbnQgdmZpb19tc2l4X3RvX2hvc3RfaXJxKGNvbnN0IGNoYXIgKmRldmljZV9iZGYsIGludCBtc2l4KVxcbit7XFxuK1xcdGNoYXIgc2VhcmNoX3N0cmluZ1s2NF07XFxuK1xcdGNoYXIgbGluZVs0MDk2XTtcXG4rXFx0aW50IGlycSA9IC0xO1xcbitcXHRGSUxFICpmcDtcXG4rXFxuK1xcdGZwID0gb3Blbl9wcm9jX2ludGVycnVwdHMoKTtcXG4rXFxuK1xcdHNucHJpbnRmKHNlYXJjaF9zdHJpbmcsIHNpemVvZihzZWFyY2hfc3RyaW5nKSwgXFxcInZmaW8tbXNpeFslZF1cXFwiLCBtc2l4KTtcXG4rXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkge1xcbitcXHRcXHRpZiAoc3Ryc3RyKGxpbmUsIGRldmljZV9iZGYpIFxcdTAwMjZcXHUwMDI2IHN0cnN0cihsaW5lLCBzZWFyY2hfc3RyaW5nKSkge1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUSgxLCBzc2NhbmYobGluZSwgXFxcIiVkOlxcXCIsIFxcdTAwMjZpcnEpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKGlycSAhPSAtMSwgXFxcIkZhaWxlZCB0byBsb2NhdGUgSVJRIGZvciAlcyAlc1xcXCIsIGRldmljZV9iZGYsXFxuK1xcdFxcdCAgICBzZWFyY2hfc3RyaW5nKTtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBpbnQpaXJxO1xcbit9XFxuK1xcbit2b2lkIHByb2NfaXJxX3NldF9zbXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgciwgZmQ7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9pcnEvJXUvc21wX2FmZmluaXR5X2xpc3RcXFwiLCBpcnEpO1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcXG4rXFx0VEVTVF9BU1NFUlQoZmQgXFx1MDAzZT0gMCwgXFxcIkZhaWxlZCB0byBvcGVuICVzXFxcIiwgcGF0aCk7XFxuK1xcbitcXHRyID0gZHByaW50ZihmZCwgXFxcIiVkXFxcXG5cXFwiLCBjcHUpO1xcbitcXHRURVNUX0FTU0VSVChyIFxcdTAwM2UgMCwgXFxcIkZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcXFwiLCBpcnEsIGNwdSk7XFxuK1xcbitcXHRrdm1fY2xvc2UoZmQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuaW5kZXggYmFiMWJkMmI3NzViNmQuLjZiMDBhYjExZjNjMDI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Rlc3RfdXRpbC5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L2tlcm5lbC5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFxcInRlc3RfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3ZtX3N5c2NhbGxzLmhcXFwiXFxuIFxcbiBzaWdqbXBfYnVmIGV4cGVjdF9zaWdidXNfam1wYnVmO1xcbiBcXG5AQCAtMzAsMTggKzMxLDM2IEBAIHZvaWQgX19hdHRyaWJ1dGVfXygodXNlZCkpIGV4cGVjdF9zaWdidXNfaGFuZGxlcihpbnQgc2lnbnVtKVxcbiAgKiBQYXJrLU1pbGxlciBMQ0cgdXNpbmcgc3RhbmRhcmQgY29uc3RhbnRzLlxcbiAgKi9cXG4gXFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZClcXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpXFxuIHtcXG4tXFx0c3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XFxuK1xcdHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIHMgPSB7LnNlZWQgPSBzZWVkfTtcXG4gXFx0cmV0dXJuIHM7XFxuIH1cXG4gXFxuLXUzMiBndWVzdF9yYW5kb21fdTMyKHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdHN0YXRlLVxcdTAwM2VzZWVkID0gKHU2NClzdGF0ZS1cXHUwMDNlc2VlZCAqIDQ4MjcxICUgKCh1MzIpKDEgXFx1MDAzY1xcdTAwM2MgMzEpIC0gMSk7XFxuIFxcdHJldHVybiBzdGF0ZS1cXHUwMDNlc2VlZDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXFxuK1xcdFxcdFxcdCAgICB1NjQgbWF4KVxcbit7XFxuK1xcdHU2NCB2YWx1ZTtcXG4rXFx0dTY0IHJhbmdlO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQobWluIFxcdTAwM2M9IG1heCwgXFxcIlBFQktBQywgbWluID0gMHglbHgsIG1heCA9IDB4JWx4XFxcIiwgbWluLCBtYXgpO1xcbitcXG4rXFx0dmFsdWUgPSBrdm1fcmFuZG9tX3U2NChzdGF0ZSk7XFxuK1xcbitcXHRyYW5nZSA9IG1heCAtIG1pbjtcXG4rXFx0aWYgKHJhbmdlID09IFVMTE9OR19NQVgpXFxuK1xcdFxcdHJldHVybiB2YWx1ZTtcXG4rXFxuK1xcdHJldHVybiBtaW4gKyAodmFsdWUgJSAocmFuZ2UgKyAxKSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFBhcnNlcyBcXFwiWzAtOV0rW2ttZ3RdP1xcXCIuXFxuICAqL1xcbkBAIC0zNzcsNyArMzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXFxuIFxcdGxvbmcgdmFsWzJdO1xcbiBcXHRGSUxFICpmcDtcXG4gXFxuLVxcdHNwcmludGYocGF0aCwgXFxcIi9wcm9jLyVsZC9zY2hlZHN0YXRcXFwiLCBzeXNjYWxsKFNZU19nZXR0aWQpKTtcXG4rXFx0c3ByaW50ZihwYXRoLCBcXFwiL3Byb2MvJWxkL3NjaGVkc3RhdFxcXCIsIChsb25nKWt2bV9nZXR0aWQoKSk7XFxuIFxcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4gXFx0LyogUmV0dXJuIE1JTl9SVU5fREVMQVlfTlMgdXBvbiBmYWlsdXJlIGp1c3QgdG8gYmUgc2FmZSAqL1xcbiBcXHRpZiAoZnNjYW5mKGZwLCBcXFwiJWxkICVsZCBcXFwiLCBcXHUwMDI2dmFsWzBdLCBcXHUwMDI2dmFsWzFdKSBcXHUwMDNjIDIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcXG5AQCAtMTU1LDEwICsxNTUsOCBAQCBzdGF0aWMgdm9pZCAqdmNwdV93b3JrZXIodm9pZCAqZGF0YSlcXG4gXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBFRkFVTFQgb24gd3JpdGUgdG8gUk8gbWVtb3J5LCBnb3QgciA9ICVkLCBlcnJubyA9ICVkXFxcIiwgciwgZXJybm8pO1xcbiBcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2bnJfcm9fZmF1bHRzKTtcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZucl9yb19mYXVsdHMpID09IG5yX3ZjcHVzKSB7XFxuLVxcdFxcdFdSSVRFX09OQ0UoYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCwgdHJ1ZSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0KTtcXG4tXFx0fVxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm5yX3JvX2ZhdWx0cykgPT0gbnJfdmNwdXMpXFxuK1xcdFxcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBhbGxfdmNwdXNfaGl0X3JvX2ZhdWx0LCB0cnVlKTtcXG4gXFxuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdC8qXFxuQEAgLTI1NywxMSArMjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcXG4gc3RhdGljIHZvaWQgY2FsY19kZWZhdWx0X25yX3ZjcHVzKHZvaWQpXFxuIHtcXG4gXFx0Y3B1X3NldF90IHBvc3NpYmxlX21hc2s7XFxuLVxcdGludCByO1xcbi1cXG4tXFx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXFx1MDAyNnBvc3NpYmxlX21hc2spO1xcbi1cXHRURVNUX0FTU0VSVCghciwgXFxcInNjaGVkX2dldGFmZmluaXR5IGZhaWxlZCwgZXJybm8gPSAlZCAoJXMpXFxcIixcXG4tXFx0XFx0ICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuIFxcbiBcXHRucl92Y3B1cyA9IENQVV9DT1VOVChcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuIFxcdFRFU1RfQVNTRVJUKG5yX3ZjcHVzIFxcdTAwM2UgMCwgXFxcIlVoLCBubyBDUFVzP1xcXCIpO1xcbkBAIC0zODMsOCArMzc3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFxcdTAwMjZ0aW1lX3J1bjIsIFxcXCJydW4gMlxcXCIpO1xcbiBcXG4gXFx0bXByb3RlY3QobWVtLCBzbG90X3NpemUsIFBST1RfUkVBRCk7XFxuLVxcdG1wcm90ZWN0X3JvX2RvbmUgPSB0cnVlO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgbXByb3RlY3Rfcm9fZG9uZSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBtcHJvdGVjdF9yb19kb25lLCB0cnVlKTtcXG4gXFxuIFxcdHJlbmRlenZvdXNfd2l0aF92Y3B1cyhcXHUwMDI2dGltZV9ybywgXFxcIm1wcm90ZWN0IFJPXFxcIik7XFxuIFxcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXFxuaW5kZXggZjgwYWQ2YjQ3ZDE2YjAuLjU1N2UzOTNjMjIzYjk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xcbkBAIC0yMjYsOSArMjI2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyID0gc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcXHUwMDI2cG9zc2libGVfbWFzayk7XFxuLVxcdFRFU1RfQVNTRVJUKCFyLCBcXFwic2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcXFwiLCBlcnJubyxcXG4tXFx0XFx0ICAgIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFxcdTAwMjZwb3NzaWJsZV9tYXNrKTtcXG4gXFxuIFxcdGNhbGNfbWluX21heF9jcHUoKTtcXG4gXFxuQEAgLTI0NCw3ICsyNDIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4gXFxuIFxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZtaWdyYXRpb25fdGhyZWFkLCBOVUxMLCBtaWdyYXRpb25fd29ya2VyLFxcbi1cXHRcXHQgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylzeXNjYWxsKFNZU19nZXR0aWQpKTtcXG4rXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa3ZtX2dldHRpZCgpKTtcXG4gXFxuIFxcdGlmIChsYXRlbmN5IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0LypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5pbmRleCA3NmZjZGQxZmQzY2I0OC4uMmRlODc1NDlmY2MwMzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zdGVhbF90aW1lLmNcXG5AQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxcbiB7XFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QodmNwdS1cXHUwMDNldm0sIHN0X2d2YVtpXSxcXG4rXFx0XFx0XFx0XFx0KHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKSk7XFxuIFxcbiBcXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0tWTV9TVEVBTF9USU1FLCAodWxvbmcpc3RfZ3ZhW2ldIHwgS1ZNX01TUl9FTkFCTEVEKTtcXG4gfVxcbkBAIC0xODcsOCArMTg3LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXFxuIFxcdH07XFxuIFxcbiBcXHQvKiBTVF9HUEFfQkFTRSBpcyBpZGVudGl0eSBtYXBwZWQgKi9cXG4tXFx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKTtcXG4tXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xcbiBcXG4gXFx0c3RfaXBhID0gKHVsb25nKXN0X2d2YVtpXTtcXG4gXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcXHUwMDI2ZGV2KTtcXG5AQCAtMzEwLDEwICszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxcbiB7XFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzdF9ncGFbaV0gPSBhZGRyX2d2YTJncGEodmNwdS1cXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcXG4tXFx0c3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS1cXHUwMDNldm0sIHN0X2dwYVtpXSk7XFxuK1xcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZjcHUtXFx1MDAzZXZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xcbitcXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVxcdTAwM2V2bSwgc3RfZ3BhW2ldLCBhZGRyX2d2YTJncGEodmNwdS1cXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9kdW1wKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZHgpXFxuQEAgLTQ0Miw4ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaSlcXG4gXFx0fTtcXG4gXFxuIFxcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xcbi1cXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xcbi1cXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgc3RfZ3ZhW2ldKTtcXG4rXFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHN0X2d2YVtpXSwgKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKSk7XFxuIFxcbiBcXHRlcnIgPSBfX3ZjcHVfaW9jdGwodmNwdSwgS1ZNX0hBU19ERVZJQ0VfQVRUUiwgXFx1MDAyNmF0dHIpO1xcbiBcXHRURVNUX0FTU0VSVChlcnIgPT0gMCwgXFxcIk5vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXFxcIik7XFxuQEAgLTU0OSw4ICs1NDUsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdilcXG4gXFxuIFxcdFxcdC8qIFNlY29uZCBWQ1BVIHJ1biwgZXhwZWN0IGd1ZXN0IHN0b2xlbiB0aW1lIHRvIGJlIFxcdTAwM2M9IHJ1bl9kZWxheSAqL1xcbiBcXHRcXHRydW5fdmNwdSh2Y3B1c1tpXSk7XFxuLVxcdFxcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcXG4tXFx0XFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXTtcXG4rXFx0XFx0c3RvbGVuX3RpbWUgPSBTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcXG4gXFx0XFx0cnVuX2RlbGF5ID0gZ2V0X3J1bl9kZWxheSgpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChzdG9sZW5fdGltZSBcXHUwMDNjPSBydW5fZGVsYXksXFxuIFxcdFxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgc3RvbGVuIHRpbWUgXFx1MDAzYz0gJWxkLCBnb3QgJWxkXFxcIixcXG5AQCAtNTcwLDggKzU2NSw3IEBAIGludCBtYWluKGludCBhYywgY2hhciAqKmF2KVxcbiBcXG4gXFx0XFx0LyogUnVuIFZDUFUgYWdhaW4gdG8gY29uZmlybSBzdG9sZW4gdGltZSBpcyBjb25zaXN0ZW50IHdpdGggcnVuX2RlbGF5ICovXFxuIFxcdFxcdHJ1bl92Y3B1KHZjcHVzW2ldKTtcXG4tXFx0XFx0c3luY19nbG9iYWxfZnJvbV9ndWVzdCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pO1xcbi1cXHRcXHRzdG9sZW5fdGltZSA9IGd1ZXN0X3N0b2xlbl90aW1lW2ldIC0gc3RvbGVuX3RpbWU7XFxuK1xcdFxcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSkgLSBzdG9sZW5fdGltZTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXFx1MDAzZT0gcnVuX2RlbGF5LFxcbiBcXHRcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHN0b2xlbiB0aW1lIFxcdTAwM2U9ICVsZCwgZ290ICVsZFxcXCIsXFxuIFxcdFxcdFxcdCAgICBydW5fZGVsYXksIHN0b2xlbl90aW1lKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmNcXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfZGJnX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmNcXG5AQCAtMzQsNyArMzQsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZV9idWZmZXJzKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBfX19fdGVzdF9zZXZfZGJnKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgaSwgaW50IGosIGludCBucl9ieXRlcylcXG4ge1xcbi1cXHR1OCBwYXR0ZXJuID0gZ3Vlc3RfcmFuZG9tX3UzMihcXHUwMDI2Z3Vlc3Rfcm5nKTtcXG4rXFx0dTggcGF0dGVybiA9IGt2bV9yYW5kb21fdTMyKFxcdTAwMjZrdm1fcm5nKTtcXG4gXFxuIFxcdGlmIChpICsgbnJfYnl0ZXMgXFx1MDAzZSBCVUZGRVJfU0laRSB8fCBqICsgbnJfYnl0ZXMgXFx1MDAzZSBCVUZGRVJfU0laRSlcXG4gXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMTozOTozNS44NTYyNTU2MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NjYzOTY3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhmZTYwMTEwZGNlZDdhOTZjNzkzYzdjZDNjMGM0ZjI2NDk0OWQwZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyNyAwMTozOTozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA0YWNlMTI2MDZlOTM3Yi4uODhjNmM4MDQ2ZGRlYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTEsNiArMTEsNyBAQCBMSUJLVk0gKz0gbGliL2t2bV91dGlsLmNcbiBMSUJLVk0gKz0gbGliL2xydV9nZW5fdXRpbC5jXG4gTElCS1ZNICs9IGxpYi9tZW1zdHJlc3MuY1xuIExJQktWTSArPSBsaWIvZ3Vlc3Rfc3ByaW50Zi5jXG4rTElCS1ZNICs9IGxpYi9wcm9jX3V0aWwuY1xuIExJQktWTSArPSBsaWIvcmJ0cmVlLmNcbiBMSUJLVk0gKz0gbGliL3NwYXJzZWJpdC5jXG4gTElCS1ZNICs9IGxpYi90ZXN0X3V0aWwuY1xuQEAgLTE1Nyw2ICsxNTgsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0gY29hbGVzY2VkX2lvX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBndWVzdF9tZW1mZF90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IGhhcmR3YXJlX2Rpc2FibGVfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3g4NiArPSBpcnFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSBtbXVfc3RyZXNzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0gcnNlcV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHN0ZWFsX3RpbWVcbkBAIC0yNTksNiArMjYxLDcgQEAgT1ZFUlJJREVfVEFSR0VUUyA9IDFcbiAjIHdoaWNoIGNhdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhlIG1ha2VmaWxlKS5cbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgLi4vY2dyb3VwL2xpYi9saWJjZ3JvdXAubWtcbitpbmNsdWRlIC4uL3ZmaW8vbGliL2xpYnZmaW8ubWtcbiBcbiBJTlNUQUxMX0hEUl9QQVRIID0gJCh0b3Bfc3JjZGlyKS91c3JcbiBMSU5VWF9IRFJfUEFUSCA9ICQoSU5TVEFMTF9IRFJfUEFUSCkvaW5jbHVkZS9cbkBAIC0zMTMsNyArMzE2LDkgQEAgTElCS1ZNX1MgOj0gJChmaWx0ZXIgJS5TLCQoTElCS1ZNKSlcbiBMSUJLVk1fQ19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX0MpKVxuIExJQktWTV9TX09CSiA6PSAkKHBhdHN1YnN0ICUuUywgJChPVVRQVVQpLyUubywgJChMSUJLVk1fUykpXG4gTElCS1ZNX1NUUklOR19PQkogOj0gJChwYXRzdWJzdCAlLmMsICQoT1VUUFVUKS8lLm8sICQoTElCS1ZNX1NUUklORykpXG4tTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopICQoTElCQ0dST1VQX08pXG4rTElCS1ZNX09CSlMgPSAkKExJQktWTV9DX09CSikgJChMSUJLVk1fU19PQkopICQoTElCS1ZNX1NUUklOR19PQkopXG4rTElCS1ZNX09CSlMgKz0gJChMSUJDR1JPVVBfTylcbitMSUJLVk1fT0JKUyArPSAkKExJQlZGSU9fTylcbiBTUExJVF9URVNUX0dFTl9QUk9HUyA6PSAkKHBhdHN1YnN0ICUsICQoT1VUUFVUKS8lLCAkKFNQTElUX1RFU1RTKSlcbiBTUExJVF9URVNUX0dFTl9PQkogOj0gJChwYXRzdWJzdCAlLCAkKE9VVFBVVCkvJChBUkNIKS8lLm8sICQoU1BMSVRfVEVTVFMpKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcmNoX3RpbWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG5pbmRleCA5MGM0NzVhNjFiMjJiNi4uZjhiMDI1OTc4OTdiZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJjaF90aW1lci5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdTMyIHRlc3RfZ2V0X3BjcHUodm9pZClcbiBcdGNwdV9zZXRfdCBvbmxpbmVfY3B1c2V0O1xuIFxuIFx0bnByb2NfY29uZiA9IGdldF9ucHJvY3NfY29uZigpO1xuLVx0c2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXRfdCksIFx1MDAyNm9ubGluZV9jcHVzZXQpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihjcHVfc2V0X3QpLCBcdTAwMjZvbmxpbmVfY3B1c2V0KTtcbiBcbiBcdC8qIFJhbmRvbWx5IGZpbmQgYW4gYXZhaWxhYmxlIHBDUFUgdG8gcGxhY2UgYSB2Q1BVIG9uICovXG4gXHRkbyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jXG5pbmRleCBmNzYyNWViNzExZDZiOC4uZDljOTM3N2E2MzI1NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuY1xuQEAgLTEwMzksNyArMTAzOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpZiAoIXBhcnNlX2FyZ3MoYXJnYywgYXJndikpXG4gXHRcdGV4aXQoS1NGVF9TS0lQKTtcbiBcbi1cdHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihkZWZhdWx0X2NwdXNldCksIFx1MDAyNmRlZmF1bHRfY3B1c2V0KTtcbitcdGt2bV9zY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoZGVmYXVsdF9jcHVzZXQpLCBcdTAwMjZkZWZhdWx0X2NwdXNldCk7XG4gXHRzZXRfY291bnRlcl9kZWZhdWx0cygpO1xuIFxuIFx0aWYgKHRlc3RfYXJncy50ZXN0X3ZpcnR1YWwpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGVtYW5kX3BhZ2luZ190ZXN0LmNcbmluZGV4IDMwMmM0OTIzZDA5MzBmLi5mOGIzZDBiNjg4MzBkNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kZW1hbmRfcGFnaW5nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RlbWFuZF9wYWdpbmdfdGVzdC5jXG5AQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgdm9pZCB2Y3B1X3dvcmtlcihzdHJ1Y3QgbWVtc3RyZXNzX3ZjcHVfYXJncyAqdmNwdV9hcmdzKVxuIHN0YXRpYyBpbnQgaGFuZGxlX3VmZmRfcGFnZV9yZXF1ZXN0KGludCB1ZmZkX21vZGUsIGludCB1ZmZkLFxuIFx0XHRzdHJ1Y3QgdWZmZF9tc2cgKm1zZylcbiB7XG4tXHRwaWRfdCB0aWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbitcdHBpZF90IHRpZCA9IGt2bV9nZXR0aWQoKTtcbiBcdHU2NCBhZGRyID0gbXNnLVx1MDAzZWFyZy5wYWdlZmF1bHQuYWRkcmVzcztcbiBcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiBcdHN0cnVjdCB0aW1lc3BlYyB0c19kaWZmO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5pbmRleCBlZjc3OWZhOTE4MjdjOS4uN2M1YWJlMWFlOWUwMTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3BlcmZfdGVzdC5jXG5AQCAtMzExLDcgKzMxMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRpbnQgb3B0O1xuIFxuIFx0LyogT3ZlcnJpZGUgdGhlIHNlZWQgdG8gYmUgZGV0ZXJtaW5pc3RpYyBieSBkZWZhdWx0LiAqL1xuLVx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSAxO1xuK1x0a3ZtX3JhbmRvbV9zZWVkID0gMTtcbiBcbiBcdGRpcnR5X2xvZ19tYW51YWxfY2FwcyA9XG4gXHRcdGt2bV9jaGVja19jYXAoS1ZNX0NBUF9NQU5VQUxfRElSVFlfTE9HX1BST1RFQ1QyKTtcbkBAIC0zNTcsNyArMzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRwLnBoeXNfb2Zmc2V0ID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncic6XG4tXHRcdFx0Z3Vlc3RfcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwiUmFuZG9tIHNlZWRcIiwgb3B0YXJnKTtcbitcdFx0XHRrdm1fcmFuZG9tX3NlZWQgPSBhdG9pX3Bvc2l0aXZlKFwiUmFuZG9tIHNlZWRcIiwgb3B0YXJnKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncyc6XG4gXHRcdFx0cC5iYWNraW5nX3NyYyA9IHBhcnNlX2JhY2tpbmdfc3JjX3R5cGUob3B0YXJnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9kaXJ0eV9sb2dfdGVzdC5jXG5pbmRleCA3NGNhMDk2YmY5NzZiNS4uZTg0MTlkN2RhMWVhYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZGlydHlfbG9nX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2RpcnR5X2xvZ190ZXN0LmNcbkBAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0d2hpbGUgKCFSRUFEX09OQ0UodmNwdV9zdG9wKSkge1xuIFx0XHRcdGFkZHIgPSBndWVzdF90ZXN0X3ZpcnRfbWVtO1xuLVx0XHRcdGFkZHIgKz0gKGd1ZXN0X3JhbmRvbV91NjQoXHUwMDI2Z3Vlc3Rfcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbitcdFx0XHRhZGRyICs9IChrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGd1ZXN0X251bV9wYWdlcylcbiBcdFx0XHRcdCogZ3Vlc3RfcGFnZV9zaXplO1xuIFx0XHRcdGFkZHIgPSBhbGlnbl9kb3duKGFkZHIsIGhvc3RfcGFnZV9zaXplKTtcbiBcbkBAIC03MDgsOCArNzA4LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3QoZW51bSB2bV9ndWVzdF9tb2RlIG1vZGUsIHZvaWQgKmFyZylcbiBcbiBcdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIGl0ZXJhdGlvbik7XG4gXG4tXHRcdFdSSVRFX09OQ0UobnJfd3JpdGVzLCAwKTtcbi1cdFx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIG5yX3dyaXRlcyk7XG4rXHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBucl93cml0ZXMsIDApO1xuIFxuIFx0XHRkaXJ0eV9yaW5nX3ByZXZfaXRlcmF0aW9uX2xhc3RfcGFnZSA9IGRpcnR5X3JpbmdfbGFzdF9wYWdlO1xuIFx0XHRXUklURV9PTkNFKGRpcnR5X3JpbmdfdmNwdV9yaW5nX2Z1bGwsIGZhbHNlKTtcbkBAIC03NzUsMTYgKzc3NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdChlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdm9pZCAqYXJnKVxuIFx0XHQgKiB3cml0aW5nIG1lbW9yeSBkdXJpbmcgdmVyaWZpY2F0aW9uLCBwYWdlcyB0aGF0IHRoaXMgdGhyZWFkXG4gXHRcdCAqIHNlZXMgYXMgY2xlYW4gbWF5IGJlIHdyaXR0ZW4gd2l0aCB0aGlzIGl0ZXJhdGlvbidzIHZhbHVlLlxuIFx0XHQgKi9cbi1cdFx0V1JJVEVfT05DRSh2Y3B1X3N0b3AsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgdHJ1ZSk7XG4gXHRcdHNlbV93YWl0KFx1MDAyNnNlbV92Y3B1X3N0b3ApO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBDbGVhciB2Y3B1X3N0b3AgYWZ0ZXIgdGhlIHZDUFUgdGhyZWFkIGhhcyBhY2tub3dsZWRnZSB0aGVcbiBcdFx0ICogc3RvcCByZXF1ZXN0IGFuZCBpcyB3YWl0aW5nLCBpLmUuIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmchXG4gXHRcdCAqL1xuLVx0XHRXUklURV9PTkNFKHZjcHVfc3RvcCwgZmFsc2UpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdmNwdV9zdG9wKTtcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIHZjcHVfc3RvcCwgZmFsc2UpO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTeW5jIHRoZSBudW1iZXIgb2Ygd3JpdGVzIHBlcmZvcm1lZCBiZWZvcmUgdmVyaWZpY2F0aW9uLCB0aGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV9zeXNjYWxscy5oXG5pbmRleCA2Y2IzYmVkMjliODFhYi4uNWRhZTYxNDNkZGIwNGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fc3lzY2FsbHMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3N5c2NhbGxzLmhcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1BUF9BUkdTMChtLC4uLilcbkBAIC04MywxMSArODQsMTcgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX2R1cChpbnQgZmQpXG4gXHRyZXR1cm4gbmV3X2ZkO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHBpZF90IGt2bV9nZXR0aWQodm9pZClcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX2dldHRpZCk7XG4rfVxuK1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKG11bm1hcCwgMiwgdm9pZCAqLCBtZW0sIHNpemVfdCwgc2l6ZSk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUoY2xvc2UsIDEsIGludCwgZmQpO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGZhbGxvY2F0ZSwgNCwgaW50LCBmZCwgaW50LCBtb2RlLCBsb2ZmX3QsIG9mZnNldCwgbG9mZl90LCBsZW4pO1xuIF9fS1ZNX1NZU0NBTExfREVGSU5FKGZ0cnVuY2F0ZSwgMiwgdW5zaWduZWQgaW50LCBmZCwgb2ZmX3QsIGxlbmd0aCk7XG4gX19LVk1fU1lTQ0FMTF9ERUZJTkUobWFkdmlzZSwgMywgdm9pZCAqLCBhZGRyLCBzaXplX3QsIGxlbmd0aCwgaW50LCBhZHZpY2UpO1xuK19fS1ZNX1NZU0NBTExfREVGSU5FKHNjaGVkX2dldGFmZmluaXR5LCAzLCBwaWRfdCwgcGlkLCBzaXplX3QsIGNwdXNldHNpemUsIGNwdV9zZXRfdCAqLCBtYXNrKTtcbiBcbiAjZGVmaW5lIGt2bV9mcmVlX2ZkKGZkKVx0XHRcXFxuIGRvIHtcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDA0YTkxMDE2NGEyOTZhLi5iMzllNzEzYzMwYTQ2OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0xMDk0LDYgKzEwOTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGluX3Rhc2tfdG9fY3B1KHB0aHJlYWRfdCB0YXNrLCBpbnQgY3B1KVxuIFx0VEVTVF9BU1NFUlQoIXIsIFwiRmFpbGVkIHRvIHNldCB0aHJlYWQgYWZmaW5pdHkgdG8gcENQVSAnJXUnXCIsIGNwdSk7XG4gfVxuIFxuK3ZvaWQgcGluX3Rhc2tfdG9fcmFuZG9tX2NwdShwdGhyZWFkX3QgdGFzaywgY3B1X3NldF90ICpwb3NzaWJsZV9jcHVzKTtcbitcbiBzdGF0aWMgaW5saW5lIGludCBwaW5fdGFza190b19hbnlfY3B1KHB0aHJlYWRfdCB0YXNrKVxuIHtcbiBcdGludCBjcHUgPSBzY2hlZF9nZXRjcHUoKTtcbkBAIC0xMTM4LDYgKzExNDAsMTYgQEAgdm1fYWRqdXN0X251bV9ndWVzdF9wYWdlcyhlbnVtIHZtX2d1ZXN0X21vZGUgbW9kZSwgdW5zaWduZWQgaW50IG51bV9ndWVzdF9wYWdlcylcbiBcdG1lbWNweShcdTAwMjYoZyksIF9wLCBzaXplb2YoZykpO1x0XHRcdFx0XFxcbiB9KVxuIFxuKyNkZWZpbmUgU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKF92bSwgX3ZhcmlhYmxlKSAoe1x0XHRcXFxuK1x0c3luY19nbG9iYWxfZnJvbV9ndWVzdChfdm0sIF92YXJpYWJsZSk7XHRcdFx0XFxcbitcdFJFQURfT05DRShfdmFyaWFibGUpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBXUklURV9BTkRfU1lOQ19UT19HVUVTVChfdm0sIF92YXJpYWJsZSwgX3ZhbHVlKSBkbyB7XHRcXFxuK1x0V1JJVEVfT05DRShfdmFyaWFibGUsIF92YWx1ZSk7XHRcdFx0XHRcXFxuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3QoX3ZtLCBfdmFyaWFibGUpO1x0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiAvKlxuICAqIFdyaXRlIGEgZ2xvYmFsIHZhbHVlLCBidXQgb25seSBpbiB0aGUgVk0ncyAoZ3Vlc3QncykgZG9tYWluLiAgUHJpbWFyaWx5IHVzZWRcbiAgKiBmb3IgXCJnbG9iYWxzXCIgdGhhdCBob2xkIHBlci1WTSB2YWx1ZXMgKFZNcyBhbHdheXMgZHVwbGljYXRlIGNvZGUgYW5kIGdsb2JhbFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcHJvY191dGlsLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDFkZGM5NjdkMTFkYzVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Byb2NfdXRpbC5oXG5AQCAtMCwwICsxLDExIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKyNpZm5kZWYgU0VMRlRFU1RfS1ZNX1BST0NfVVRJTF9IXG4rI2RlZmluZSBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0hcbitcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuK1xuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqdmZpb19kZXZpY2VfYmRmLCBpbnQgbXNpeCk7XG4rXG4rdm9pZCBwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpO1xuK1xuKyNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fUFJPQ19VVElMX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Rlc3RfdXRpbC5oXG5pbmRleCBhNTYyNzFjMjM3YWU5ZS4uZDY0YzhhMjI4MjA3YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS90ZXN0X3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvdGVzdF91dGlsLmhcbkBAIC0xMDgsMzIgKzEwOCwzNSBAQCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfc3ViKHN0cnVjdCB0aW1lc3BlYyB0czEsIHN0cnVjdCB0aW1lc3BlYyB0czIpO1xuIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY19lbGFwc2VkKHN0cnVjdCB0aW1lc3BlYyBzdGFydCk7XG4gc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX2RpdihzdHJ1Y3QgdGltZXNwZWMgdHMsIGludCBkaXZpc29yKTtcbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHtcbitzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSB7XG4gXHR1MzIgc2VlZDtcbiB9O1xuIFxuLWV4dGVybiB1MzIgZ3Vlc3RfcmFuZG9tX3NlZWQ7XG4tZXh0ZXJuIHN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgZ3Vlc3Rfcm5nO1xuK2V4dGVybiB1MzIga3ZtX3JhbmRvbV9zZWVkO1xuK2V4dGVybiBzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBrdm1fcm5nO1xuIFxuLXN0cnVjdCBndWVzdF9yYW5kb21fc3RhdGUgbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZSh1MzIgc2VlZCk7XG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpO1xuK3N0cnVjdCBrdm1fcmFuZG9tX3N0YXRlIG5ld19rdm1fcmFuZG9tX3N0YXRlKHUzMiBzZWVkKTtcbit1MzIga3ZtX3JhbmRvbV91MzIoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgX19ndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19rdm1fcmFuZG9tX2Jvb2woc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlLFxuIFx0XHRcdFx0ICAgICAgIHU4IHBlcmNlbnQpXG4ge1xuLVx0cmV0dXJuIChndWVzdF9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgXHUwMDNjIHBlcmNlbnQ7XG4rXHRyZXR1cm4gKGt2bV9yYW5kb21fdTMyKHN0YXRlKSAlIDEwMCkgXHUwMDNjIHBlcmNlbnQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9yYW5kb21fYm9vbChzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlICpzdGF0ZSlcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JhbmRvbV9ib29sKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRyZXR1cm4gX19ndWVzdF9yYW5kb21fYm9vbChzdGF0ZSwgNTApO1xuK1x0cmV0dXJuIF9fa3ZtX3JhbmRvbV9ib29sKHN0YXRlLCA1MCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IGd1ZXN0X3JhbmRvbV91NjQoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4rc3RhdGljIGlubGluZSB1NjQga3ZtX3JhbmRvbV91NjQoc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgKnN0YXRlKVxuIHtcbi1cdHJldHVybiAoKHU2NClndWVzdF9yYW5kb21fdTMyKHN0YXRlKSBcdTAwM2NcdTAwM2MgMzIpIHwgZ3Vlc3RfcmFuZG9tX3UzMihzdGF0ZSk7XG4rXHRyZXR1cm4gKCh1NjQpa3ZtX3JhbmRvbV91MzIoc3RhdGUpIFx1MDAzY1x1MDAzYyAzMikgfCBrdm1fcmFuZG9tX3UzMihzdGF0ZSk7XG4gfVxuIFxuK3U2NCBrdm1fcmFuZG9tX3U2NF9pbl9yYW5nZShzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSAqc3RhdGUsIHU2NCBtaW4sXG4rXHRcdFx0ICAgIHU2NCBtYXgpO1xuK1xuIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUge1xuIFx0Vk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4gXHRWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L2t2bV91dGlsX2FyY2guaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbmluZGV4IGMzM2FiNmUwNDE3MTc5Li42OTA0ZGJkYTc5ZjkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9rdm1fdXRpbF9hcmNoLmhcbkBAIC01NSw5ICs1NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3ZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bV9hcmNoICphcmNoKVxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGNvbnN0IHR5cGVvZihtZW0pIHZhbCA9IChfX3ZhbCk7XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGd1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNmd1ZXN0X3JuZykpIHtcdFx0XFxcbitcdGlmICghaXNfZm9yY2VkX2VtdWxhdGlvbl9lbmFibGVkIHx8IGt2bV9yYW5kb21fYm9vbChcdTAwMjZrdm1fcm5nKSkge1x0XHRcXFxuIFx0XHQobWVtKSA9IHZhbDtcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdH0gZWxzZSBpZiAoZ3Vlc3RfcmFuZG9tX2Jvb2woXHUwMDI2Z3Vlc3Rfcm5nKSkge1x0XHRcdFx0XHRcXFxuK1x0fSBlbHNlIGlmIChrdm1fcmFuZG9tX2Jvb2woXHUwMDI2a3ZtX3JuZykpIHtcdFx0XHRcdFx0XFxcbiBcdFx0X19hc21fXyBfX3ZvbGF0aWxlX18oS1ZNX0ZFUCBcIm1vdiAlMSwgJTBcIlx0XHRcdFx0XFxcbiBcdFx0XHRcdCAgICAgOiBcIittXCIgKG1lbSlcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdCAgICAgOiBcInJcIiAodmFsKSA6IFwibWVtb3J5XCIpO1x0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pcnFfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MGY2ZjBmZGJlNDNlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaXJxX3Rlc3QuY1xuQEAgLTAsMCArMSwzNjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJhcGljLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwicHJvY191dGlsLmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzaW5mby5oXHUwMDNlXG4rXG4rc3RhdGljIHU2NCB0aW1lb3V0X25zID0gMlVMTCAqIDEwMDAgKiAxMDAwICogMTAwMDtcbitzdGF0aWMgYm9vbCBndWVzdF9yZWFkeV9mb3JfaXJxc1tLVk1fTUFYX1ZDUFVTXTtcbitzdGF0aWMgYm9vbCBndWVzdF9yZWNlaXZlZF9pcnFbS1ZNX01BWF9WQ1BVU107XG4rc3RhdGljIGJvb2wgZ3Vlc3RfcmVjZWl2ZWRfbm1pW0tWTV9NQVhfVkNQVVNdO1xuK3N0YXRpYyBib29sIHgyYXBpYyA9IHRydWU7XG4rc3RhdGljIGJvb2wgaXJxX2FmZmluaXR5O1xuK3N0YXRpYyBib29sIGRvbmU7XG4rXG4rI2RlZmluZSBHVUVTVF9SRUNFSVZFRF9JUlEoX192Y3B1KVx0XFxcbitcdFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCgoX192Y3B1KS1cdTAwM2V2bSwgZ3Vlc3RfcmVjZWl2ZWRfaXJxWyhfX3ZjcHUpLVx1MDAzZWlkXSlcbisjZGVmaW5lIEdVRVNUX1JFQ0VJVkVEX05NSShfX3ZjcHUpXHRcXFxuK1x0U1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKChfX3ZjcHUpLVx1MDAzZXZtLCBndWVzdF9yZWNlaXZlZF9ubWlbKF9fdmNwdSktXHUwMDNlaWRdKVxuK1xuKyNkZWZpbmUgR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKF9fdmNwdSwgX19ubWkpXHRcXFxuK1x0KChfX25taSkgPyBHVUVTVF9SRUNFSVZFRF9OTUkoX192Y3B1KSA6IEdVRVNUX1JFQ0VJVkVEX0lSUShfX3ZjcHUpKVxuK1xuK3N0YXRpYyB1MzIgZ3Vlc3RfZ2V0X3ZjcHVfaWQodm9pZClcbit7XG4rXHRpZiAoeDJhcGljKVxuK1x0XHRyZXR1cm4geDJhcGljX3JlYWRfcmVnKEFQSUNfSUQpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4geGFwaWNfcmVhZF9yZWcoQVBJQ19JRCkgXHUwMDNlXHUwMDNlIDI0O1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9pcnFfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbit7XG4rXHRXUklURV9PTkNFKGd1ZXN0X3JlY2VpdmVkX2lycVtndWVzdF9nZXRfdmNwdV9pZCgpXSwgdHJ1ZSk7XG4rXG4rXHRpZiAoeDJhcGljKVxuK1x0XHR4MmFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbitcdGVsc2VcbitcdFx0eGFwaWNfd3JpdGVfcmVnKEFQSUNfRU9JLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4re1xuK1x0V1JJVEVfT05DRShndWVzdF9yZWNlaXZlZF9ubWlbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXG4re1xuK1x0aWYgKHgyYXBpYylcbitcdFx0eDJhcGljX2VuYWJsZSgpO1xuK1x0ZWxzZVxuK1x0XHR4YXBpY19lbmFibGUoKTtcbitcbitcdHN0aV9ub3AoKTtcbitcbitcdFdSSVRFX09OQ0UoZ3Vlc3RfcmVhZHlfZm9yX2lycXNbZ3Vlc3RfZ2V0X3ZjcHVfaWQoKV0sIHRydWUpO1xuK1xuK1x0d2hpbGUgKCFSRUFEX09OQ0UoZG9uZSkpXG4rXHRcdGNwdV9yZWxheCgpO1xuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbitzdGF0aWMgdm9pZCAqdmNwdV90aHJlYWRfbWFpbih2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnO1xuK1x0c3RydWN0IHVjYWxsIHVjO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShVQ0FMTF9ET05FLCBnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKTtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fc2V0dXBfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRjb25zdCBpbnQgZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUztcbitcdGNvbnN0IGludCBwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTtcbitcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqYWxsb2NhdG9yO1xuK1x0c3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbjtcbitcbitcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBkZXZpY2UrZHJpdmVyIGNhbiBhY3R1YWxseSBzZW5kIE1TSXMuICovXG4rXHRURVNUX1JFUVVJUkUoZGV2aWNlLVx1MDAzZWRyaXZlci5vcHMpO1xuK1x0VEVTVF9SRVFVSVJFKGRldmljZS1cdTAwM2Vkcml2ZXIub3BzLVx1MDAzZXNlbmRfbXNpKTtcbitcbitcdC8qXG4rXHQgKiBTZXQgdXAgYSBETUEtYWJsZSByZWdpb24gZm9yIHRoZSBkcml2ZXIgdG8gdXNlLiAgIFZlcnkgZmV3IGRldmljZXNcbitcdCAqIHByb3ZpZGUgYSB3YXkgdG8gYXJiaXRyYXJpbHkgc2VuZCBpbnRlcnJ1cHRzIChNU0lzKSwgZS5nLiBieSB3cml0aW5nXG4rXHQgKiBhbiBNTUlPIHJlZ2lzdGVyLiAgSW5zdGVhZCwgbW9zdCBkZXZpY2VzIHNlbmQgTVNJcyB3aGVuIGFuIGFjdGlvbiBpc1xuK1x0ICogY29tcGxldGVkLCBhbmQgcHJhY3RpY2FsbHkgYWxsIGFjdGlvbnMgaW52b2x2ZSBETUEgb2Ygc29tZSBmb3JtLlxuK1x0ICovXG4rXHRhbGxvY2F0b3IgPSBpb3ZhX2FsbG9jYXRvcl9pbml0KGRldmljZS1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZWdpb24gPSBcdTAwMjZkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbjtcbitcdHJlZ2lvbi1cdTAwM2VzaXplID0gU1pfMk07XG4rXHRyZWdpb24tXHUwMDNlaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKGFsbG9jYXRvciwgcmVnaW9uLVx1MDAzZXNpemUpO1xuK1x0cmVnaW9uLVx1MDAzZXZhZGRyID0ga3ZtX21tYXAocmVnaW9uLVx1MDAzZXNpemUsIHByb3QsIGZsYWdzLCAtMSk7XG4rXHRURVNUX0FTU0VSVChyZWdpb24tXHUwMDNldmFkZHIgIT0gTUFQX0ZBSUxFRCwgXCJtbWFwKCkgZmFpbGVkXFxuXCIpO1xuK1x0aW9tbXVfbWFwKGRldmljZS1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbitcbitcdGlvdmFfYWxsb2NhdG9yX2NsZWFudXAoYWxsb2NhdG9yKTtcbitcbitcdHZmaW9fcGNpX2RyaXZlcl9pbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gZGV2aWNlLVx1MDAzZWRyaXZlci5tc2k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRyaWdnZXJfaW50ZXJydXB0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW50IGV2ZW50ZmQpXG4re1xuK1x0aWYgKGRldmljZSlcbitcdFx0dmZpb19wY2lfZHJpdmVyX3NlbmRfbXNpKGRldmljZSk7XG4rXHRlbHNlXG4rXHRcdGV2ZW50ZmRfd3JpdGUoZXZlbnRmZCwgMSk7XG4rfVxuK1xuK1xuK3N0YXRpYyB2b2lkIGt2bV9yb3V0ZV9tc2koc3RydWN0IGt2bV92bSAqdm0sIHUzMiBnc2ksIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgIHU4IHZlY3RvciwgYm9vbCB1c2Vfbm1pKVxuK3tcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgaGVhZGVyO1xuK1x0XHRzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGVudHJ5O1xuK1x0fSByb3V0aW5nID0ge1xuK1x0XHQuaGVhZGVyLm5yID0gMSxcbitcdFx0LmVudHJ5ID0ge1xuK1x0XHRcdC5nc2kgPSBnc2ksXG4rXHRcdFx0LnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfTVNJLFxuK1x0XHRcdC51Lm1zaS5hZGRyZXNzX2xvID0gMHhGRUUwMDAwMCB8ICh2Y3B1LVx1MDAzZWlkIFx1MDAyNiBHRU5NQVNLKDcsIDApKSBcdTAwM2NcdTAwM2MgMTIsXG4rXHRcdFx0LnUubXNpLmFkZHJlc3NfaGkgPSB2Y3B1LVx1MDAzZWlkIFx1MDAyNiBHRU5NQVNLKDMxLCA4KSxcbitcdFx0XHQudS5tc2kuZGF0YSA9IHVzZV9ubWkgPyBOTUlfVkVDVE9SIHwgKDQgXHUwMDNjXHUwMDNjIDgpIDogdmVjdG9yLFxuK1x0XHR9LFxuK1x0fTtcbitcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0dTSV9ST1VUSU5HLCBcdTAwMjZyb3V0aW5nLmhlYWRlcik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9zZXRfZW1wdHlfZ3NpX3JvdXRpbmcoc3RydWN0IGt2bV92bSAqdm0pXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nID0ge307XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9HU0lfUk9VVElORywgXHUwMDI2cm91dGluZyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZV9pb21tdV90eXBlKHZvaWQpXG4re1xuK1x0aW50IGlvX2ZkO1xuK1xuK1x0aW9fZmQgPSBvcGVuKFwiL2Rldi9pb21tdVwiLCBPX1JET05MWSk7XG4rXHRpZiAoaW9fZmQgXHUwMDNlPSAwKSB7XG4rXHRcdGNsb3NlKGlvX2ZkKTtcbitcdFx0cmV0dXJuIE1PREVfSU9NTVVGRDtcbitcdH1cbitcbitcdGlvX2ZkID0gX19vcGVuX3BhdGhfb3JfZXhpdChcIi9kZXYvdmZpby92ZmlvXCIsIE9fUkRPTkxZLFxuK1x0XHRcdFx0ICAgIFwiSXMgVkZJTyAob3IgSU9NTVVGRCkgbG9hZGVkIGFuZCBlbmFibGVkP1wiKTtcbitcdGNsb3NlKGlvX2ZkKTtcbitcdHJldHVybiBNT0RFX1ZGSU9fVFlQRTFfSU9NTVU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRwcmludGYoXCJVc2FnZTogJXMgWy1hXSBbLWQgXHUwMDNjc2VnbWVudDpidXM6ZGV2aWNlLmZ1bmN0aW9uXHUwMDNlXSBbLWVdIFstaF0gWy1pIG5yX2lycXNdIFstbV0gWy1uXSBbLXQgaW9tbXVfdHlwZV0gWy12IG5yX3ZjcHVzXSBbLXhdXFxuXCIsIG5hbWUpO1xuK1x0cHJpbnRmKFwiXFxuXCIpO1xuK1x0cHJpbnRmKFwiVGVzdHMgS1ZNIGludGVycnVwdCByb3V0aW5nIGFuZCBkZWxpdmVyeSB2aWEgaXJxZmQuXFxuXCIpO1xuK1x0cHJpbnRmKFwiLWFcdEFmZmluZSB0aGUgZGV2aWNlJ3MgaG9zdCBJUlEgdG8gYSByYW5kb20gcGh5c2ljYWwgQ1BVXFxuXCIpO1xuK1x0cHJpbnRmKFwiLWRcdFVzZSBhIFZGSU8gZGV2aWNlIHRvIHNlbmQgTVNJLVggaW50ZXJydXB0cyBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNpZ25hbGluZyB0aGUgZXZlbnRmZFxcblwiKTtcbitcdHByaW50ZihcIi1lXHRTZXQgZW1wdHkgR1NJIHJvdXRpbmcgaW4tYmV0d2VlbiBzb21lIGludGVycnVwdHNcXG5cIik7XG4rXHRwcmludGYoXCItaVx0VGhlIG51bWJlciBvZiBJUlFzIHRvIGdlbmVyYXRlIGR1cmluZyB0aGUgdGVzdFxcblwiKTtcbitcdHByaW50ZihcIi1tXHRQaW4gdGFyZ2V0IHZDUFUgdG8gcmFuZG9tIHBoeXNpY2FsIENQVSBiZWZvcmUgdHJpZ2dlcmluZyBpbnRlcnJ1cHRcXG5cIik7XG4rXHRwcmludGYoXCItblx0RGVsaXZlciA1MCBwZXJjZW50IG9mIElSUXMgYXMgbm9uLW1hc2thYmxlIGludGVycnVwdHNcXG5cIik7XG4rXHRwcmludGYoXCItdFx0T3ZlcnJpZGUgdGhlIElPTU1VIHR5cGUgdG8gdXNlICh2ZmlvX3R5cGUxX2lvbW11IG9yIGlvbW11ZmQpXFxuXCIpO1xuK1x0cHJpbnRmKFwiLXZcdE51bWJlciBvZiB2Q1BVUyB0byBydW5cXG5cIik7XG4rXHRwcmludGYoXCIteFx0VXNlIHhBUElDIG1vZGUgaW5zdGVhZCBvZiB4MkFQSUMgbW9kZSBpbiB0aGUgZ3Vlc3RcXG5cIik7XG4rXHRwcmludGYoXCJcXG5cIik7XG4rXHRleGl0KEtTRlRfRkFJTCk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHQvKlxuK1x0ICogUGljayBhIHJhbmRvbSB2ZWN0b3IgYW5kIGEgcmFuZG9tIEdTSSB0byB1c2UgZm9yIGRldmljZSBJUlEuXG4rXHQgKlxuK1x0ICogUGljayBhbiBJUlEgdmVjdG9yIGluIHJhbmdlIFszMiwgVUlOVDhfTUFYXS4gTWluIHZhbHVlIGlzIDMyIGJlY2F1c2VcbitcdCAqIExpbnV4L3g4NiByZXNlcnZlcyB2ZWN0b3JzIDAtMzEgZm9yIGV4Y2VwdGlvbnMgYW5kIGFyY2hpdGVjdHVyZVxuK1x0ICogZGVmaW5lZCBOTUlzIGFuZCBpbnRlcnJ1cHRzLlxuK1x0ICpcbitcdCAqIFBpY2sgYSBHU0kgaW4gcmFuZ2UgWzI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxXS4gVGhlIG1pbiB2YWx1ZSBpcyAyNFxuK1x0ICogYmVjYXVzZSBLVk0gcmVzZXJ2ZXMgR1NJcyAwLTE1IGZvciBsZWdhY3kgSVNBIElSUXMgYW5kIDE2LTIzIG9ubHkgZ29cbitcdCAqIHRvIHRoZSBJT0FQSUMuIFRoZSBtYXggaXMgS1ZNX01BWF9JUlFfUk9VVEVTIC0gMSwgYmVjYXVzZVxuK1x0ICogS1ZNX01BWF9JUlFfUk9VVEVTIGlzIGV4Y2x1c2l2ZS5cbitcdCAqL1xuK1x0dTMyIGdzaSA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDI0LCBLVk1fTUFYX0lSUV9ST1VURVMgLSAxKTtcbitcdHU4IHZlY3RvciA9IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKFx1MDAyNmt2bV9ybmcsIDMyLCBVSU5UOF9NQVgpO1xuK1xuK1x0cHRocmVhZF90IHZjcHVfdGhyZWFkc1tLVk1fTUFYX1ZDUFVTXTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UgPSBOVUxMO1xuK1x0aW50IG5yX2lycXMgPSAxMDAwLCBucl92Y3B1cyA9IDE7XG4rXHRib29sIHNldF9lbXB0eV9yb3V0aW5nID0gZmFsc2U7XG4rXHRjb25zdCBjaGFyICpkZXZpY2VfYmRmID0gTlVMTDtcbitcdGNvbnN0IGNoYXIgKmlvbW11X3R5cGUgPSBOVUxMO1xuK1x0aW50IGksIGosIGMsIG1zaXgsIGV2ZW50ZmQ7XG4rXHRib29sIG1pZ3JhdGVfdmNwdXMgPSBmYWxzZTtcbitcdGNwdV9zZXRfdCBhdmFpbGFibGVfY3B1cztcbitcdGJvb2wgdXNlX25taSA9IGZhbHNlO1xuK1x0c3RydWN0IGlvbW11ICppb21tdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IGlycSwgaXJxX2NwdTtcbitcbitcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcImFkOmVoaTptbnQ6djp4XCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKGMpIHtcbitcdFx0Y2FzZSAnYSc6XG4rXHRcdFx0aXJxX2FmZmluaXR5ID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnZCc6XG4rXHRcdFx0ZGV2aWNlX2JkZiA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnZSc6XG4rXHRcdFx0c2V0X2VtcHR5X3JvdXRpbmcgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdpJzpcbitcdFx0XHRucl9pcnFzID0gYXRvaV9wb3NpdGl2ZShcIk51bWJlciBvZiBJUlFzXCIsIG9wdGFyZyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdG1pZ3JhdGVfdmNwdXMgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICduJzpcbitcdFx0XHR1c2Vfbm1pID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndCc6XG4rXHRcdFx0aW9tbXVfdHlwZSA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndic6XG4rXHRcdFx0bnJfdmNwdXMgPSBhdG9pX3Bvc2l0aXZlKFwiTnVtYmVyIG9mIHZDUFVTXCIsIG9wdGFyZyk7XG4rXHRcdFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNjPSBLVk1fTUFYX1ZDUFVTLFxuK1x0XHRcdFx0ICAgIFwiS1ZNIHNlbGZ0ZXN0cyBzdXBwb3J0IGF0IG1vc3QgJXUgdkNQVXNcIiwgS1ZNX01BWF9WQ1BVUyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ3gnOlxuK1x0XHRcdHgyYXBpYyA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRoZWxwKGFyZ3ZbMF0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRURVNUX1JFUVVJUkUoa3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCgpKTtcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfdmNwdXMobnJfdmNwdXMsIGd1ZXN0X2NvZGUsIHZjcHVzKTtcbitcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDJBUElDX0FQSSwgS1ZNX1gyQVBJQ19BUElfVVNFXzMyQklUX0lEUyB8XG4rXHRcdFx0XHRcdCAgICAgIEtWTV9YMkFQSUNfQVBJX0RJU0FCTEVfQlJPQURDQVNUX1FVSVJLKTtcbitcbitcdHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIodm0sIHZlY3RvciwgZ3Vlc3RfaXJxX2hhbmRsZXIpO1xuK1x0dm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcih2bSwgTk1JX1ZFQ1RPUiwgZ3Vlc3Rfbm1pX2hhbmRsZXIpO1xuK1xuK1x0aWYgKCF4MmFwaWMpIHtcbitcdFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNjIDI1NiwgXCJ4QVBJQyBjYW4gb25seSB0YXJnZXQgSURzIFswLTI1NF0gKDI1NSB2Q1BVcylcIik7XG4rXHRcdHZpcnRfcGdfbWFwKHZtLCBBUElDX0RFRkFVTFRfR1BBLCBBUElDX0RFRkFVTFRfR1BBKTtcbitcdH1cbitcbitcdGlmIChkZXZpY2VfYmRmKSB7XG4rXHRcdGlmICghaW9tbXVfdHlwZSlcbitcdFx0XHRpb21tdV90eXBlID0gcHJvYmVfaW9tbXVfdHlwZSgpO1xuK1x0XHRpb21tdSA9IGlvbW11X2luaXQoaW9tbXVfdHlwZSk7XG4rXHRcdGRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIGlvbW11KTtcbitcdFx0bXNpeCA9IHZmaW9fc2V0dXBfbXNpKGRldmljZSk7XG4rXHRcdGlycSA9IHZmaW9fbXNpeF90b19ob3N0X2lycShkZXZpY2VfYmRmLCBtc2l4KTtcbitcdFx0ZXZlbnRmZCA9IGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbbXNpeF07XG4rXHRcdHByaW50ZihcIlVzaW5nIGRldmljZSAlcyBNU0ktWFslZF0gKElSUS0ldSlcXG5cIiwgZGV2aWNlX2JkZiwgbXNpeCxcbitcdFx0ICAgICAgIGlycSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRURVNUX0FTU0VSVCghaXJxX2FmZmluaXR5LFxuK1x0XHRcdCAgICBcIlNldHRpbmcgSVJRIGFmZmluaXR5ICgtYSkgcmVxdWlyZXMgYSBiYWNraW5nIGRldmljZSAoLWQpXCIpO1xuK1xuK1x0XHRldmVudGZkID0ga3ZtX25ld19ldmVudGZkKCk7XG4rXHRcdGlycSA9IC0xO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIkluamVjdGluZyBpbnRlcnJ1cHRzIGZvciBHU0kgJWQgKGd1ZXN0IHZlY3RvciAweCV4KSAlZCB0aW1lc1xcblwiLFxuK1x0XHRnc2ksIHZlY3RvciwgbnJfaXJxcyk7XG4rXG4rXHRrdm1fYXNzaWduX2lycWZkKHZtLCBnc2ksIGV2ZW50ZmQpO1xuK1xuK1x0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHgyYXBpYyk7XG4rXG4rXHRpZiAobWlncmF0ZV92Y3B1cylcbitcdFx0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhdmFpbGFibGVfY3B1cyksIFx1MDAyNmF2YWlsYWJsZV9jcHVzKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4rXHRcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnZjcHVfdGhyZWFkc1tpXSwgTlVMTCwgdmNwdV90aHJlYWRfbWFpbiwgdmNwdXNbaV0pO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfdmNwdXM7IGkrKykge1xuK1x0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSB2Y3B1c1tpXTtcbitcbitcdFx0d2hpbGUgKCFTWU5DX0ZST01fR1VFU1RfQU5EX1JFQUQodm0sIGd1ZXN0X3JlYWR5X2Zvcl9pcnFzW3ZjcHUtXHUwMDNlaWRdKSlcbitcdFx0XHRjb250aW51ZTtcbitcdH1cbitcbitcdGlycV9jcHUgPSAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2lycXM7IGkrKykge1xuK1x0XHRjb25zdCBib29sIGRvX3NldF9lbXB0eV9yb3V0aW5nID0gc2V0X2VtcHR5X3JvdXRpbmcgXHUwMDI2XHUwMDI2IChpIFx1MDAyNiBCSVQoMykpO1xuK1x0XHRjb25zdCBib29sIGRvX3VzZV9ubWkgPSB1c2Vfbm1pIFx1MDAyNlx1MDAyNiAoaSBcdTAwMjYgQklUKDIpKTtcbitcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdXNbaSAlIG5yX3ZjcHVzXTtcbitcdFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1xuK1x0XHRpZiAoZG9fc2V0X2VtcHR5X3JvdXRpbmcpXG4rXHRcdFx0a3ZtX3NldF9lbXB0eV9nc2lfcm91dGluZyh2bSk7XG4rXG4rXHRcdGt2bV9yb3V0ZV9tc2kodm0sIGdzaSwgdmNwdSwgdmVjdG9yLCBkb191c2Vfbm1pKTtcbitcbitcdFx0aWYgKGlycV9hZmZpbml0eSkge1xuK1x0XHRcdGlycV9jcHUgPSBrdm1fcmFuZG9tX3U2NChcdTAwMjZrdm1fcm5nKSAlIGdldF9ucHJvY3MoKTtcbitcdFx0XHRwcm9jX2lycV9zZXRfc21wX2FmZmluaXR5KGlycSwgaXJxX2NwdSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1pZ3JhdGVfdmNwdXMpXG4rXHRcdFx0cGluX3Rhc2tfdG9fcmFuZG9tX2NwdSh2Y3B1X3RocmVhZHNbaSAlIG5yX3ZjcHVzXSwgXHUwMDI2YXZhaWxhYmxlX2NwdXMpO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBucl92Y3B1czsgaisrKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlQoIUdVRVNUX1JFQ0VJVkVEX0lSUSh2Y3B1c1tqXSksXG4rXHRcdFx0XHQgICAgXCJJUlEgZmxhZyBmb3IgdkNQVSAlZCBub3QgY2xlYXIgcHJpb3IgdG8gdGVzdFwiLFxuK1x0XHRcdFx0ICAgIHZjcHVzW2pdLVx1MDAzZWlkKTtcbitcdFx0XHRURVNUX0FTU0VSVCghR1VFU1RfUkVDRUlWRURfTk1JKHZjcHVzW2pdKSxcbitcdFx0XHRcdCAgICBcIk5NSSBmbGFnIGZvciB2Q1BVICVkIG5vdCBjbGVhciBwcmlvciB0byB0ZXN0XCIsXG4rXHRcdFx0XHQgICAgdmNwdXNbal0tXHUwMDNlaWQpO1xuK1x0XHR9XG4rXG4rXHRcdHRyaWdnZXJfaW50ZXJydXB0KGRldmljZSwgZXZlbnRmZCk7XG4rXG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZzdGFydCk7XG4rXHRcdHdoaWxlICghR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgdGltZXNwZWNfdG9fbnModGltZXNwZWNfZWxhcHNlZChzdGFydCkpIFx1MDAzYz0gdGltZW91dF9ucylcbitcdFx0XHRjcHVfcmVsYXgoKTtcbitcbitcdFx0VEVTVF9BU1NFUlQoR1VFU1RfUkVDRUlWRURfSU5URVJSVVBUKHZjcHUsIGRvX3VzZV9ubWkpLFxuK1x0XHRcdCAgICBcInZDUFUgJWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yICVzICh2ZWN0b3IgMHgleCkgZnJvbSBHU0kgJWQgKHZpYSBDUFUgJWQpXFxuXCIsXG4rXHRcdFx0ICAgIHZjcHUtXHUwMDNlaWQsIGRvX3VzZV9ubWkgPyBcIk5NSVwiIDogXCJJUlFcIixcbitcdFx0XHQgICAgZG9fdXNlX25taSA/IE5NSV9WRUNUT1IgOiB2ZWN0b3IsIGdzaSwgaXJxX2NwdSk7XG4rXG4rXHRcdGlmIChkb191c2Vfbm1pKVxuK1x0XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9ubWlbdmNwdS1cdTAwM2VpZF0sIGZhbHNlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBndWVzdF9yZWNlaXZlZF9pcnFbdmNwdS1cdTAwM2VpZF0sIGZhbHNlKTtcbitcdH1cbitcbitcdFdSSVRFX0FORF9TWU5DX1RPX0dVRVNUKHZtLCBkb25lLCB0cnVlKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3ZjcHVzOyBpKyspXG4rXHRcdHB0aHJlYWRfam9pbih2Y3B1X3RocmVhZHNbaV0sIE5VTEwpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXNzZXJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5pbmRleCA4YmUwZDA5ZWNmMGY5OC4uMWQ3MmRjZGZjZTNiNjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2Fzc2VydC5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbisjaW5jbHVkZSBcImt2bV9zeXNjYWxscy5oXCJcbiBcbiAjaWZkZWYgX19HTElCQ19fXG4gI2luY2x1ZGUgXHUwMDNjZXhlY2luZm8uaFx1MDAzZVxuQEAgLTY0LDExICs2NSw2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKVxuIHN0YXRpYyB2b2lkIHRlc3RfZHVtcF9zdGFjayh2b2lkKSB7fVxuICNlbmRpZlxuIFxuLXN0YXRpYyBwaWRfdCBfZ2V0dGlkKHZvaWQpXG4te1xuLVx0cmV0dXJuIHN5c2NhbGwoU1lTX2dldHRpZCk7XG4tfVxuLVxuIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKVxuIHRlc3RfYXNzZXJ0KGJvb2wgZXhwLCBjb25zdCBjaGFyICpleHBfc3RyLFxuIFx0Y29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuQEAgLTgxLDcgKzc3LDcgQEAgdGVzdF9hc3NlcnQoYm9vbCBleHAsIGNvbnN0IGNoYXIgKmV4cF9zdHIsXG4gXHRcdGZwcmludGYoc3RkZXJyLCBcIj09PT0gVGVzdCBBc3NlcnRpb24gRmFpbHVyZSA9PT09XFxuXCJcbiBcdFx0XHRcIiAgJXM6JXU6ICVzXFxuXCJcbiBcdFx0XHRcIiAgcGlkPSVkIHRpZD0lZCBlcnJubz0lZCAtICVzXFxuXCIsXG4tXHRcdFx0ZmlsZSwgbGluZSwgZXhwX3N0ciwgZ2V0cGlkKCksIF9nZXR0aWQoKSxcbitcdFx0XHRmaWxlLCBsaW5lLCBleHBfc3RyLCBnZXRwaWQoKSwga3ZtX2dldHRpZCgpLFxuIFx0XHRcdGVycm5vLCBzdHJlcnJvcihlcnJubykpO1xuIFx0XHR0ZXN0X2R1bXBfc3RhY2soKTtcbiBcdFx0aWYgKGZtdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuaW5kZXggMTk1ZjNmZGFlMWUzOTYuLjM3OTQ1NzVkMmNhMGNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNSwxNCArMTUsMjIgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvcmVzb3VyY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbiBcbi11MzIgZ3Vlc3RfcmFuZG9tX3NlZWQ7XG4tc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBndWVzdF9ybmc7XG4tc3RhdGljIHUzMiBsYXN0X2d1ZXN0X3NlZWQ7XG4rdTMyIGt2bV9yYW5kb21fc2VlZDtcbitzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBrdm1fcm5nO1xuK3N0YXRpYyB1MzIgbGFzdF9rdm1fc2VlZDtcbitcbitzdGF0aWMgdm9pZCBrdm1fc2VlZF9ybmcodTMyIHNlZWQpXG4re1xuK1x0a3ZtX3JhbmRvbV9zZWVkID0gbGFzdF9rdm1fc2VlZCA9IHNlZWQ7XG4rXHRwcl9pbmZvKFwiUmFuZG9tIHNlZWQ6IDB4JXhcXG5cIiwga3ZtX3JhbmRvbV9zZWVkKTtcbitcdGt2bV9ybmcgPSBuZXdfa3ZtX3JhbmRvbV9zdGF0ZShrdm1fcmFuZG9tX3NlZWQpO1xuK31cbiBcbiBzdGF0aWMgc2l6ZV90IHZjcHVfbW1hcF9zeih2b2lkKTtcbiBcbkBAIC01MTUsMTIgKzUyMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdHNsb3QwID0gbWVtc2xvdDJyZWdpb24odm0sIDApO1xuIFx0dWNhbGxfaW5pdCh2bSwgc2xvdDAtXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciArIHNsb3QwLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSk7XG4gXG4tXHRpZiAoZ3Vlc3RfcmFuZG9tX3NlZWQgIT0gbGFzdF9ndWVzdF9zZWVkKSB7XG4tXHRcdHByX2luZm8oXCJSYW5kb20gc2VlZDogMHgleFxcblwiLCBndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRcdGxhc3RfZ3Vlc3Rfc2VlZCA9IGd1ZXN0X3JhbmRvbV9zZWVkO1xuLVx0fVxuLVx0Z3Vlc3Rfcm5nID0gbmV3X2d1ZXN0X3JhbmRvbV9zdGF0ZShndWVzdF9yYW5kb21fc2VlZCk7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgZ3Vlc3Rfcm5nKTtcbitcdGlmIChrdm1fcmFuZG9tX3NlZWQgIT0gbGFzdF9rdm1fc2VlZClcbitcdFx0a3ZtX3NlZWRfcm5nKGt2bV9yYW5kb21fc2VlZCk7XG4rXG4rXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwga3ZtX3JuZyk7XG4gXG4gXHRrdm1fYXJjaF92bV9wb3N0X2NyZWF0ZSh2bSwgbnJfcnVubmFibGVfdmNwdXMpO1xuIFxuQEAgLTY2MiwxOSArNjY4LDM5IEBAIHZvaWQga3ZtX3ByaW50X3ZjcHVfcGlubmluZ19oZWxwKHZvaWQpXG4gXHQgICAgICAgXCIgICAgIChkZWZhdWx0OiBubyBwaW5uaW5nKVxcblwiLCBuYW1lLCBuYW1lKTtcbiB9XG4gXG4rdm9pZCBwaW5fdGFza190b19yYW5kb21fY3B1KHB0aHJlYWRfdCB0YXNrLCBjcHVfc2V0X3QgKnBvc3NpYmxlX2NwdXMpXG4re1xuK1x0aW50IHRhcmdldF9pZHg7XG4rXHRpbnQgbnJfY3B1cztcbitcdGludCBjcHU7XG4rXG4rXHRucl9jcHVzID0gQ1BVX0NPVU5UKHBvc3NpYmxlX2NwdXMpO1xuK1x0VEVTVF9BU1NFUlQobnJfY3B1cyBcdTAwM2UgMCwgXCJObyBDUFVzIGF2YWlsYWJsZSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK1xuK1x0dGFyZ2V0X2lkeCA9IGt2bV9yYW5kb21fdTY0KFx1MDAyNmt2bV9ybmcpICUgbnJfY3B1cztcbitcbitcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBDUFVfU0VUU0laRTsgY3B1KyspIHtcbitcdFx0aWYgKENQVV9JU1NFVChjcHUsIHBvc3NpYmxlX2NwdXMpIFx1MDAyNlx1MDAyNiB0YXJnZXRfaWR4LS0gPT0gMCkge1xuK1x0XHRcdHBpbl90YXNrX3RvX2NwdSh0YXNrLCBjcHUpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0VEVTVF9GQUlMKFwiRmFpbGVkIHRvIGZpbmQgcmFuZG9tIENQVSBpbiBwb3NzaWJsZV9jcHVzXCIpO1xuK31cbitcbiB2b2lkIGt2bV9wYXJzZV92Y3B1X3Bpbm5pbmcoY29uc3QgY2hhciAqcGNwdXNfc3RyaW5nLCB1MzIgdmNwdV90b19wY3B1W10sXG4gXHRcdFx0ICAgIGludCBucl92Y3B1cylcbiB7XG4gXHRjcHVfc2V0X3QgYWxsb3dlZF9tYXNrO1xuIFx0Y2hhciAqY3B1LCAqY3B1X2xpc3Q7XG4gXHRjaGFyIGRlbGltWzJdID0gXCIsXCI7XG4tXHRpbnQgaSwgcjtcbitcdGludCBpO1xuIFxuIFx0Y3B1X2xpc3QgPSBzdHJkdXAocGNwdXNfc3RyaW5nKTtcbiBcdFRFU1RfQVNTRVJUKGNwdV9saXN0LCBcInN0cmR1cCgpIGFsbG9jYXRpb24gZmFpbGVkLlwiKTtcbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9tYXNrKSwgXHUwMDI2YWxsb3dlZF9tYXNrKTtcbi1cdFRFU1RfQVNTRVJUKCFyLCBcInNjaGVkX2dldGFmZmluaXR5KCkgZmFpbGVkXCIpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX21hc2spLCBcdTAwMjZhbGxvd2VkX21hc2spO1xuIFxuIFx0Y3B1ID0gc3RydG9rKGNwdV9saXN0LCBkZWxpbSk7XG4gXG5AQCAtMjI3OSw4ICsyMzA1LDggQEAgdm9pZCBfX2F0dHJpYnV0ZSgoY29uc3RydWN0b3IpKSBrdm1fc2VsZnRlc3RfaW5pdCh2b2lkKVxuIFx0c2lnYWN0aW9uKFNJR0lMTCwgXHUwMDI2c2lnX3NhLCBOVUxMKTtcbiBcdHNpZ2FjdGlvbihTSUdGUEUsIFx1MDAyNnNpZ19zYSwgTlVMTCk7XG4gXG4tXHRndWVzdF9yYW5kb21fc2VlZCA9IGxhc3RfZ3Vlc3Rfc2VlZCA9IHJhbmRvbSgpO1xuLVx0cHJfaW5mbyhcIlJhbmRvbSBzZWVkOiAweCV4XFxuXCIsIGd1ZXN0X3JhbmRvbV9zZWVkKTtcbitcdHNyYW5kb20odGltZSgwKSk7XG4rXHRrdm1fc2VlZF9ybmcocmFuZG9tKCkpO1xuIFxuIFx0a3ZtX3NlbGZ0ZXN0X2FyY2hfaW5pdCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL21lbXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuaW5kZXggNmRjZDE1OTEwYTA2MDguLjM1OTliNzVkOTdjOTE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9tZW1zdHJlc3MuY1xuQEAgLTQ4LDE0ICs0OCwxNCBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtc3RyZXNzX2FyZ3MgKmFyZ3MgPSBcdTAwMjZtZW1zdHJlc3NfYXJncztcbiBcdHN0cnVjdCBtZW1zdHJlc3NfdmNwdV9hcmdzICp2Y3B1X2FyZ3MgPSBcdTAwMjZhcmdzLVx1MDAzZXZjcHVfYXJnc1t2Y3B1X2lkeF07XG4tXHRzdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIHJhbmRfc3RhdGU7XG4rXHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSByYW5kX3N0YXRlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0dTY0IHBhZ2VzO1xuIFx0dTY0IGFkZHI7XG4gXHR1NjQgcGFnZTtcbiBcdGludCBpO1xuIFxuLVx0cmFuZF9zdGF0ZSA9IG5ld19ndWVzdF9yYW5kb21fc3RhdGUoZ3Vlc3RfcmFuZG9tX3NlZWQgKyB2Y3B1X2lkeCk7XG4rXHRyYW5kX3N0YXRlID0gbmV3X2t2bV9yYW5kb21fc3RhdGUoa3ZtX3JhbmRvbV9zZWVkICsgdmNwdV9pZHgpO1xuIFxuIFx0Z3ZhID0gdmNwdV9hcmdzLVx1MDAzZWd2YTtcbiBcdHBhZ2VzID0gdmNwdV9hcmdzLVx1MDAzZXBhZ2VzO1xuQEAgLTY5LDEzICs2OSwxMyBAQCB2b2lkIG1lbXN0cmVzc19ndWVzdF9jb2RlKHUzMiB2Y3B1X2lkeClcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZXM7IGkrKykge1xuIFx0XHRcdGlmIChhcmdzLVx1MDAzZXJhbmRvbV9hY2Nlc3MpXG4tXHRcdFx0XHRwYWdlID0gZ3Vlc3RfcmFuZG9tX3UzMihcdTAwMjZyYW5kX3N0YXRlKSAlIHBhZ2VzO1xuK1x0XHRcdFx0cGFnZSA9IGt2bV9yYW5kb21fdTMyKFx1MDAyNnJhbmRfc3RhdGUpICUgcGFnZXM7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0cGFnZSA9IGk7XG4gXG4gXHRcdFx0YWRkciA9IGd2YSArIChwYWdlICogYXJncy1cdTAwM2VndWVzdF9wYWdlX3NpemUpO1xuIFxuLVx0XHRcdGlmIChfX2d1ZXN0X3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4rXHRcdFx0aWYgKF9fa3ZtX3JhbmRvbV9ib29sKFx1MDAyNnJhbmRfc3RhdGUsIGFyZ3MtXHUwMDNld3JpdGVfcGVyY2VudCkpXG4gXHRcdFx0XHQqKHU2NCAqKWFkZHIgPSAweDAxMjM0NTY3ODlBQkNERUY7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0UkVBRF9PTkNFKCoodTY0ICopYWRkcik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9wcm9jX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzk2MGIzODQxZDYzNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcHJvY191dGlsLmNcbkBAIC0wLDAgKzEsNTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJwcm9jX3V0aWwuaFwiXG4rXG4rc3RhdGljIEZJTEUgKm9wZW5fcHJvY19pbnRlcnJ1cHRzKHZvaWQpXG4re1xuK1x0RklMRSAqZnA7XG4rXG4rXHRmcCA9IGZvcGVuKFwiL3Byb2MvaW50ZXJydXB0c1wiLCBcInJcIik7XG4rXHRURVNUX0FTU0VSVChmcCwgXCJmb3BlbigvcHJvYy9pbnRlcnJ1cHRzKSBmYWlsZWRcIik7XG4rXG4rXHRyZXR1cm4gZnA7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCB2ZmlvX21zaXhfdG9faG9zdF9pcnEoY29uc3QgY2hhciAqZGV2aWNlX2JkZiwgaW50IG1zaXgpXG4re1xuK1x0Y2hhciBzZWFyY2hfc3RyaW5nWzY0XTtcbitcdGNoYXIgbGluZVs0MDk2XTtcbitcdGludCBpcnEgPSAtMTtcbitcdEZJTEUgKmZwO1xuK1xuK1x0ZnAgPSBvcGVuX3Byb2NfaW50ZXJydXB0cygpO1xuK1xuK1x0c25wcmludGYoc2VhcmNoX3N0cmluZywgc2l6ZW9mKHNlYXJjaF9zdHJpbmcpLCBcInZmaW8tbXNpeFslZF1cIiwgbXNpeCk7XG4rXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpIHtcbitcdFx0aWYgKHN0cnN0cihsaW5lLCBkZXZpY2VfYmRmKSBcdTAwMjZcdTAwMjYgc3Ryc3RyKGxpbmUsIHNlYXJjaF9zdHJpbmcpKSB7XG4rXHRcdFx0VEVTVF9BU1NFUlRfRVEoMSwgc3NjYW5mKGxpbmUsIFwiJWQ6XCIsIFx1MDAyNmlycSkpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRmY2xvc2UoZnApO1xuK1xuK1x0VEVTVF9BU1NFUlQoaXJxICE9IC0xLCBcIkZhaWxlZCB0byBsb2NhdGUgSVJRIGZvciAlcyAlc1wiLCBkZXZpY2VfYmRmLFxuK1x0XHQgICAgc2VhcmNoX3N0cmluZyk7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGludClpcnE7XG4rfVxuK1xuK3ZvaWQgcHJvY19pcnFfc2V0X3NtcF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgciwgZmQ7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvaXJxLyV1L3NtcF9hZmZpbml0eV9saXN0XCIsIGlycSk7XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTtcbitcdFRFU1RfQVNTRVJUKGZkIFx1MDAzZT0gMCwgXCJGYWlsZWQgdG8gb3BlbiAlc1wiLCBwYXRoKTtcbitcbitcdHIgPSBkcHJpbnRmKGZkLCBcIiVkXFxuXCIsIGNwdSk7XG4rXHRURVNUX0FTU0VSVChyIFx1MDAzZSAwLCBcIkZhaWxlZCB0byBhZmZpbml0aXplIElSUS0ldSB0byBDUFUgJWRcIiwgaXJxLCBjcHUpO1xuK1xuK1x0a3ZtX2Nsb3NlKGZkKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi90ZXN0X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbmluZGV4IGJhYjFiZDJiNzc1YjZkLi42YjAwYWIxMWYzYzAyNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvdGVzdF91dGlsLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXCJsaW51eC9rZXJuZWwuaFwiXG4gXG4gI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrdm1fc3lzY2FsbHMuaFwiXG4gXG4gc2lnam1wX2J1ZiBleHBlY3Rfc2lnYnVzX2ptcGJ1ZjtcbiBcbkBAIC0zMCwxOCArMzEsMzYgQEAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgZXhwZWN0X3NpZ2J1c19oYW5kbGVyKGludCBzaWdudW0pXG4gICogUGFyay1NaWxsZXIgTENHIHVzaW5nIHN0YW5kYXJkIGNvbnN0YW50cy5cbiAgKi9cbiBcbi1zdHJ1Y3QgZ3Vlc3RfcmFuZG9tX3N0YXRlIG5ld19ndWVzdF9yYW5kb21fc3RhdGUodTMyIHNlZWQpXG4rc3RydWN0IGt2bV9yYW5kb21fc3RhdGUgbmV3X2t2bV9yYW5kb21fc3RhdGUodTMyIHNlZWQpXG4ge1xuLVx0c3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4rXHRzdHJ1Y3Qga3ZtX3JhbmRvbV9zdGF0ZSBzID0gey5zZWVkID0gc2VlZH07XG4gXHRyZXR1cm4gcztcbiB9XG4gXG4tdTMyIGd1ZXN0X3JhbmRvbV91MzIoc3RydWN0IGd1ZXN0X3JhbmRvbV9zdGF0ZSAqc3RhdGUpXG4rdTMyIGt2bV9yYW5kb21fdTMyKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdGF0ZS1cdTAwM2VzZWVkID0gKHU2NClzdGF0ZS1cdTAwM2VzZWVkICogNDgyNzEgJSAoKHUzMikoMSBcdTAwM2NcdTAwM2MgMzEpIC0gMSk7XG4gXHRyZXR1cm4gc3RhdGUtXHUwMDNlc2VlZDtcbiB9XG4gXG4rLyogUmV0dXJucyBhIHJhbmRvbSB1NjQgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBbbWluLCBtYXhdICovXG4rdTY0IGt2bV9yYW5kb21fdTY0X2luX3JhbmdlKHN0cnVjdCBrdm1fcmFuZG9tX3N0YXRlICpzdGF0ZSwgdTY0IG1pbixcbitcdFx0XHQgICAgdTY0IG1heClcbit7XG4rXHR1NjQgdmFsdWU7XG4rXHR1NjQgcmFuZ2U7XG4rXG4rXHRURVNUX0FTU0VSVChtaW4gXHUwMDNjPSBtYXgsIFwiUEVCS0FDLCBtaW4gPSAweCVseCwgbWF4ID0gMHglbHhcIiwgbWluLCBtYXgpO1xuK1xuK1x0dmFsdWUgPSBrdm1fcmFuZG9tX3U2NChzdGF0ZSk7XG4rXG4rXHRyYW5nZSA9IG1heCAtIG1pbjtcbitcdGlmIChyYW5nZSA9PSBVTExPTkdfTUFYKVxuK1x0XHRyZXR1cm4gdmFsdWU7XG4rXG4rXHRyZXR1cm4gbWluICsgKHZhbHVlICUgKHJhbmdlICsgMSkpO1xuK31cbitcbiAvKlxuICAqIFBhcnNlcyBcIlswLTldK1trbWd0XT9cIi5cbiAgKi9cbkBAIC0zNzcsNyArMzk2LDcgQEAgbG9uZyBnZXRfcnVuX2RlbGF5KHZvaWQpXG4gXHRsb25nIHZhbFsyXTtcbiBcdEZJTEUgKmZwO1xuIFxuLVx0c3ByaW50ZihwYXRoLCBcIi9wcm9jLyVsZC9zY2hlZHN0YXRcIiwgc3lzY2FsbChTWVNfZ2V0dGlkKSk7XG4rXHRzcHJpbnRmKHBhdGgsIFwiL3Byb2MvJWxkL3NjaGVkc3RhdFwiLCAobG9uZylrdm1fZ2V0dGlkKCkpO1xuIFx0ZnAgPSBmb3BlbihwYXRoLCBcInJcIik7XG4gXHQvKiBSZXR1cm4gTUlOX1JVTl9ERUxBWV9OUyB1cG9uIGZhaWx1cmUganVzdCB0byBiZSBzYWZlICovXG4gXHRpZiAoZnNjYW5mKGZwLCBcIiVsZCAlbGQgXCIsIFx1MDAyNnZhbFswXSwgXHUwMDI2dmFsWzFdKSBcdTAwM2MgMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbW11X3N0cmVzc190ZXN0LmNcbmluZGV4IDU0ZDI4MTQxOWQzMTA0Li4zZDVmMzNhNjNiMmI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tbXVfc3RyZXNzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21tdV9zdHJlc3NfdGVzdC5jXG5AQCAtMTU1LDEwICsxNTUsOCBAQCBzdGF0aWMgdm9pZCAqdmNwdV93b3JrZXIodm9pZCAqZGF0YSlcbiBcdFx0ICAgIFwiRXhwZWN0ZWQgRUZBVUxUIG9uIHdyaXRlIHRvIFJPIG1lbW9yeSwgZ290IHIgPSAlZCwgZXJybm8gPSAlZFwiLCByLCBlcnJubyk7XG4gXG4gXHRhdG9taWNfaW5jKFx1MDAyNm5yX3JvX2ZhdWx0cyk7XG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cykge1xuLVx0XHRXUklURV9PTkNFKGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuLVx0XHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgYWxsX3ZjcHVzX2hpdF9yb19mYXVsdCk7XG4tXHR9XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bnJfcm9fZmF1bHRzKSA9PSBucl92Y3B1cylcbitcdFx0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1Qodm0sIGFsbF92Y3B1c19oaXRfcm9fZmF1bHQsIHRydWUpO1xuIFxuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHQvKlxuQEAgLTI1NywxMSArMjU1LDcgQEAgc3RhdGljIHZvaWQgcmVuZGV6dm91c193aXRoX3ZjcHVzKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgY29uc3QgY2hhciAqbmFtZSlcbiBzdGF0aWMgdm9pZCBjYWxjX2RlZmF1bHRfbnJfdmNwdXModm9pZClcbiB7XG4gXHRjcHVfc2V0X3QgcG9zc2libGVfbWFzaztcbi1cdGludCByO1xuLVxuLVx0ciA9IHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4tXHRURVNUX0FTU0VSVCghciwgXCJzY2hlZF9nZXRhZmZpbml0eSBmYWlsZWQsIGVycm5vID0gJWQgKCVzKVwiLFxuLVx0XHQgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7XG4rXHRrdm1fc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHBvc3NpYmxlX21hc2spLCBcdTAwMjZwb3NzaWJsZV9tYXNrKTtcbiBcbiBcdG5yX3ZjcHVzID0gQ1BVX0NPVU5UKFx1MDAyNnBvc3NpYmxlX21hc2spO1xuIFx0VEVTVF9BU1NFUlQobnJfdmNwdXMgXHUwMDNlIDAsIFwiVWgsIG5vIENQVXM/XCIpO1xuQEAgLTM4Myw4ICszNzcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0cmVuZGV6dm91c193aXRoX3ZjcHVzKFx1MDAyNnRpbWVfcnVuMiwgXCJydW4gMlwiKTtcbiBcbiBcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQpO1xuLVx0bXByb3RlY3Rfcm9fZG9uZSA9IHRydWU7XG4tXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgbXByb3RlY3Rfcm9fZG9uZSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgbXByb3RlY3Rfcm9fZG9uZSwgdHJ1ZSk7XG4gXG4gXHRyZW5kZXp2b3VzX3dpdGhfdmNwdXMoXHUwMDI2dGltZV9ybywgXCJtcHJvdGVjdCBST1wiKTtcbiBcdG1wcm90ZWN0KG1lbSwgc2xvdF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcnNlcV90ZXN0LmNcbmluZGV4IGY4MGFkNmI0N2QxNmIwLi41NTdlMzkzYzIyM2I5OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9yc2VxX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3JzZXFfdGVzdC5jXG5AQCAtMjI2LDkgKzIyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHIgPSBzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YocG9zc2libGVfbWFzayksIFx1MDAyNnBvc3NpYmxlX21hc2spO1xuLVx0VEVTVF9BU1NFUlQoIXIsIFwic2NoZWRfZ2V0YWZmaW5pdHkgZmFpbGVkLCBlcnJubyA9ICVkICglcylcIiwgZXJybm8sXG4tXHRcdCAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0a3ZtX3NjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihwb3NzaWJsZV9tYXNrKSwgXHUwMDI2cG9zc2libGVfbWFzayk7XG4gXG4gXHRjYWxjX21pbl9tYXhfY3B1KCk7XG4gXG5AQCAtMjQ0LDcgKzI0Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuIFx0cHRocmVhZF9jcmVhdGUoXHUwMDI2bWlncmF0aW9uX3RocmVhZCwgTlVMTCwgbWlncmF0aW9uX3dvcmtlcixcbi1cdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpc3lzY2FsbChTWVNfZ2V0dGlkKSk7XG4rXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWt2bV9nZXR0aWQoKSk7XG4gXG4gXHRpZiAobGF0ZW5jeSBcdTAwM2U9IDApIHtcbiBcdFx0LypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc3RlYWxfdGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuaW5kZXggNzZmY2RkMWZkM2NiNDguLjJkZTg3NTQ5ZmNjMDM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3N0ZWFsX3RpbWUuY1xuQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIGJvb2wgaXNfc3RlYWxfdGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyB2b2lkIHN0ZWFsX3RpbWVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpKVxuIHtcbiBcdC8qIFNUX0dQQV9CQVNFIGlzIGlkZW50aXR5IG1hcHBlZCAqL1xuLVx0c3RfZ3ZhW2ldID0gKHZvaWQgKikoU1RfR1BBX0JBU0UgKyBpICogU1RFQUxfVElNRV9TSVpFKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0sXG4rXHRcdFx0XHQodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfS1ZNX1NURUFMX1RJTUUsICh1bG9uZylzdF9ndmFbaV0gfCBLVk1fTVNSX0VOQUJMRUQpO1xuIH1cbkBAIC0xODcsOCArMTg3LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4gXHR9O1xuIFxuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdHN0X2lwYSA9ICh1bG9uZylzdF9ndmFbaV07XG4gXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFx1MDAyNmRldik7XG5AQCAtMzEwLDEwICszMDksOCBAQCBzdGF0aWMgYm9vbCBpc19zdGVhbF90aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4ge1xuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3RfZ3BhW2ldID0gYWRkcl9ndmEyZ3BhKHZjcHUtXHUwMDNldm0sIChndmFfdClzdF9ndmFbaV0pO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3QodmNwdS1cdTAwM2V2bSwgc3RfZ3ZhW2ldKTtcbi1cdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZjcHUtXHUwMDNldm0sIHN0X2dwYVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2Y3B1LVx1MDAzZXZtLCBzdF9ndmFbaV0sICh2b2lkICopKFNUX0dQQV9CQVNFICsgaSAqIFNURUFMX1RJTUVfU0laRSkpO1xuK1x0V1JJVEVfQU5EX1NZTkNfVE9fR1VFU1QodmNwdS1cdTAwM2V2bSwgc3RfZ3BhW2ldLCBhZGRyX2d2YTJncGEodmNwdS1cdTAwM2V2bSwgKGd2YV90KXN0X2d2YVtpXSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdGVhbF90aW1lX2R1bXAoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkeClcbkBAIC00NDIsOCArNDM5LDcgQEAgc3RhdGljIHZvaWQgc3RlYWxfdGltZV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGkpXG4gXHR9O1xuIFxuIFx0LyogU1RfR1BBX0JBU0UgaXMgaWRlbnRpdHkgbWFwcGVkICovXG4tXHRzdF9ndmFbaV0gPSAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpO1xuLVx0c3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHN0X2d2YVtpXSk7XG4rXHRXUklURV9BTkRfU1lOQ19UT19HVUVTVCh2bSwgc3RfZ3ZhW2ldLCAodm9pZCAqKShTVF9HUEFfQkFTRSArIGkgKiBTVEVBTF9USU1FX1NJWkUpKTtcbiBcbiBcdGVyciA9IF9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fSEFTX0RFVklDRV9BVFRSLCBcdTAwMjZhdHRyKTtcbiBcdFRFU1RfQVNTRVJUKGVyciA9PSAwLCBcIk5vIFBWIHN0ZWFsdGltZSBGZWF0dXJlXCIpO1xuQEAgLTU0OSw4ICs1NDUsNyBAQCBpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdilcbiBcbiBcdFx0LyogU2Vjb25kIFZDUFUgcnVuLCBleHBlY3QgZ3Vlc3Qgc3RvbGVuIHRpbWUgdG8gYmUgXHUwMDNjPSBydW5fZGVsYXkgKi9cbiBcdFx0cnVuX3ZjcHUodmNwdXNbaV0pO1xuLVx0XHRzeW5jX2dsb2JhbF9mcm9tX2d1ZXN0KHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4tXHRcdHN0b2xlbl90aW1lID0gZ3Vlc3Rfc3RvbGVuX3RpbWVbaV07XG4rXHRcdHN0b2xlbl90aW1lID0gU1lOQ19GUk9NX0dVRVNUX0FORF9SRUFEKHZtLCBndWVzdF9zdG9sZW5fdGltZVtpXSk7XG4gXHRcdHJ1bl9kZWxheSA9IGdldF9ydW5fZGVsYXkoKTtcbiBcdFx0VEVTVF9BU1NFUlQoc3RvbGVuX3RpbWUgXHUwMDNjPSBydW5fZGVsYXksXG4gXHRcdFx0ICAgIFwiRXhwZWN0ZWQgc3RvbGVuIHRpbWUgXHUwMDNjPSAlbGQsIGdvdCAlbGRcIixcbkBAIC01NzAsOCArNTY1LDcgQEAgaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpXG4gXG4gXHRcdC8qIFJ1biBWQ1BVIGFnYWluIHRvIGNvbmZpcm0gc3RvbGVuIHRpbWUgaXMgY29uc2lzdGVudCB3aXRoIHJ1bl9kZWxheSAqL1xuIFx0XHRydW5fdmNwdSh2Y3B1c1tpXSk7XG4tXHRcdHN5bmNfZ2xvYmFsX2Zyb21fZ3Vlc3Qodm0sIGd1ZXN0X3N0b2xlbl90aW1lW2ldKTtcbi1cdFx0c3RvbGVuX3RpbWUgPSBndWVzdF9zdG9sZW5fdGltZVtpXSAtIHN0b2xlbl90aW1lO1xuK1x0XHRzdG9sZW5fdGltZSA9IFNZTkNfRlJPTV9HVUVTVF9BTkRfUkVBRCh2bSwgZ3Vlc3Rfc3RvbGVuX3RpbWVbaV0pIC0gc3RvbGVuX3RpbWU7XG4gXHRcdFRFU1RfQVNTRVJUKHN0b2xlbl90aW1lIFx1MDAzZT0gcnVuX2RlbGF5LFxuIFx0XHRcdCAgICBcIkV4cGVjdGVkIHN0b2xlbiB0aW1lIFx1MDAzZT0gJWxkLCBnb3QgJWxkXCIsXG4gXHRcdFx0ICAgIHJ1bl9kZWxheSwgc3RvbGVuX3RpbWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2RiZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5pbmRleCBhOWQ4ZTRjMDU5Zjk2OS4uZWFhODIwMWI5MzdkMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9kYmdfdGVzdC5jXG5AQCAtMzQsNyArMzQsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZV9idWZmZXJzKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19fX3Rlc3Rfc2V2X2RiZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGksIGludCBqLCBpbnQgbnJfYnl0ZXMpXG4ge1xuLVx0dTggcGF0dGVybiA9IGd1ZXN0X3JhbmRvbV91MzIoXHUwMDI2Z3Vlc3Rfcm5nKTtcbitcdHU4IHBhdHRlcm4gPSBrdm1fcmFuZG9tX3UzMihcdTAwMjZrdm1fcm5nKTtcbiBcbiBcdGlmIChpICsgbnJfYnl0ZXMgXHUwMDNlIEJVRkZFUl9TSVpFIHx8IGogKyBucl9ieXRlcyBcdTAwM2UgQlVGRkVSX1NJWkUpXG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjM5OjM1Ljg1NjI1Nzk3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NjYzMTk5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgS1ZNIHNlbGZ0ZXN0cy4gSXQncyBhZGRpbmcgYSBuZXcgdGVzdCwgYGlycV90ZXN0LmNgLCBhbmQgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gZXhpc3RpbmcgdGVzdCBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiAgSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgcmVuYW1pbmcgb2YgYGd1ZXN0X3JhbmRvbV8qYCB0byBga3ZtX3JhbmRvbV8qYCBhbmQgYSBiaXQgb2YgZmlsZSByZW9yZ2FuaXphdGlvbiB0b28uICBOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLCBvciB1bnJlYWNoYWJsZSBjb2RlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBsb29rcyBsaWtlIGl04oCZcyAqZW50aXJlbHkqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuICBTZWxmdGVzdHMsIGJ5IGRlZmluaXRpb24sIGFyZSB1c2VyLXNwYWNlIHRlc3RzLiBUaGV5J3JlIG5vdCBrZXJuZWwgY29kZS4gIEkgbmVlZCB0byBiZSB2ZXJ5IHN1cmUgYWJvdXQgdGhpcywgc28gSeKAmW0gZG91YmxlLWNoZWNraW5nIHRoZSBjaGFuZ2VkIGZpbGVzLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgZGlmZiwgdmVyaWZ5aW5nIHRoYXQgZXZlcnkgc2luZ2xlIGZpbGUgaXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIExldCdzIHNlZTogYE1ha2VmaWxlLmt2bWAsIGBhcmNoX3RpbWVyLmNgLCBgYXJtNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmNgLCBgZGVtYW5kX3BhZ2luZ190ZXN0LmNgLCB0aGUgZGlydHkgbG9nIHRlc3RzLCBhbGwgdGhlIGluY2x1ZGUgaGVhZGVycywgYGlycV90ZXN0LmNgLCB0aGUgbGlicmFyeSBmaWxlcyAoYGFzc2VydC5jYCwgYGt2bV91dGlsLmNgLCBldGMuKSwgdGhlIG1lbW9yeSBzdHJlc3MgdGVzdCwgUlNFUSB0ZXN0LCBzdGVhbCB0aW1lLCBhbmQgdGhlIFNFViBkZWJ1ZyB0ZXN0LCBhbGwgd2l0aGluIHRoZSBga3ZtYCBzZWxmdGVzdHMgZGlyZWN0b3J5LlxuXG5ZdXAsIGl0J3MgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIFRoaXMgY29uZmlybXMgaXQncyBzdHJpY3RseSB0ZXN0IGNvZGUsIG5vdCBjb3JlIGtlcm5lbCBjb2RlLCBkcml2ZXJzLCBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgdGhhdCB3b3VsZCBpbXBhY3QgdGhlICprZXJuZWwncyogZXhlY3V0aW9uIGZsb3cuICBUaGUgcHJvbXB0IGRpcmVjdHMgbWUgdG8gdXNlIG15IGNvZGUgc2VhcmNoIHRvb2xzIGlmIHRoaXMgd2VyZSB0byB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgYnV0IHNpbmNlIGl0IGlzIHNlbGYtdGVzdHMsIHRoZXJlJ3Mgbm8gbmVlZC4gU2luY2UgSeKAmXZlIGVzdGFibGlzaGVkIHRoYXQgaXQgKm9ubHkqIHRvdWNoZXMgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgcHJvbXB0IHNwZWNpZmllcyBub3QgdG8gZnV6eiBpdCBpZiBpdCB0b3VjaGVzICpvbmx5KiB0ZXN0IGNvZGUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSeKAmWxsIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBvbmUgbGFzdCB0aW1lIHRvIGJlIGV4dHJhIHN1cmUsIGJ1dCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgYXJlIG5vIG90aGVyIGZpbGVzIGludm9sdmVkLlxuXG5NeSBmaW5hbCBkZXRlcm1pbmF0aW9uIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoJ3Mgc2NvcGUgaXMgbGltaXRlZCB0byBLVk0gc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSB0ZXN0cyBhbmQgZG9uJ3QgbW9kaWZ5IGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxOCwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAxOjM5OjQ1LjUyMjU4MjA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsqnx6[1] Phase: Running StartedAt: 2026-06-27 01:39:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsqnx6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-27 01:39:56 +0000 UTC FinishedAt: 2026-06-27 01:40:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}